ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:1.04MB ,
资源ID:1165055      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1165055.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(贪吃蛇小游戏实验报告参考模板.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

贪吃蛇小游戏实验报告参考模板.docx

1、贪吃蛇小游戏实验报告参考模板软件设计报告学 院:华北电力大学科技学院专业班级:软件10K1学生姓名:张飞学生学号:101909020122指导教师:乔玲玲提交时间: 成 绩:设计题目: 贪吃蛇 一 需求分析二 概要设计三 详细设计四 心得体会一 需求分析1.1关于题目1.1.1题目要求利用Microsoft Visual C+制作一个贪吃蛇的小游戏,要求:(1)应用MFC单文档制作(2)能够记录游戏成绩(3)可根据玩家要求设置游戏速度(级别):初级,中级,高级(4)可以根据个人喜好更换背景图片,食物图片,障碍物图片,结束图片等1.1.2选题背景贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为

2、了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我们,它的制作方法对于以前的我们而言都是很神秘的。我们希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我们的编程能力不是很强,但是我们有信心,在这次学习中我们将从实践和实际的项目中提高自己的编程能力。因此我们选定了这个题目。1.2关于编译软件本程序采用Microsoft Visual C+6.0的英文版本进行编译。VisualC+6.0是Microsoft公司推出的基于Windows操作系统的可视化C+编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上

3、支持标准C/C+规范,但仍有相当多的编程人员使用VisualC+6.0进行应用系统的开发。1.3关于兼容性本程序经过调试,可以在XP系统下编译运行,也可以在Vista下运行,界面稍有不同,但不影响运行结果。二 概要设计2.1软件主要功能设计2.1.1程序结构根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、停止游戏,设置游戏级别(速度),设置图片等。具体的程序结构如下面的图1-1所示。图2-1 贪吃蛇结构图2.1.2程序流程根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。贪吃蛇的内容主要包括: 游戏开始,随机出现食物。图2-2 贪吃蛇流程图三 详细设计3.1变量函数及资源的声

4、明根据程序的结构,将贪吃蛇需要实现的功能细化成为相应的函数。3.1.1函数声明主函数:void StartGame() /开始游戏void GameAreaDraw(HDC hdc) /绘制游戏空间,包括空地,水果和毒果等void SheelDraw(HDC hdc) /绘制墙,白色底平面,绘制分数板,绘制分数打印墙蛇的函数:CSnake:CSnake(int x_pos,int y_pos,int len) /蛇的构造函数int CSnake:ChangeDirect(MoveState d) /改变蛇的运动方向void CSnake:Move() /保存蛇身体各部分的形状、根据新旧状态特性

5、取正确的状态void CSnake:AddBody(int n) /保存位置、保存蛇的状态信息、创建并初始化增长后的蛇的存储数据空间void CSnake:SetHeadPos(int x,int y) /设置蛇头的位置void CSnake:Initial() /蛇的初始化(坐标位置、运动状态、位图显示状态桌面函数:CTable:CTable() / 桌面的构造函数void CTable:InitialTable(int w,int h) /初始化桌面函数bool CTable:AddBlock(int x,int y) / 添加障碍物bool CTable:AddFood(int x,in

6、t y) / 添加食物bool CTable:ClearFood(int x,int y) / 清除食物CSnake *CTable:GetSnake() / 获得蛇int CTable:GetData(int x,int y) / 活得数据void CTable:SnakeMove() / 蛇的运动3.2主要功能的实现3.2.1游戏界面贪吃蛇游戏的游戏界面包括背景图片、蛇身体的绘制、蛇移动范围的绘制等等。其中贪吃蛇的身体用什么方法绘制,才可以使得其在游戏过程中可以实现“吃”的功能是很重要的。因此在游戏界面的初始绘制时就必须考虑到游戏时可能遇到的问题。导入位图以及菜单工具条后,游戏开始一段时间

7、后(XP系统下)的界面显示如图3-1所示图3-1 游戏初始界面显示3.2.2初始化食物确定用点数组存储贪吃蛇以后,贪吃蛇的食物如何达到随机出现,并且能够按照网格式与蛇头无偏差相接就是一个亟待解决的问题。随机出现应采用rand()函数来实现,而食物与蛇头无偏差相接则利用坐标来解决。再由食物坐标(X,Y)与蛇头坐标是否相同判断蛇是否“吃”到了食物。在下面的图3-2中,我们可以看到,蛇的身体是与出现的食物在一条直线上的,完全可以达到相接的目的。图3-2 蛇与食物的相接3.2.3开始游戏开始游戏后的重点是如何用键盘来控制蛇的移动并传递到函数中去以及判断蛇是否死亡。如图3-3所示。 (1)左 (2)下

8、(3)右 (4)上图3-3 键盘的上下左右键的效果其次来解释一下如何判断蛇的死亡,由于蛇的身体是由点坐标数组构成的,因此判断蛇是否死亡其本质就是判断蛇头的坐标是否与游戏边框相同或者蛇头坐标是否与蛇自己的身体相同。if(table.GetData(table.GetSnake()-GetPos()0.x,table.GetSnake()-GetPos()0.y) = TB_STATE_SBLOCK) uGameState = GAME_STATE_END; :KillTimer(hWnd,0); if(table.GetSnake()-IsHeadTouchBody(table.GetSnake

9、()-GetPos()0.x,table.GetSnake()-GetPos()0.y) & table.GetSnake()-GetStateArray()0 != M_NONE) /刚开始设置为首尾在一起,故由此判断,要第二次与身体碰撞才失败 uGameState = GAME_STATE_END; :KillTimer(hWnd,0); if(table.GetData(table.GetSnake()-GetPos()0.x,table.GetSnake()-GetPos()0.y) = TB_STATE_BLOCK) uGameState = GAME_STATE_END; :Kil

10、lTimer(hWnd,0); DrawGame(); 死亡界面图3-4 贪吃蛇的死亡3.2.5游戏设置这里的游戏设置主要是指游戏的等级的控制。前面在变量声明中已经看到,关于这三个量,我们已经予以了定义,只需要在按下相应键盘或鼠标消息的时候,将变量值进行改变,再利用这些值控制相应功能的运行。其中在构造函数CYuShuoView:CYuShuoView()中已经将m_yseffectctrl的初值设置为1。四 结果与讨论4.1程序运行程序开始运行后会进入游戏界面,但是不会立即进行游戏,单击菜单的“开始”才会开始游戏。在游戏开始前,玩家可以根据自己的喜好,通过菜单或者工具栏设置游戏等级等。case

11、 IDM_PRIMARY: if(g_hTimer != 0) KillTimer(hWnd,0); g_bStart = TRUE; g_bKey = TRUE; g_bMove = false; g_iTime = 100; g_iCount = 1; iScore = 0; g_NoFood = TRUE; g_hBlock = TRUE; StartGame(); g_hTimer = SetTimer(hWnd,0,g_iTime,NULL); break; case IDM_MIDDLE: if(g_hTimer != 0) KillTimer(hWnd,0); g_bStart

12、= TRUE; g_bKey = TRUE; g_bMove = false; g_iTime = 50; g_iCount = 1; iScore = 0; g_NoFood = TRUE; g_hBlock = TRUE; StartGame(); g_hTimer = SetTimer(hWnd,0,g_iTime,NULL); break; case IDM_HARD: if(g_hTimer != 0) KillTimer(hWnd,0); g_bStart = TRUE; g_bKey = TRUE; g_bMove = false; g_iTime = 50; g_iCount

13、= 2; iScore = 0; g_NoFood = TRUE; g_hBlock = TRUE; StartGame(); g_hTimer = SetTimer(hWnd,0,g_iTime,NULL); break; 四心得体会错误调试与分析1.在编写代码的过程中,我们遇到了一个问题,在函数int CSnake:ChangeDirect(MoveState d)中,开始我们是把此函数写成一个空函数,但是出现了问题,但是改成了Int 返回值后,问题不再出现,原因是ChangeDirect在定义是就定义为了一个int型的,所以若在此处用空的返回值,则不匹配。2.在链接过程中,出现了nonincremental update requires all .SBRfiles的错误提示,经上网搜索后,得到的解决方法是:将debuge文件夹删除后再重新编译链接一次,问题解决。 友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1