




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件设计报告学 院:华北电力大学科技学院专业班级:软件10K1学生姓名:张飞学生学号:101909020122指导教师:乔玲玲提交时间: 成 绩:设计题目: 贪吃蛇 目录一 需求分析二 概要设计三 详细设计四 心得体会一 需求分析1.1关于题目1.1.1题目要求利用Microsoft Visual C+制作一个贪吃蛇的小游戏,要求:(1) 应用MFC单文档制作(2) 能够记录游戏成绩(3) 可根据玩家要求设置游戏速度(级别):初级,中级,高级(4) 可以根据个人喜好更换背景图片,食物图片,障碍物图片,结束图片等1.1.2选题背景贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我们,它的制作方法对于以前的我们而言都是很神秘的。我们希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我们的编程能力不是很强,但是我们有信心,在这次学习中我们将从实践和实际的项目中提高自己的编程能力。因此我们选定了这个题目。1.2关于编译软件本程序采用Microsoft Visual C+6.0的英文版本进行编译。VisualC+6.0是Microsoft公司推出的基于Windows操作系统的可视化C+编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准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变量函数及资源的声明根据程序的结构,将贪吃蛇需要实现的功能细化成为相应的函数。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() /保存蛇身体各部分的形状、根据新旧状态特性取正确的状态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,int 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游戏界面贪吃蛇游戏的游戏界面包括背景图片、蛇身体的绘制、蛇移动范围的绘制等等。其中贪吃蛇的身体用什么方法绘制,才可以使得其在游戏过程中可以实现“吃”的功能是很重要的。因此在游戏界面的初始绘制时就必须考虑到游戏时可能遇到的问题。导入位图以及菜单工具条后,游戏开始一段时间后(XP系统下)的界面显示如图3-1所示图3-1 游戏初始界面显示3.2.2初始化食物确定用点数组存储贪吃蛇以后,贪吃蛇的食物如何达到随机出现,并且能够按照网格式与蛇头无偏差相接就是一个亟待解决的问题。随机出现应采用rand()函数来实现,而食物与蛇头无偏差相接则利用坐标来解决。再由食物坐标(X,Y)与蛇头坐标是否相同判断蛇是否“吃”到了食物。在下面的图3-2中,我们可以看到,蛇的身体是与出现的食物在一条直线上的,完全可以达到相接的目的。图3-2 蛇与食物的相接3.2.3开始游戏开始游戏后的重点是如何用键盘来控制蛇的移动并传递到函数中去以及判断蛇是否死亡。如图3-3所示。 (1)左 (2)下 (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()-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;:KillTimer(hWnd,0);DrawGame();死亡界面图3-4 贪吃蛇的死亡3.2.5游戏设置这里的游戏设置主要是指游戏的等级的控制。前面在变量声明中已经看到,关于这三个量,我们已经予以了定义,只需要在按下相应键盘或鼠标消息的时候,将变量值进行改变,再利用这些值控制相应功能的运行。其中在构造函数CYuShuoView:CYuShuoView()中已经将m_yseffectctrl的初值设置为1。四 结果与讨论4.1程序运行程序开始运行后会进入游戏界面,但是不会立即进行游戏,单击菜单的“开始”才会开始游戏。在游戏开始前,玩家可以根据自己的喜好,通过菜单或者工具栏设置游戏等级等。case 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 = 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 = 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)中,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年自动化智能制造策划合作协议
- 2025年上海市重大活动策划合作安全协议
- 2025年人力资源服务外包协议模版
- 2025年官方策划完整版离婚协议书模板范例
- 2025年威海市解除雇佣协议书
- 2025年教育合作机构招生联盟协议
- 数据泄露与信息安全的企业责任
- 2025年注册税务师税法二重点难点与案例分析解析汇编专项专项高频考点试卷
- 2025年有限空间作业安全操作规范试题集
- 2025年执业药师考试药学综合知识合理用药案例解析与考试技巧试题
- 恒生笔试题及答案
- 2025-2031年中国垃圾处理市场竞争策略及行业投资潜力预测报告
- 找人办事花钱协议书
- 2024-2025学年青岛版(五四学制)小学数学二年级下册(全册)知识点复习要点归纳
- 2025年入团考试必考题目试题及答案
- 人工智能训练师(三级)职业技能鉴定理论考试题(附答案)
- 职业技术学院装配式建筑工程技术专业人才培养方案(2024版)
- 学校学生食品安全培训课件
- 设计图学知到智慧树期末考试答案题库2025年华东理工大学
- 空气动力学试题及答案
- 2024-2025部编版小学道德与法治一年级下册知识点(选择题集)
评论
0/150
提交评论