c++程序设计实践mfc打地鼠_第1页
c++程序设计实践mfc打地鼠_第2页
c++程序设计实践mfc打地鼠_第3页
c++程序设计实践mfc打地鼠_第4页
c++程序设计实践mfc打地鼠_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++程序设计实践打MadeBy陈锴刘若欣王一凡杨仕俊地鼠*所有排序均按学号DEMO题目分析总体设计介绍详细设计介绍遇到的问题尚存的不足心得体会1.题目分析①题目分析本游戏是一个基于对话框C++应用程序。在程序的编辑中涉及到MFC控件的编辑和使用,文件的读,消息的响应。

本程序可以实现的功能有:1.选择不同的难度开始游戏;2.鼠标击中“地鼠”时得分+1;3.未击中时得分不变,统计未击中次数+1;4.切换难度时得分清零;5.点错5次后显示“GameOver”,得分不再增加,提示重选难度进行游戏;6.点击按钮读取txt文件显示得分榜2.总体设计分析项目提出主逻辑控件与功能函数得分+1功能函数未击中+1功能函数难度选择控件与消息响应函数得分榜显示控件与消息响应函数调试与优化开始选择关卡击中地鼠?得分加一未击中加一5次未击中?鼠标点击YNYN3.详细设计分析③详细设计介绍界面构成模块实现:王一凡PushButtonComboBoxStaticText③详细设计介绍控件属性模块实现:王一凡ComboBoxPushButton将准备好的png格式文件上传到在线icon制作网站:http://www.ico.la/③详细设计介绍icon制作模块实现:王一凡在资源视图中右击icon,选择insert,在弹出的对话框中选择导入③详细设计介绍icon导入模块实现:王一凡③详细设计介绍添加变量模块实现:陈锴杨仕俊public:CComboBoxm_eb;Cstringm_select;private:

inta;interror;CButton*PMouse[16];intnowMouse;

intgameScore;③详细设计介绍编写OnInitDialog函数模块实现:陈锴杨仕俊SetWindowText("打地鼠");//改变标题栏的名称

gameScore=0;//初始得分为0

nowMouse=0;//初始化鼠标点击位置

③详细设计介绍编写OnInitDialog函数模块实现:陈锴杨仕俊srand((unsigned)time(NULL));//随机数发生器播种,srand函数是随机数发生器的初始化函数。原型:voidsrand(unsignedseed);用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如:srand(1);直接使用1来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用time函数来获得系统时间,它的返回值为从00:00:00GMT,January1,1970到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即:srand((unsigned)time(&t));还有一个经常用法,不需要定义time_t型t变量,即:srand((unsigned)time(NULL));直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。③详细设计介绍编写OnInitDialog函数模块实现:陈锴杨仕俊for(inti=0;i<16;i++){

PMouse[i]=(CButton*)GetDlgItem(IDC_BUTTON1+i);}//GetDlgItem函数的功能是返回窗口中指定参数ID的子元素的句柄,可以通过返回的句柄对窗口内的子元素进行操作。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等,应用程序能够通过句柄访问相应的对象的信息。本段即将指向第i个button的指针存入数组PMouse,实现button控件PMouse的一一对应③详细设计介绍编写OnCommand函数模块实现:陈锴杨仕俊CStringstr;//定义CString型变量strfor(inti=0;i<16;i++){if(LOWORD(wParam)==PMouse[i]->GetDlgCtrlID())

break;}//GetDlgCtrlID函数的功能是获得指定控件的ID号,LOWORD(wParam)是命令的ID号。

③详细设计介绍编写OnCommand函数模块实现:陈锴杨仕俊if(i==nowMouse){gameScore++;//如果检测到鼠标响应位置与随机生成的“地鼠”位置相同,得分加一

str.Format("%d",gameScore);//Format函数将十进制数转化为字符串,%d表示十进制,这里将gameScore转化为字符串并赋给str

CStatic*pstr=(CStatic*)GetDlgItem(IDC_STATIC);//将文本str传输到静态控件

pstr->SetWindowText(str);//将静态控件中的文本str即得分显示出来}③详细设计介绍编写OnTimer函数模块实现:陈锴杨仕俊PMouse[nowMouse]->SetIcon(0);//SetIcon能将图标自动地放到按钮的上面,缺省时居中放置。如果图标太大,则会自动剪裁。

nowMouse=rand()%16;//产生随机数取余

PMouse[nowMouse]->SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1));//加载已装载的图片资源

CDialog::OnTimer(nIDEvent);//OnTimer()是响应CDialog对象产生的WM_Timer消息。nIDEvent表示要响应TIMER事件的ID。③详细设计介绍编写OnSelchangeCombo函数模块实现:刘若欣intnIndex=m_eb.GetCurSel();//GetCurSel函数用于获取当前光标位置,定义int型变量nIndex并将得到的光标位置赋给它。

CStringstrCBText;//定义CString类变量strCBText

m_eb.GetLBText(nIndex,strCBText);//GetLBText把选中字符赋值给strCBText即将光标所在的字符串赋给strCBTextintnLength=strCBText.GetLength();//定义int型变量nLength并将strCBText的长度赋给它intnLengthLeft=0;//定义int型变量nLength初始值为0

nLengthLeft=strCBText.Find(":");//用Find函数获取冒号的位置

③详细设计介绍编写OnSelchangeCombo函数模块实现:刘若欣

CStringstrRightString;//定义CString型变量strRightString

strRightString=strCBText.Right(nLength-nLengthLeft-1);//Right函数从右边第一个字符起获得从右向左nLength-nLengthLeft-1个字符。此处获得冒号右面的字符串。

a=atoi(strRightString);//atoi函数将字符串转化为整型数。具体为如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符\0)字符时停止转换,返回整型数。SetTimer(1,a,NULL);//设置计数器,时间间隔为a,单位毫秒

③详细设计介绍编写OnButton函数模块实现:刘若欣CFilemyfile;CStringfilename=“c:\\得分榜.txt”;

myfile.Open(filename,CFile::modeRead);//文件打开及打开方式intfilelength=myfile.GetLength();

//获取文件长度CStringdata;

//定义字符串类,接收数据char*temp;

//临时变量,用于read函数按字节读取数据temp=newchar[filelength+1];myfile.Read(temp,filelength);

temp[filelength]='\0';

//读文件data=temp;//赋值给data,等号=已经在CString类中重载,直接使用,可以实现赋值delete[]temp;GetDlgItem(IDC_STATIC3)->SetWindowText(data);//发送到IDC_STATIC34.遇到的问题及解决遇到的问题及解决④在低难度的模式下,鼠标快速多次单击一个有“地鼠”的Button,得分会持续增加。问题一:“可以刷分了!233333”遇到的问题及解决④

解决方法:当鼠标响应当前的地鼠位置,可以重新运行一边Ontimer函数,更新随机地鼠的位置。不过此时需要重新设置时间,否则就会出现地鼠位置突然变化的情况。因为前一个地鼠(1000ms)可能在500ms被选中,此时地鼠变换位置,就会只停留500ms就转换位置了,所以要重新设置时间。遇到的问题及解决④由于rand()的随机性,会出现rand()%16为0的情况。在这种情况下,没有任何一个Button加载地鼠图标。问题二:“什么都没有让宝宝怎么点!?

严重影响游戏体验”遇到的问题及解决④解决方法:加一个循环语句和一个IF语句,循环5次,当随机数取余为0的情况就重新取余,5次就大大降低了取余为0的情况。5.尚存的不足⑤尚存的不足1.UI有待优化;2.Button不能批量定义大小,批量对齐;3.尚未完成得分榜的写操作;4.……6.心得体会⑥心得体会经过一周多的时间我们完成了一个简单的打地鼠程序,经过这次小组合作我认识到了很多。首先一个明确的目标十分重要,在开始设计之前我们花了很长时间来讨论要做什么,否定了很多不成熟的方案。但是一旦目标定下来是打地鼠后进度就开始变快了,根据组内每个人的特点分配了不同的任务,学习能力比较强的同学负责一些较难的模块,然后每个人将各自负责的部分在组内讲解清楚,真正达到了小组学习的目的。⑥心得体会另外我们发现程序设计中不止需要学习能力,创新能力也很重要,通过网络了解了打地鼠程序的主要思路和一些基本知识后,我们将一部分精力放在了优化程序上,增加一些我们自己希望的功能,删去一些我们认为设计不好的地方,(辩证否定的实质是扬弃,新事物对旧事物既批判又继承,既克服其消极因素又保留其积极因素)。⑥心得体会我们还认识到,一个程序的真正价值是面向使用者,只有充实的内涵没有必要的外观也是不够的,就和这次大作业一样,一个好的程序没有一个好的PPT去展示也是不足的,因此我

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论