嵌入式程序设计-打地鼠游戏设计.doc_第1页
嵌入式程序设计-打地鼠游戏设计.doc_第2页
嵌入式程序设计-打地鼠游戏设计.doc_第3页
嵌入式程序设计-打地鼠游戏设计.doc_第4页
嵌入式程序设计-打地鼠游戏设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式程序设计打地鼠2020年1月25日目录1开发背景32功能描述33.基本原理34.系统总体设计44.1界面设计44.2 相关变量定义64.3 内部类定义及方法说明65系统测试165.1 运行界面161开发背景打地鼠是一款常见的小游戏,简单有趣,深受人们的喜爱,本项目作为基于嵌入式WinCE课程设计和简单游戏编程而提出。希望通过开发打地鼠游戏,了解并掌握WinCE软件开发工具的使用,同时提高嵌入式设计的能力。2功能描述基本功能:地鼠随机出现在地图上,跟据鼠标点击事件捕获鼠标指针所在区域是否出现地鼠来判断玩家是否击中地鼠,玩家有10次失误机会。3.基本原理玩家触发游戏后,地鼠会随机出现在地图上,玩家通过鼠标击打地鼠,地鼠每隔一段时间机会随机出现在地图某一块,若玩家反映不及没有触发鼠标事件,地鼠随机出现别的地方玩家分数不变;若已触发鼠标事件且没有击中地鼠,玩家分数减少;击中则分数增加。系统流程图:(主要部分的流程图)4.系统总体设计4.1界面设计本系统设计了三个界面,一个是游戏运行界面,一个是成绩保存,一个历史最高纪录显示界面(玩家成绩)。4.2 相关变量定义int scorce;/得分int randx=0,randy=0;/随机得到的地鼠坐标int Total=10;/若有Total次击不中则游戏结束typedef structTCHAR name20;/姓名int score;/成绩User;4.3 内部类定义及方法说明void ReadScoreFile();/读取历史分数记录void WriteScoreFile();/将玩家的游戏分数写到文件中void SortList();/对玩家分数排序void InitData();/初始化数据void EndGame();/游戏结束void clearPicture();/还原背景图void drawPicture(int bmpNum);/画图void chilkTrue(int x,int y);/判定是否击中BOOL CDadishuDlg:OnInitDialog()游戏初始化函数。void CMengSnakeDlg:OnTimer(UINT nIDEvent)计时器函数,自动根据时间变量来执行程序,随机为地鼠生成一个坐标,并绘制到地图上。void CDadishuDlg:OnLButtonDown(UINT nFlags, CPoint point)消息处理函数,鼠标左键点击触发,主要用来打击地鼠。void CDadishuDlg:OnPaint() 重绘函数,实现地图区域的绘制游戏界面部分相关代码:OOL CDadishuDlg:OnInitDialog()CDialog:OnInitDialog();/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small iconCenterWindow(GetDesktopWindow();/ center to the hpc screen/ TODO: Add extra initialization hereHWND hwndCB; hwndCB = CommandBar_Create(AfxGetInstanceHandle(), GetSafeHwnd(),0);CommandBar_InsertMenubar(hwndCB, AfxGetInstanceHandle(), IDR_MENU1, 0);return TRUE; / return TRUE unless you set the focus to a control/还原背景图void CDadishuDlg:clearPicture()PDC = GetDC();CDC bmpDC;bmpDC.CreateCompatibleDC(PDC);CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP3);BITMAP bm;bmp.GetBitmap(&bm);bmpDC.SelectObject(bmp);int px=40+randx*80+1;int py=40+randy*80+1;PDC-StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY);/画图void CDadishuDlg:drawPicture(int bmpNum) PDC = GetDC();CDC bmpDC;bmpDC.CreateCompatibleDC(PDC);CBitmap bmp;if(bmpNum=1)bmp.LoadBitmap(IDB_BITMAP1);elsebmp.LoadBitmap(IDB_BITMAP2);BITMAP bm;bmp.GetBitmap(&bm);bmpDC.SelectObject(bmp);int px=40+randx*80+1;int py=40+randy*80+1;PDC-StretchBlt (px,py,78,78,&bmpDC,0,0,bm.bmWidth, bm.bmHeight,SRCCOPY);/判定是否击中void CDadishuDlg:chilkTrue(int x,int y)int px_min=40+randx*80;int px_max=40+(randx+1)*80;int py_min=40+randy*80;int py_max=40+(randy+1)*80;if(x=px_min&x=py_min&ym_Value=scorce;ts-DoModal();/void CDadishuDlg:OnPaint() CPaintDC dc(this); / device context for painting/ TODO: Add your message handler code hereCDC *pDC=new CClientDC(this);CPen pen;/画笔pen.CreatePen(PS_SOLID,1,RGB(0,0,0);CPen *poldpen=pDC-SelectObject(&pen);pDC-Rectangle(40,40,280,280);pDC-SelectObject(poldpen);/new出来的一般都需要delete来回收内存。delete pDC;/ Do not call CDialog:OnPaint() for painting messages/鼠标点击事件void CDadishuDlg:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(!start)return;chilkTrue(point.x,point.y);CDialog:OnLButtonDown(nFlags, point);/void CDadishuDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultswitch(nIDEvent)case 1:clearPicture();randx=rand()%3;randy=rand()%3;drawPicture(1);break;case 2:m_score=scorce;UpdateData(FALSE);break;case 3:_time+;char temp10;CString time;int second=_time%60;int minut=_time/60%60;int hour=_time/3600%24;_itoa(hour,temp,10);if(hour9)time+=temp;elsetime=time+0+temp;_itoa(minut,temp,10);if(minut9)time=time+:+temp;elsetime=time+:0+temp;_itoa(second,temp,10);if(second9)time=time+:+temp;elsetime=time+:0+temp;m_time=time;UpdateData(FALSE);break;CDialog:OnTimer(nIDEvent);/初始化数据void CDadishuDlg:InitData()Total=10;start=true;SetTimer(1,timer,NULL);scorce=0;SetTimer(2,100,NULL);_time=0;SetTimer(3,1000,NULL);/void CDadishuDlg:EndGame()KillTimer(1);KillTimer(2);KillTimer(3);start=false;/重新开始void CDadishuDlg:OnMENUITEMRestart() / TODO: Add your command handler code hereEndGame();InitData();/开始游戏void CDadishuDlg:OnMENUITEMStart() / TODO: Add your command handler code hereInitData();/void CDadishuDlg:OnMENUITEMSeachRecord() / TODO: Add your command handler code hereSerachRecord *sr=new SerachRecord;sr-DoModal();保存记录的相关代码:User list11;int UserListLength=0;/ TS message handlersvoid TS:ReadScoreFile()CString filename=scores.dat;HANDLE hFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);SetFilePointer(hFile,0,NULL,FILE_BEGIN); User us; DWORD aa;int i=0; do ZeroMemory(&us,sizeof(us); if(ReadFile(hFile,&us,sizeof(us),&aa,NULL) if(aa!=0)listi+=us; while(aa=sizeof(us);UserListLength=i;CloseHandle(hFile);/写到文件里void TS:WriteScoreFile()CString filename=scores.dat;int i;/文件句柄HANDLE hFile=CreateFile(filename,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);/设置文件开始处SetFilePointer(hFile,0,NULL,FILE_BEGIN);DWORD aa;/将数据写到文件for(i=0;iUserListLength&i10;i+)WriteFile(hFile,&listi,sizeof(listi),&aa,NULL);CloseHandle(hFile);/安分数从大到小排序void TS:SortList()int i,j,k;for(i=0;iUserListLength-1;i+)k=i;for(j=i+1;jlistk.score)k=j;if(k!=i)User temp=listk;listk=listi;listi=temp;void TS:OnOK() / TODO: Add extra validation here/ TODO: Add extra validation hereUpdateData(TRUE);ReadScoreFile();int i=0;User us;ZeroMemory(&us,sizeof(us);/将值更新到变量 UpdateData(TRUE); wcscpy(,m_UserName);us.score=m_Value;listUserListLength=us;UserListLength+;SortList();for(i=0;i=10)AfxMessageBox(_T(对不起你的名次最低,没有突破前10名);return;WriteScoreFile();CDialog:OnOK();查看记录相关代码void SerachRecord:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(SerachRecord)DDX_Control(pDX, IDC_LIST1, m_list);CRect rt;m_list.GetClientRect(&rt);m_list.InsertColumn(0,_T(名次),LVCFMT_LEFT,(int)(rt.Width()*0.35);m_list.InsertColumn(1,_T(得分),LVCFMT_LEFT,(int)(rt.Width()*0.35);m_list.InsertColumn(2,_T(姓名),LVCFMT_LEFT,(int)(rt.Width()*0.3);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(SerachRecord, CDialog)/AFX_MSG_MAP(SerachRecord)/AFX_MSG_MAPEND_MESSAGE_MAP()/ SerachRecord message handlersvoid SerachRecord:OnOK() / TODO: Add extra validation her

温馨提示

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

评论

0/150

提交评论