



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、工业大学课程设计任务书2012 2013学年第2学期计算机与通信学院(系、部)软件工程专业1201班级课程名称:面向对象课程设计设计题目:贪吃蛇完成期限:自2013年6月24日至2013年6月29日共1周一、设计的主要技术参数贪吃蛇游戏实现的功能有:控制蛇前后左右移动、控制蛇斜走、暂停游戏、继续游戏、背景音乐的播放、记录成绩容二、设计任务及游戏操作界面的生成;插入游戏界面图片;蛇的移动控制、播放音乐、暂停/ 停止暂停、任结束游戏、游戏记录的生成;程序的调试与修改务三、设计工作量一周起止日期工作容进6 月 24 号游戏操作界面的生成、背景图片的插入度安排主要参考资料6 月 25 号 -26 号蛇
2、的移动控制、播放音乐、暂停/ 停止暂停6 月 27 号 -28 号结束游戏、游戏记录的生成6 月 29 号程序的调试与修改1谭浩强 .C+面向对象程序设计M. :清华大学, 2006.2.海林,杜忠友,玉波. Visual C+简明教程 M. :电子工业, 2007.3丁展,四维科技.Visual C+游戏开发技术与实例M : 人民邮电 ,2005 4领田精通MFC程序设计 M :人民邮电 .2000.指导教师(签字):年月日系(教研室)主任(签字):年月日面向对象程序设计课程设计设计说明书基于 windows 界面应用程序贪吃蛇起止日期:2013年6月24日至2013年6月28日学生汪 骁
3、将班级软件工程 1201学号成绩指导教师(签字)计算机与通信学院2013年6月28日目 录第一章 引言1.1关于题目 .41.1.1题目要求 .41.1.2选题背景 .41.2关于编译软件 .41.3关于兼容性 .4第二章概要设计2.1软件主要功能设计. 52.1.1程序结构. 52.1.2程序流程. 5第三章软件实现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 个人所分任务详解 .第五章结果与讨论 .
4、1 程序运行15部分函数与代码15 .2 实验总结. 16第一章引言1.1 关于题目题目要求利用 Microsoft Visual C+ 制作一个贪吃蛇的小游戏,要求:( 1)应用 MFC 单文档制作(2)能够记录游戏成绩(3)可暂停 /继续并在玩家不愿游戏时停止游戏(4)有背景音乐和音效选题背景贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我们,它的制作方法对于以前的我们而言都是很神秘的。 我们希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我们的编程能力不是很强,但是通过三人团队的合作,我们有信心
5、,在这次学习中我们将从实践和实际的项目中提高自己的编程能力。因此我们选定了这个题目。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
6、.1 软件主要功能设计程序结构根据分析, 贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、暂停游戏以及停止游戏,音乐音效的添加与控制,游戏帮助提示等等。具体的程序结构如下面的图所示 :游戏控制模块游戏游戏帮助开暂继退始停续出游游游游戏戏戏戏程序流程根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。贪吃蛇的容主要包括:游戏开始,随机出现食物;按下暂停按钮或Space 键可以实现暂停功能,按下 Z 键游戏继续开始;按下帮助键可获得游戏帮助说明;可播放背景音乐等等。下图卫程序流程图:Y将 food 添加到蛇身中并产生新的 food更新运动方向Return true本次贪吃蛇基本流程与大体思想
7、如果蛇的头部与 food 重合N出界N与自身相交N移动一格returnfalse1 定义蛇类和食物类,初始化贪吃蛇各项成员变量,包括图像的出现在屏幕的初始位置,长度,以及蛇的行走方向。食物类的定义包括出现的初始位置,以及食物是否被吃掉的判断。2 用数组初始化长度为 3 的贪吃蛇,并且默认食物未出现3 在 CView 类上运用 MFC提供的 Windows消息中 WM_TIMER消息,运用OnTimer() 函数让系统提供一个时钟节拍,更新游戏4 具体游戏实现,包括蛇撞到自己和围墙都将使游戏结束,判断吃豆等,其中还包括根据蛇的长度来进行游戏难度的改变。5 具体键盘游戏操作运用到 Windows消
8、息响应中的 WM_KEYDOWN,用OnKeyDown()来响应玩家的实际操作第三章软件实现3.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_T
9、IMER()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_PR
10、INT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()变量声明CArray<CPoint,CPoint> m_ysBody;/ 定义点数组作为蛇的身体CPoint m_ysFood;/ 食物出现的点资源1、对话框2、位图IDB_YS_BITMAP/ 游戏背景图3、菜单/工具栏4、 头文件mmsystem.h#include "stdafx.h"#include "SANKE.h"#include "SANKEDoc.h"#include "SANKEView
11、.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ 播放音乐的相应文件3.2 主要功能的实现游戏界面贪吃蛇游戏的游戏界面包括背景图片、蛇身体的绘制、 蛇移动围的绘制等等。其中贪吃蛇的身体用什么方法绘制,才可以使得其在游戏过程中可以实现“吃”的功能是很重要的。因此在游戏界面的初始绘制时就必须考虑到游戏时可能遇到的问题。初始化食物随机出现应采用rand() 函数来实现,而食物与蛇头无偏差相接则利用坐标来解决。开始游戏开始游戏后的重点是如何用键盘来控制蛇的移动
12、并传递到OnTimer(UINTnIDEvent)函数中去以及判断蛇是否死亡游戏设置这里的游戏设置主要是指游戏音效音乐的播放控制。同时,我们也为这款游戏定制了一份游戏规则游戏规则如下:点击游戏 ->开始菜单游戏开始;通过方向键控制蛇的运动方向,吃掉随机出现的豆子,若不小心碰到墙壁或者与自身相交,则该轮游戏结束;点击 游戏 ->暂停按钮,暂停游戏;点击游戏->游戏继续,继续游戏;点击游戏 ->结束菜单退出游戏;单击帮助 ->查看游戏帮助。第四章解释4.1 个人所分任务详解我在这次实验中的工作:贪吃蛇游戏功能设计。对ontime()添加代码,包括按键设计、撞界判断、蛇
13、身相撞判断、行走方向判断、判断吃豆的条件(撞到就吃)、如果食物被吃了就生成。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 default switch(nChar)case VK_UP:if(Snake
14、0.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)
15、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)/ TOD
16、O: Add your message handler code here and/or call default CDC *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("得分 :%
17、d 分!",(Snake0.len-1)*10);soure.Format("得分 :%d 分!",(Snake0.len-3)*10);3.这段代码是对蛇“撞界”的判断,给蛇规定一个行动的区域;还有规定了蛇不能撞到自己的“身体” ,否则游戏结束并显示得分:if(Snake0.x*20<=37|Snake0.y*20<=37|Snake0.x*20>=580|Snake0.y*20>=580) /撞界判断KillTimer(1);AfxMessageBox(soure);/ s=0;/蛇身相撞判断 if(Snake0.len>3)fo
18、r(int sn=Snake0.len-1;sn>0;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(so
19、ure) 就是输出一个原样输出容*/相关运行图如下:自己咬到自己 , 游戏结束 。头撞墙,游戏结束。pDC->SelectStockObject(WHITE_PEN);pDC->Rectangle(SnakeSnake0.len-1.x*20,SnakeSnake0.len-1.y*20,(SnakeSn ake0.len-1.x+1)*20,(SnakeSnake0.len-1.y+1)*20);for(int i=Snake0.len-1;i>0;i-)Snakei.x=Snakei-1.x;Snakei.y=Snakei-1.y;进行次数为 " 长度 -1&q
20、uot; 次的循环,这里是不包括蛇头的进行的平移, 用数组赋值的方法,把前一节点保存在后一个结点,然后头结点向前移动。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.di
21、rect=7)Snake0.x-;Snake0.y-;if(Snake0.direct=8)Snake0.x+;Snake0.y+;pDC->SelectStockObject(BLACK_PEN);相关运行图如下:向右向左向下向上右斜向上或左斜向下走。左斜向上或右斜向下走。第五章结果与讨论5.1 程序运行程序开始运行后会进入游戏界面,但是不会立即进行游戏,单击菜单的“开始”才会开始游戏。在游戏过程中,按下Space键就会暂停游戏,再按下Z 键则会继续游戏。部分函数与代码在程序中定义一个蛇的类,结构如下:struct Snakeint x,y;int len;int direct;Snake50;struct Foodint 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年品牌策划专业考试题及答案
- 吉林省辽源市龙山区2026届数学四年级第一学期期末学业质量监测试题含解析
- 景宁畲族自治县2025-2026学年数学六年级第一学期期末检测试题含解析
- 2025至2030中国巨型棉球行业产业运行态势及投资规划深度研究报告
- 车管所单位实习报告范文
- 大学生环保局实习报告怎么写
- 2025版航空航天设备安装调试及质量控制合同
- 二零二五年木地板施工环保技术与节能减排合同
- 绿色数据中心冷却方式研究报告
- 2023年上海市中考化学试卷真题(含答案与解析)
- 火电厂运行管理
- 销售人员人才画像
- 泵站安全鉴定规程(SL 316-2015)
- 水稻病虫害统防统治 投标方案(完整技术标)
- 电梯维保重点难点分析
- 《英语大字典》word版
- 中国医疗卫生体制改革培训课件
- HY/T 150-2013海水中有机碳的测定非色散红外吸收法
- GA/T 486-2015城市道路单向交通组织原则
评论
0/150
提交评论