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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(数据结构面向对象课程设计MFC贪吃蛇.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构面向对象课程设计MFC贪吃蛇.docx

1、数据结构面向对象课程设计MFC贪吃蛇湖南工业大学课程设计任务书2012 2013 学年第 2 学期 计算机与通信 学院(系、部) 软件工程 专业 1201 班级课程名称: 面向对象课程设计 设计题目: 贪吃蛇 完成期限:自 2013 年 6 月 24 日至 2013 年 6 月 29 日共 1 周内容及任务一、设计的主要技术参数 贪吃蛇游戏实现的功能有:控制蛇前后左右移动、控制蛇斜走、暂停游戏、继续游戏、背景音乐的播放、记录成绩二、设计任务游戏操作界面的生成;插入游戏界面图片;蛇的移动控制、播放音乐、暂停/停止暂停、结束游戏、游戏记录的生成;程序的调试与修改三、设计工作量一周进度安排起止日期工

2、作内容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.指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日 面向对象程序设计课程设计设计说明书基于

3、windows界面应用程序贪吃蛇起止日期: 2013 年 6 月 24 日 至 2013 年 6 月 28 日学生姓名汪骁将班级软件工程1201学号12408300126成绩指导教师(签字)计算机与通信学院2013 年 6 月 28 日第四章 解释第一章 引言1.1关于题目1.1.1题目要求利用Microsoft Visual C+制作一个贪吃蛇的小游戏,要求:(1)应用MFC单文档制作(2)能够记录游戏成绩(3)可暂停/继续并在玩家不愿游戏时停止游戏(4)有背景音乐和音效1.1.2选题背景贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏

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

5、的编程人员使用VisualC+6.0进行应用系统的开发。1.3关于兼容性本程序经过调试,可以在XP系统下编译运行,也可以在Vista下运行,界面稍有不同,但不影响运行结果。第二章 概要设计2.1软件主要功能设计2.1.1程序结构根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、暂停游戏以及停止游戏,音乐音效的添加与控制,游戏帮助提示等等。具体的程序结构如下面的图所示:2.1.2程序流程根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。贪吃蛇的内容主要包括: 游戏开始,随机出现食物;按下暂停按钮或Space键可以实现暂停功能,按下Z键游戏继续开始;按下帮助键可获得游戏帮助说明;可

6、播放背景音乐等等。下图卫程序流程图: 本次贪吃蛇基本流程与大体思想1定义蛇类和食物类,初始化贪吃蛇各项成员变量,包括图像的出现在屏幕的初始位置,长度,以及蛇的行走方向。食物类的定义包括出现的初始位置,以及食物是否被吃掉的判断。2用数组初始化长度为3的贪吃蛇,并且默认食物未出现3在CView类上运用MFC提供的Windows消息中WM_TIMER消息,运用OnTimer()函数让系统提供一个时钟节拍,更新游戏4具体游戏实现,包括蛇撞到自己和围墙都将使游戏结束,判断吃豆等,其中还包括根据蛇的长度来进行游戏难度的改变。5具体键盘游戏操作运用到Windows消息响应中的WM_KEYDOWN,用OnKe

7、yDown()来响应玩家的实际操作第三章 软件实现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_C

8、ANCELMODE() 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 commands ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_

9、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

10、_FILEstatic char THIS_FILE = _FILE_;#endif 3.2主要功能的实现3.2.1游戏界面贪吃蛇游戏的游戏界面包括背景图片、蛇身体的绘制、蛇移动范围的绘制等等。其中贪吃蛇的身体用什么方法绘制,才可以使得其在游戏过程中可以实现“吃”的功能是很重要的。因此在游戏界面的初始绘制时就必须考虑到游戏时可能遇到的问题。3.2.2初始化食物随机出现应采用rand()函数来实现,而食物与蛇头无偏差相接则利用坐标来解决。3.2.3开始游戏开始游戏后的重点是如何用键盘来控制蛇的移动并传递到OnTimer(UINT nIDEvent)函数中去以及判断蛇是否死亡3.2.4游戏设置这里

11、的游戏设置主要是指游戏音效音乐的播放控制。同时,我们也为这款游戏定制了一份游戏规则 游戏规则如下:点击游戏-开始菜单游戏开始;通过方向键控制蛇的运动方向,吃掉随机出现的豆子,若不小心碰到墙壁或者与自身相交,则该轮游戏结束;点击 游戏-暂停按钮,暂停游戏;点击游戏-游戏继续,继续游戏;点击游戏-结束菜单退出游戏;单击帮助-查看游戏帮助。第四章 解释4.1个人所分任务详解我在这次实验中的工作:贪吃蛇游戏功能设计。对ontime()添加代码,包括按键设计、撞界判断、蛇身相撞判断、行走方向判断、判断吃豆的条件(撞到就吃)、如果食物被吃了就生成。1.这段代码是给键盘上的A、S、D、W以及方向键赋予蛇行进

12、方向的命令,控制蛇的走向(“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(Snake0.direct!=2)Snake0.direct=1;break; case VK_DOWN:if(Snake0.direct!=1)Sna

13、ke0.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.

14、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 default CDC *pDC=GetDC(); CString soure; if(Snake0.len=1

15、)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.这段代码是对蛇“撞界”的判断,给蛇规定一个行动的区域;还有规定了蛇不能撞到自己

16、的“身体”,否则游戏结束并显示得分: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

17、次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,(Snake

18、Snake0.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.dir

19、ect=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程序运行程序开始运行后会进入游戏界面,但是不会立即进行游戏

20、,单击菜单的“开始”才会开始游戏。在游戏过程中,按下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.在没有蛇身的区域,数组的元素值为0。在蛇身的每个节点,用一个数组元素存储当前蛇节点的运动方向。通过改变数组中元素的值来表示蛇身的移动

21、。在程序中运用定时器来保证蛇的持续移动。每个一定的时间间隔,蛇移动一格。在设计界面时。在Visual Studio 2008的环境下,建立基于对话框的工程,在工程下设计游戏界面,实现贪食蛇运行算法。在对话框中画出一个矩形,在大矩形中,用20x20的像素单位表示每一个蛇的节点。当数组节点的值不为0的时候,在大矩形中画出相应的蛇的节点矩形。并在蛇每移动一小格的时候,重绘整个窗口。在对蛇身进行绘画时。通过数组元素的值将蛇身在对话框的矩形中显示出来。在蛇身运动时,首先在蛇头位置蛇身增长一个节点,然后判断蛇头是否到达食物所在位置,若在食物所在位置,则蛇尾不减一,蛇身继续移动,若蛇头不再食物位置,则蛇尾减

22、一,蛇身继续移动。若蛇头越界或者蛇头与蛇身重叠,则游戏结束。5.2实验总结贪吃蛇是一款经典的单机游戏,曾承载着无数人的童年记忆,所以我对贪吃蛇也是带有自己感情和付出的。 在刚开始只是看了中国地质大学网站上对贪吃蛇的算法,后来有综合了网络上的一些资源就开始编码。在功能实现上我一直坚持简单实用,例如利用快捷键开始游戏,但后来发现这太过单点又美化了一下界面和对框架类的修改,基本上实现了幼年时期的贪吃蛇。当我玩着自己和同学做的游戏的时候有一种成就感,因为这期间有太多的曲折。 经过这近两周的课设我认识到自己的肤浅和知识量的不足,同时这几周也让我更快地获得了如何解决问题的能力和提高相应的知识。 同时很感谢我的老师和同学,他们给予我极大的技术和精神支持,让我一步步坚定的向前走。

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

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