贪吃蛇计算机实习报告 北京邮电大学.doc_第1页
贪吃蛇计算机实习报告 北京邮电大学.doc_第2页
贪吃蛇计算机实习报告 北京邮电大学.doc_第3页
贪吃蛇计算机实习报告 北京邮电大学.doc_第4页
贪吃蛇计算机实习报告 北京邮电大学.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

2012年计算机实习报告 计算机实习报告 姓名: xxx 班级: xxx 学号: xxx 小班序号:xxx 指导老师:xxx 题目:MFC简易贪吃蛇程序 邮箱:xxx MFC简易贪吃蛇程序实验报告一功能说明1.1总体功能说明主要功能为实现MFC简易贪吃蛇游戏的运行。具体功能:1、能够实现游戏的开始、暂停、继续和结束;2、能够显示游戏成绩;3、在贪吃蛇蛇身的加长过程中,通过改变蛇爬行的速度来改变游戏难度。4、游戏结束可重新开始游戏;5、能够显示贪吃蛇和食物所处的坐标。主要特色为运用MFC编程,游戏界面友好,简洁、操作简单易懂,快捷键操作使游戏的暂停和继续更为方便,使得玩家在操作过程中感到轻松愉快。1.2用户界面 游戏运行时:游戏结束时:显示鼠标处坐标:游戏主界面如上图。实现游戏的所有功能:游戏的开始、运行、暂停、继续和退出。 显示鼠标点击处坐标 1.3使用方法单击“开始游戏”,弹出对话框“3秒之后开始游戏”,点按确定之后蛇开始移动。通过键盘的“”“”“”“”可控制蛇的移动,每吃一个食物增加一节蛇身长度。游戏过程中可通过“游戏”下拉菜单中选择“暂停”暂停游戏并继续游戏。若撞到边界或撞到蛇身游戏结束,弹出对话框提示得分情况,游戏结束。可通过点击“开始游戏”重新开始游戏。游戏难度通过控制蛇的移动速度来实现,随蛇身长度的增加而增加。蛇身长度每增加三节到五节,速度增加一次。二程序设计说明具体模块划分:1定义蛇类和食物类,初始化贪吃蛇各项成员变量,包括图像的出现在屏幕的初始位置,长度,以及蛇头的行走方向。食物类的定义包括出现的初始位置,以及食物是否被吃掉的判断。2用数组初始化长度为3的贪吃蛇,并且默认食物未出现3在CView类上运用MFC提供的Windows消息中WM_TIMER消息,运用OnTimer()函数让系统提供一个时钟节拍,更新游戏4具体游戏实现,包括蛇撞到自己和围墙都将使游戏结束,判断吃豆等,其中还包括根据蛇的长度来进行游戏难度的改变。5具体键盘游戏操作运用到Windows消息响应中的WM_KEYDOWN,用OnKeyDown()来响应玩家的实际操作。添加、设计控件设计游戏主体定义蛇类和食物类对函数添加代码对控件添加代码蛇身的移动、转向蛇身的增长、变速食物的判断及产生2.2 关键算法描述/根据蛇的长度设计游戏难度 CString soure; if(Snake0.len=3)SetTimer(1,300,NULL); if(Snake0.len=8)SetTimer(1,250,NULL); if(Snake0.len=13)SetTimer(1,200,NULL); if(Snake0.len=18)SetTimer(1,150,NULL); if(Snake0.len=23)SetTimer(1,100,NULL); if(Snake0.len=28)SetTimer(1,95,NULL); if(Snake0.len=33)SetTimer(1,90,NULL); if(Snake0.len=38)SetTimer(1,80,NULL); if(Snake0.len=45)SetTimer(1,60,NULL); if(Snake0.len=50)SetTimer(1,55,NULL); if(Snake0.len=55)SetTimer(1,50,NULL); if(Snake0.len=60)SetTimer(1,45,NULL); if(Snake0.len=65)SetTimer(1,40,NULL); if(Snake0.len=75)SetTimer(1,35,NULL); if(Snake0.len=100)SetTimer(1,25,NULL); if(Snake0.len=400)SetTimer(1,10,NULL); soure.Format(Game over得分:%d!,(Snake0.len-3)*10); /游戏结束时输出文本 /撞界判断 if(Snake0.x*20=45|Snake0.y*20=630|Snake0.y*20=630) KillTimer(1); AfxMessageBox(soure); /蛇身相撞判断if(Snake0.len3) for(int sn=Snake0.len-1;sn0;sn-) if(Snake0.x*20=Snakesn.x*20&Snake0.y*20=Snakesn.y*20) KillTimer(1); AfxMessageBox(soure); / pDC-SelectStockObject(WHITE_PEN); /把白色的“PEN”选入设备进行画图 pDC-Rectangle(SnakeSnake0.len-1.x*20,SnakeSnake0.len-1.y*20,(SnakeSnake0.len-1.x+1)*20,(SnakeSnake0.len-1.y+1)*20); /用白色画去最后一个节点 for(int i=Snake0.len-1;i0;i-) Snakei.x=Snakei-1.x; Snakei.y=Snakei-1.y; /贪吃蛇移动的实现 /行走方向判断(1:上 2:下 3:左 4:右) if(Snake0.direct=1) Snake0.y-; if(Snake0.direct=2) Snake0.y+; if(Snake0.direct=3) Snake0.x-; if(Snake0.direct=4) Snake0.x+; pDC-SelectStockObject(BLACK_PEN); /把黑色的“PEN”选入设备进行画图 CBrush DrawBrush=(RGB(153,51,250); /定义画刷 CBrush *Drawbrush=pDC-SelectObject(&DrawBrush); /把对象画刷显示到设备描述表中 pDC-Rectangle(Snake0.x*20,Snake0.y*20,(Snake0.x+1)*20,(Snake0.y+1)*20); pDC-SelectObject(DrawBrush); /判断吃豆的条件,撞到就吃 if(Snake0.x*20=Food.x*20&Snake0.y*20=Food.y*20) Snake0.len+; Food.isfood=0; SnakeSnake0.len-1.x=SnakeSnake0.len-2.x; SnakeSnake0.len-1.y=SnakeSnake0.len-2.y; /如果食物被吃了 就生成 if(Food.isfood=0) srand(unsigned)time(NULL); do Food.x=rand()%50; Food.y=rand()%50; while(Food.x*2065|Food.y*20630|Food.y*20630); pDC-Rectangle(Food.x*20,Food.y*20,(Food.x+1)*20,(Food.y+1)*20); Food.isfood=1; /生成蛇身之外的食物for(int k=0;k=(Snake0.len+1);k+) if(Food.x*20=Snakek.x*20&Food.y*20=Snakek.y*20) Food.isfood=0; .2.3 程序设计的难点和关键点1、贪吃蛇蛇身的移动的表现;2、贪吃蛇身的加长的表现;3、食物在游戏区域的随机产生;4、蛇身速度的控制;5、游戏背景的填充以及使用画刷画出贪吃蛇以及食物。2.4 调试的方法游戏过程中会某些时候会出现食物无法出现的情况。经反复测试发现原因如下:蛇移动是通过将蛇尾扫过区域用画刷画成白色实现的,而食物的随机坐标若恰好出现在蛇身覆盖区域,则蛇尾扫过之后就会变成背景的白色,造成食物看不见的现象。解决办法:增加一个if条件语句,判断食物坐标是否与蛇身坐标重合,若重合则重新产生食物坐标。另外,游戏过程中有时会出现食物出现在游戏地图外围的情况,经测试原因为:在编程过程中,未能正确确定食物出现是横纵坐标的限制。解决办法:严密计算食物横纵坐标与地图外围坐标的关系,正确设立食物出现的限制。2.5 程序性能评价从运行效果上进行分析,找出程序的优点和不足优点:由于MFC操作的简易性以及界面的简洁性,友好型,程序的操作简单易懂,快捷键的加入更是方便了用户操作。计分系统和重难度模式的加入增加了游戏的可玩性。不足:鉴于对MFC了解的程度,该游戏功能过于简单,不能选择游戏难度、也没有英雄榜、背景音乐等,游戏界面不美观。从程序设计上进行分析,找出程序的优点和不足优点:用于实现主要功能的代码简洁易懂,条理清晰,注释部分讲解详细缺点:鉴于对MFC的了解程度,还存在很多非必需的代码;产生蛇身之外食物的算法虽然简单易懂,但是在实际游戏操作中会有延迟现象,仍需改进。三心得体会在这次小学期中,最大的感受是知识来源于实践。这个小学期之前,我对MFC一无所知,但在一步一步摸索着应用MFC编写程序的过程中,我慢慢了解了控件、消息,学会为按键设置快捷键、设计菜单.每一次的实践都教会我许多,而每一次探索之后得到的快乐,是比从书上获得知识更快乐的。通过运用MFC编程,我真切地感受到了它的便捷。它自动生成的代码省去的很多繁琐的初始化代码,自动生成一个运行程序框

温馨提示

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

评论

0/150

提交评论