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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C++贪吃蛇课程设计.docx

1、C+贪吃蛇课程设计青岛理工大学琴岛学院设 计 报 告课题名称: 基于C+贪吃蛇的设计与实现学 院: 计算机工程系专业班级: 计算机科学与技术(专升本) 13级1班 学 号: 20130371001 学 生: 邵坤指导教师: 张秀国青岛理工大学琴岛学院教务处2013年 12 月 27 日学 生邵坤指导教师张秀国课题名称基于C+贪吃蛇的设计与实现设计时间2013.12.232013.12.27设计地点8教209室设计目的动手练习制作MFC小应用。锻炼自己动手制作、查询资料、独立思考的能力指导教师评语系部教研室意 见一、需求分析 贪吃蛇游戏作为一款经典小游戏,版本多样,娱乐性也很高,适合在闲暇时放松

2、心神。并且可在多个平台上实现,程序简单易懂,非常适合初学者学习制作。1、语言的使用现在的贪吃蛇游戏一般是用C语言实现的,用C语言编写贪吃蛇游戏比较简单易懂,当然也可以用其他语言来实现,比如Java、C+、C#等,这里我们用C+来实现。2、用C+的优势C+在一定程度上可以和C语言很好的结合,甚至大多数C语言程序是在C+的集成开发环境中完成的。C+相对众多的面向对象的语言,具有相当高的性能。C+引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。很多优秀的程序框架包括Boost、Qt、MFC、OWL、WTL就是使用的C+。 人们一般认为,使用Java或C#的开发成本比C+低。但是,

3、如果充分分析C+和这些语言的差别,会发现这句话的成立是有条件的。这个条件就是:软件规模和复杂度都比较小。如果不超过3万行有效代码(不包括生成器产生的代码),这句话基本上还能成立。否则,随着代码量和复杂度的增加,C+的优势将会越来越明显。造成这种差别的就是C+的软件工程性。相对于其他的语言,C+具有它自己的优势,主要体现在以下几个方面:(1)、 C+实现了面向对象程序设计。在高级语言当中,处理运行速度是最快的,大部分的游戏软件,系统都是由C+来编写的。 (2)、 C+语言非常灵活,功能非常强大。如果说C语言的优点是指针,那么C+的优点就是性能和类层次结构的设计。 (3)、C+非常严谨、精确和数理

4、化,标准定义很细致。 (4)、C+语言的语法思路层次分明、相呼应;语法结构是显式的、明确的。当然,这只是C+的一部分优势,在运用过程中,我们会逐渐发现C+语言之美。3、实现的功能运行程序。点击“游戏-开始”,出现围墙界面,一条蛇在密闭的围墙内,在围墙内随机出现一食物,游戏开始。游戏开始后,通过四个方向键控制蛇的运动方向,吃掉随机出现的豆子,若不小心碰到墙壁或者与自身相交,则该轮游戏结束。游戏结束后,会弹出游戏得分。点击“游戏-暂停”,暂停游戏。点击“游戏-继续”,继续游戏。游戏会根据蛇身的长度自动调节难易程度。点击“游戏-退出”,退出游戏。单击帮助-游戏规则查看游戏规则。4、主要的思想1 定义

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

6、 游戏界面 图1二、概要设计1、首先,用一个结构体数组来标记蛇的X位置和Y位置,还有每一节的方向。用一变量标识蛇的长度。2、在蛇非转弯的移动时用定时器来自动移动,不管蛇是哪种形状,都只需在每次移动时先将各节向后移动(蛇尾舍弃,新的蛇尾由蛇尾的上一节代替):如蛇本身为snake0到snake3,就是将snake0到snake2一起移动到snake1到snake3: 将 snake2的XY坐标赋值snake3的XY坐标 ,snake1的XY坐标 赋值给snake2的XY坐标 ,snake0的XY坐标 赋值给snake1的XY坐标 。再判断蛇头的方向,然后将蛇头顺着这个方向向前移动一格就是蛇头sna

7、ke0的XY坐标 。而蛇除蛇头外各节的方向由函数SetDirection()来确定(明显此种情况,蛇头的方向不变),SetDirection()的思想是根据蛇的每一节的前一节的相对位置来确定本节的方向。(其实这个函数是多余的,真正用到的只有蛇头的方向)。3、蛇在转弯时,也是各节一次向后移,蛇头的位置顺着转弯的方向移动,方向由转弯方向确定。4、蛇在吃到食物时,长度加一,蛇头的位置变成食物的位置,方向不变。蛇的本身每节的XY位置都向后移。如蛇本身为snake0到snake3, 就是将snake0到snake3一起移动到snake1到snake4。5、具体键盘游戏操作运用到Windows消息响应中的

8、WM_KEYDOWN,用OnKeyDown()来响应玩家的实际操作。6、每次蛇在转弯时只能有一种方向按键能响应,即要么左右转,要么上下转。蛇头方向向左或向右时,只能上下转;蛇头方向向上或向下时,只能左右转。7、食物的位置由rand函数随机产生。游戏运行界面如图2所示:图2 游戏界面8、游戏框架如下: 图3 游戏框架3、主要类及成员函数、数据成员的说明如表1所示表1类的名称 成员名称 功能Snake x蛇的横坐标y蛇的纵坐标len蛇的长度direct指引蛇的方向Foodx食物的横坐标y食物的纵坐标sfood食物个数CSnakeViewOnStart()控制游戏开始OnPause()控制游戏暂停O

9、nContinue()控制游戏继续OnExit()控制游戏退出OnKeyDown()接收用户键入的信息,然后用switch进行选择判断OnRButtonDown()用鼠标右键屏幕,就会马上显示当前位置的坐标信息OnRButtonDown()该函数画一个矩形,用当前的画笔画矩形轮廓,用当前画刷进行填充oninit()该函数画一个矩形,用当前的画笔画矩形轮廓,用当前画刷进行填充OnTime()改变蛇的移动速度,判断蛇是否撞墙,食物的随机分配,吃食物以后长度的增加,蛇的移动方向的改变OnDraw(CDC* pDC)用画刷画一个背景,并且包含当前可见区域的最小矩形的大小,使用当前选入指定设备环境中的刷

10、子绘制给定的矩形区域三、详细设计1、添加消息处理函数在已有工程下的ClassView中右键Cview类添加以下Windows信息WM_RBUTTONDOWNWM_RBUTTONDOWNWM_TIMER再右键CView类选择 “ADD Virtual Funciton”选OnInitialUpdate()OnInitialUpdate()的功能如下: 视图窗口完全建立后第一个被框架调用的函数。框架在第一次调用OnDraw前会调用OnInitialUpdate,因此OnInitialUpdate是设置滚动视图的逻辑尺寸和映射模式的最合适的地方。 时间上,两者先后顺序不同,构造函数生成本类的对象,但

11、没有产生窗口,OnCreate后窗口产生,然后才是视图的OnInitialUpDate,一般在这里对视图的显示做初始化。简单点,就是ONCREATE只是产生VIEW的基本结构和变量而在OnInitialUpDate()中,主要初始化视图中控件等。 所以我们要用这个函数来进行贪吃蛇的初始化工作。 再者还要添加一个成员函数oninit()进行贪吃蛇外观的初始化。2、控件的设计再者是设计游戏的一些控件来控制“游戏开始” “游戏结束” 和“游戏暂停”。 我们可以点击“工作空间”的“ResourceView”进行控件的具体设计,这里我们在Menu文件夹中把“IDR_MAINFRAME”中默认的控件全部删

12、除,右键其中的标题栏,点击属性,会得到一个菜单栏标题,我们分别建立1个菜单栏标题。这里我们分别建“游戏”。 图4 添加的控件点击并且在已有控件中的列表中点击属性,进行“菜单项目属性”的设置。我们本别建立的属性“标明”与对应的ID有游戏开始 IDM_START游戏暂停 IDM_PAUSE游戏继续 IDM_CONTINUE游戏退出 IDM_EXIT成功设置ID之后 我们分别右键各项属性进行消息响应处理函数的生成具体方法操作例子如下1右键“游戏开始”2 点击“类向导建立”3 在Message Maps页面,在要进行消息响应的控件ID列表Object IDs中上选择对应的ID, 这里我们选择IDM_S

13、TART,具体实现的环境是CView类,所以我们必须把“Class name”的默认“CMainFrame”改为“CView类”,并且在“Messages”类型设置中,用“COMMAND”设置为其为命令消息。其余各项也按照同理进行设置。3、具体实现游戏Step 1首先我们在文件开头处分别定义 蛇 和食物 的全局变量static struct Snake int x,y; int len; int direct;Snake1000;static struct Food int x; int y; int isfood;Food;再者初始化贪吃蛇void CSnakeView:OnInitialU

14、pdate() CView:OnInitialUpdate(); Snake0.x=10; Snake0.y=10; Snake1.x=11; Snake1.y=10; Snake2.x=12; Snake2.y=10; Snake0.direct=3; Snake0.len=3; Food.isfood=1;初始化贪吃蛇起初有3个节点, 长度为3和起始坐标;食物默认为 1无0有。Step 2 对OnKeyDown()具体添加代码void CSnakeView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) switch(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; CView:OnKeyDown(nChar, nRepCnt,

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

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