




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南工业大学课程设计任务书2012 2013 学年第 2 学期 计算机与通信 学院(系、部) 软件工程 专业 1201 班级课程名称: 面向对象课程设计 设计题目: 贪吃蛇 完成期限:自 2013 年 6 月 24 日至 2013 年 6 月 29 日共 1 周内容及任务1、 设计的主要技术参数 贪吃蛇游戏实现的功能有:控制蛇前后左右移动、控制蛇斜走、暂停游戏、继续游戏、背景音乐的播放、记录成绩2、 设计任务游戏操作界面的生成;插入游戏界面图片;蛇的移动控制、播放音乐、暂停/停止暂停、结束游戏、游戏记录的生成;程序的调试与修改3、 设计工作量一周进度安排起止日期工作内容6月24号游戏操作界面的生成、背景图片的插入6月25号-26号蛇的移动控制、播放音乐、暂停/停止暂停6月27号-28号结束游戏、游戏记录的生成6月29号程序的调试与修改主要参考资料1谭浩强.C+面向对象程序设计M.北京:清华大学出版社,2006.2. 张海林,杜忠友,姜玉波. Visual C+简明教程M.北京:电子工业出版社,2007.3丁展,四维科技.Visual C+游戏开发技术与实例M北京:人民邮电出版社,20054姚领田精通MFC程序设计M北京:人民邮电出版社.2000.指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日 面向对象程序设计课程设计设计说明书基于windows界面应用程序贪吃蛇起止日期: 2013 年 6 月 24 日 至 2013 年 6 月 28 日学生姓名汪骁将班级软件工程1201学号12408300126成绩指导教师(签字)计算机与通信学院2013 年 6 月 28 日目 录第一章 引言1.1关于题目31.1.1题目要求31.1.2选题背景31.2关于编译软件31.3关于兼容性3第二章 概要设计2.1软件主要功能设计42.1.1程序结构42.1.2程序流程4第三章 软件实现3.1变量函数及资源的声明63.1.1函数声明63.1.2变量声明63.1.3资源73.2主要功能的实现73.2.1游戏界面73.2.2初始化食物73.2.3开始游戏73.2.4游戏设置第四章 解释4.1个人所分任务详解第五章 结果与讨论.1程序运行144.1.1部分函数与代码14.2实验总结15第一章 引言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程序结构根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、暂停游戏以及停止游戏,音乐音效的添加与控制,游戏帮助提示等等。具体的程序结构如下面的图所示:开始游戏暂停游戏退出游戏继续游戏游戏游戏控制模块游戏帮助2.1.2程序流程根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。贪吃蛇的内容主要包括: 游戏开始,随机出现食物;按下暂停按钮或Space键可以实现暂停功能,按下Z键游戏继续开始;按下帮助键可获得游戏帮助说明;可播放背景音乐等等。下图卫程序流程图:如果蛇的头部与food重合将food添加到蛇身中并产生新的food出界与自身相交移动一格YNNNreturn false更新运动方向Return true本次贪吃蛇基本流程与大体思想1定义蛇类和食物类,初始化贪吃蛇各项成员变量,包括图像的出现在屏幕的初始位置,长度,以及蛇的行走方向。食物类的定义包括出现的初始位置,以及食物是否被吃掉的判断。2用数组初始化长度为3的贪吃蛇,并且默认食物未出现3在CView类上运用MFC提供的Windows消息中WM_TIMER消息,运用OnTimer()函数让系统提供一个时钟节拍,更新游戏4具体游戏实现,包括蛇撞到自己和围墙都将使游戏结束,判断吃豆等,其中还包括根据蛇的长度来进行游戏难度的改变。5具体键盘游戏操作运用到Windows消息响应中的WM_KEYDOWN,用OnKeyDown()来响应玩家的实际操作第三章 软件实现3.1变量函数及资源的声明根据程序的结构,将贪吃蛇需要实现的功能细化成为相应的函数。3.1.1函数声明void CYuShuoView:OnDraw(CDC* pDC) /在OnDraw函数中绘制游戏背景、游戏文字以及控制蛇的样式颜色。IMPLEMENT_DYNCREATE(CSANKEView, CView)BEGIN_MESSAGE_MAP(CSANKEView, CView)/AFX_MSG_MAP(CSANKEView)ON_WM_KEYDOWN()ON_WM_RBUTTONDOWN()ON_WM_TIMER()ON_WM_CANCELMODE()ON_COMMAND(ID_START, OnStart)ON_COMMAND(ID_PAUSE, OnPause)ON_COMMAND(ID_CONTINUE, OnContinue)ON_COMMAND(ID_EXIT, OnExit)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()3.1.2变量声明CArray m_ysBody; /定义点数组作为蛇的身体CPoint m_ysFood; /食物出现的点3.1.3资源1、对话框2、位图IDB_YS_BITMAP /游戏背景图3、菜单/工具栏4、 头文件mmsystem.h /播放音乐的相应文件#include stdafx.h#include SANKE.h#include SANKEDoc.h#include SANKEView.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif 3.2主要功能的实现3.2.1游戏界面贪吃蛇游戏的游戏界面包括背景图片、蛇身体的绘制、蛇移动范围的绘制等等。其中贪吃蛇的身体用什么方法绘制,才可以使得其在游戏过程中可以实现“吃”的功能是很重要的。因此在游戏界面的初始绘制时就必须考虑到游戏时可能遇到的问题。3.2.2初始化食物随机出现应采用rand()函数来实现,而食物与蛇头无偏差相接则利用坐标来解决。3.2.3开始游戏开始游戏后的重点是如何用键盘来控制蛇的移动并传递到OnTimer(UINT nIDEvent)函数中去以及判断蛇是否死亡3.2.4游戏设置这里的游戏设置主要是指游戏音效音乐的播放控制。同时,我们也为这款游戏定制了一份游戏规则 游戏规则如下:l 点击游戏-开始菜单游戏开始;l 通过方向键控制蛇的运动方向,吃掉随机出现的豆子,若不小心碰到墙壁或者与自身相交,则该轮游戏结束;l 点击 游戏-暂停按钮,暂停游戏;点击游戏-游戏继续,继续游戏;l 点击游戏-结束菜单退出游戏;l 单击帮助-查看游戏帮助。第四章 解释4.1个人所分任务详解我在这次实验中的工作:贪吃蛇游戏功能设计。对ontime()添加代码,包括按键设计、撞界判断、蛇身相撞判断、行走方向判断、判断吃豆的条件(撞到就吃)、如果食物被吃了就生成。1.这段代码是给键盘上的A、S、D、W以及方向键赋予蛇行进方向的命令,控制蛇的走向(“12345678”本别代表“上下左右” x+,y+进行移动,然后用选定画刷画出一个新节点的矩形作为头结点):void CSANKEView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call defaultswitch(nChar)case VK_UP:if(Snake0.direct!=2)Snake0.direct=1;break; case VK_DOWN:if(Snake0.direct!=1)Snake0.direct=2;break;case VK_LEFT:if(Snake0.direct!=4)Snake0.direct=3;break; case VK_RIGHT:if(Snake0.direct!=3)Snake0.direct=4;break;case W:if(Snake0.direct!=6)Snake0.direct=5;break; case S:if(Snake0.direct!=5)Snake0.direct=6;break; case A:if(Snake0.direct!=8)Snake0.direct=7;break; case D:if(Snake0.direct!=7)Snake0.direct=8;break;CView:OnKeyDown(nChar, nRepCnt, nFlags);CView:OnKeyDown(nChar, nRepCnt, nFlags);2.这段代码是给蛇制定一个速度变化,当蛇“吃”到一定长度时,速度会加快void CSANKEView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC(); CString soure; if(Snake0.len=1)SetTimer(1,390,NULL); if(Snake0.len=2)SetTimer(1,370,NULL); if(Snake0.len=3)SetTimer(1,320,NULL); if(Snake0.len=8)SetTimer(1,200,NULL); if(Snake0.len=12)SetTimer(1,100,NULL); /soure.Format(得分:%d分!,(Snake0.len-1)*10); soure.Format(得分:%d分!,(Snake0.len-3)*10); 3.这段代码是对蛇“撞界”的判断,给蛇规定一个行动的区域;还有规定了蛇不能撞到自己的“身体”,否则游戏结束并显示得分:if(Snake0.x*20=37|Snake0.y*20=580|Snake0.y*20=580) /撞界判断 KillTimer(1); AfxMessageBox(soure); / s=0; /蛇身相撞判断 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); / s=0; /*由于判断蛇自己是否咬到了自己,根据蛇长sn,进行sn次for sn-1次循环并且和Snake0.x进行比较(之所以进行sn-1次那肯定是不包括蛇头而且蛇的长度也必须大于3才会发生自己咬自己的情况)KillTimer(1);是停止计时器;和之前的SetTime()对应而已AfxMessageBox(soure)就是输出一个原样输出内容*/相关运行图如下:自己咬到自己,游戏结束。头撞墙,游戏结束。 pDC-SelectStockObject(WHITE_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次的循环,这里是不包括蛇头的进行的平移,用数组赋值的方法,把前一节点保存在后一个结点,然后头结点向前移动。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+; if(Snake0.direct=5) Snake0.y-; Snake0.x+; if(Snake0.direct=6) Snake0.y+; Snake0.x-; if(Snake0.direct=7) Snake0.x-; Snake0.y-; if(Snake0.direct=8) Snake0.x+; Snake0.y+; pDC-SelectStockObject(BLACK_PEN);相关运行图如下:向右 向左向下 向上右斜向上或左斜向下走。左斜向上或右斜向下走。第五章 结果与讨论5.1程序运行程序开始运行后会进入游戏界面,但是不会立即进行游戏,单击菜单的“开始”才会开始游戏。在游戏过程中,按下Space键就会暂停游戏,再按下Z键则会继续游戏。5.1.1部分函数与代码在程序中定义一个蛇的类,结构如下:struct Snake int x,y; int len; int direct;Snake50;struct Food int x; int y; int isfood;Food;在数据结构上,用数组存储蛇以及蛇的运动区域。在数组中,每个元素有四个云感动方向,分别为RIGHT,LEFT,UP,DOWN.在没有蛇身的区域
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年北京租赁合同范本
- 2025跨国购销合同范本
- 2025短期雇佣安保人员合同范本模板
- 2025国际航空货物运输合同
- 医院药房抗生素考试试题及答案
- 厨师一级考试题目及答案
- 灵璧期中考试试卷及答案
- 护理学专业考试模拟题及答案
- 太原市二模考试题及答案
- 人类懒惰模拟考试题及答案
- 二手车评估协议书
- 47届世赛江苏省选拔赛轨道车辆技术项目技术工作文件v1.1
- 中小学生文明上网主题班会课件
- 十四年抗战史
- 餐饮业管理规范标准
- 2024年成都隆科城乡发展集团有限公司招聘笔试冲刺题(带答案解析)
- 中华人民共和国医师法解读培训课件
- DL-T 5148-2021水工建筑物水泥灌浆施工技术条件-PDF解密
- 电工技能训练(第6版)中职技工电工类专业全套教学课件
- 泛光夜景照明亮化工程项目实施的重点难点和解决方案
- 输血科三基培训课件
评论
0/150
提交评论