




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
xxx 学院学院 面向对象程序设计面向对象程序设计(c+/vc+) 课程设计报告课程设计报告 题题 目目: :基于基于 vc+vc+贪食蛇游戏的设计与实现贪食蛇游戏的设计与实现 学学 号号: : 班班 级级: : 小组成员小组成员: : 指导教师指导教师: : 所属系部所属系部: : 2014 年 6 月 3 日 课程设计任务书课程设计任务书 课程名称面向对象程序设计(c+/vc+)时间 2014.6.3-2014.6.6 题 目基于 vc+的贪食蛇游戏的设计与实现 主要内容:本设计实现了一个简单的贪食蛇小游戏,该游戏不仅实现了简单 的游戏操作功能,还实现了灵活的运作功能,而且具有简洁大方的图文外 观。此设计按照软件工程的方法进行,系统具有良好的界面和必要的交互 信息,使操作人员能快捷简单地进行操作,给玩家一个简易有趣的游戏。 本系统开发平台为 windows xp,程序设计语言采用 c+,在程序设计中, 采用了结构化与面向对象两种解决问题的方法。 要求:(1)通过实际软件项目的分析、设计、编码、测试等工作,掌握用 软件工程的方法来开发和维护系统。 (2)按要求编写课程设计报告书,能正确编写分析、设计、编码、 测试等技术文档和用户使用手册。 (3)进行系统的联合调试,编写系统使用说明。 (4)完成系统的文档、设计说明工作 任务分配: 计科 132 班:xxx xxx 负责程序框架设计和服务端代码编写 计科 132 班:xxx 主要负责软件测试及调试 计科 132 班:xxx 主要负责撰写报告与汇报 i 摘要摘要 本设计实现了一个简单的贪食蛇小游戏,该游戏不仅实现了简单的游戏操作 功能,还实现了灵活的运作功能,而且具有简洁大方的图文外观。此设计按照 软件工程的方法进行,系统具有良好的界面和必要的交互信息,使操作人员能 快捷简单地进行操作,给玩家一个简易有趣的游戏。本系统开发平台为 windows xp,程序设计语言采用 c+,在程序设计中,采用了结构化与面向对 象两种解决问题的方法。 关键词:关键词:贪食蛇;mfc ii abstratcabstratc this design implements a simple bulimia small snake game, the game is not only realize the function of simple operation, and realize the function of flexible operation, and has a concise and easy by appearance. this design according to the method of software engineering, system has a good interface and the interaction of the necessary information, allow the operator to quick and easy to operate, easy to give players a fun game. this system development platform for windows xp, using c + + program design language, in programming, using the structured and object oriented method to solve the problem. keykey words:words: gluttony snake; mfc 目录目录 摘要摘要i abstratcabstratc ii 1 1 引言:引言:.1 1.1 课题背景介绍 1 1.2 mfc 简介.1 2 2 系统分析系统分析.2 2.1 可行性分析 2 2.2 系统需求分析 2 2.2.1 课题需求2 2.2.2 功能需求3 2.2.3 游戏环境需求3 2.2.4 游戏界面需求4 2.3 程序分析 6 2.3.1 游戏大体框架6 2.3.2 主要游戏函数6 2.3.3 游戏程序整体间调用关系图7 3 3 程序设计程序设计.8 3.1 游戏教程的知识点 8 3.2 游戏基本流程和大体思想 8 3.3 游戏程序模块实现函数说明 9 3.4 程序变量声明 15 4 4 系统实现系统实现23 4.1 坐标位置信息模块实现 .23 4.2 键盘方向键操作模块实现 .23 4.3 蛇身撞界与分数计算模块实现 .23 4.4 食物重新生成模块实现 .24 4.5 游戏测试 .25 5 5 总结总结26 参考文献参考文献27 附录附录28 1 1 1 引言引言 在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语 法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可 以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向 对象程序设计方法。 1.11.1 课题背景介绍课题背景介绍 贪食蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己所学的 知识加以应用,二是一直以来贪食蛇这个游戏就深深地吸引着我们,它的制作 方法对于以前的我们而言都是很神秘的。我们希望通过自己的所学知识把它剖 析开来,真真正正的了解它的本质和精髓。虽然我们的编程能力不是很强,但 是我们有信心,在这次学习中我们将从实践和实际的项目中提高自己的编程能 力。因此我们选了这个题目作为我们的课程实训。 1.21.2 mfcmfc 简介简介 mfc(microsoft foundation classes),是一个微软公司提供的类库 ( class libraries) 以 c+类的形式封装了 windows 的 api,它包含了窗 口等许多类的定义。各种类的集合构成了一个应运程序的框架结构,以减少应 用程序开发人员的工作量。其中包含的类包含大量 windows 句柄封装类和很多 windows 的内建控件和组件的封装类。mfc 6.0 版本封装了大约 200 个类, 其中的一些可以被用户直接使用。例如 cwnd 类封装了窗口的功能,包括打印 文本、绘制图形及跟踪鼠标指针的移动等; csplitterwnd 是从 cwnd 类派生出 来的,继承了基类或称父类 cwnd 类的所有特 性,但增加了自己的功能,实现 拆分窗口,使窗口至少可被拆分成两个窗口,用户可以移动两个窗口之间的边 框来改变窗口的大小;ctoolbar 类可以定义工具等。mfc 命名的惯例是类的名 字通常是由“c”打头;成员变量使用前缀“m_” ,接着使用一个字母来指明 数据类型,然后是变量的名称;所有的单词用大写字母开头。 2 2 2 系统分析系统分析 2.12.1 可行性分析可行性分析 贪食蛇游戏是一种简单的大众的游戏,自计算机实现以来,十分深受广大电脑 玩家的喜爱,做一个简单的贪食蛇游戏。贪食蛇的核心玩法是一条蛇在密闭的 围墙内,在围墙内随机出现一个食物,通过按键盘上的四个方向键控制蛇向上接 着又出现食物,等待被蛇吃掉,这时蛇身增长一节,同时获得 10 分。如果蛇在移 动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。并且可以在游戏 开始前自由选择游戏难度,游戏过程中可暂停游戏,并有积分系统,且积分每 满一定值,蛇的运行速度会逐步增加。 2.22.2 系统需求分析系统需求分析 .1 课题需求课题需求 接到课程设计任务后,我们对曾经非常感兴趣的几款经典小游戏作了分析并筛 选,然后发现使用 mfc 类库都可以完成这些游戏的编译,但是我们刚刚学习, 还不能完全掌握 mfc 类的使用和复杂的算法,但是我们相信通过一个简单的贪 吃蛇游戏可以让我们对 mfc 得到充分的锻炼。贪吃蛇游戏作为一款经典小游戏, 版本多样,娱乐性也很高,适合在闲暇时放松心神。并且可在多个平台上实现, 程序简单易懂,非常适合 mfc 初学者学习制作。 3 .2 功能需求功能需求 1.使用 mfc 编译的游戏,我们预计实现游戏的开始、暂停、继续、等级的提升、 难度的增加。 2.重要的 mfc 程序代码需求 1) cwnd:窗口,它是大多数“看得见的东西”的父类(windows 里几乎所有 看得见的东西都是一个窗口,大窗口里有许多小窗口) ,比如视图 cview、框架 窗口 cframewnd、工具条 ctoolbar、对话框 cdialog、按钮 cbutton,etc;一个 例外是菜单(cmenu)不是从窗口派生的。 2) cdocument 文档,负责内存数据与磁盘的交互。最重要的是 onopendocument(读入),onsavedocument(写盘),serialize(读写) 3) cview 视图,负责内存数据与用户的交互。包括数据的显示、用户操作的 响应(如菜单的选取、鼠标的响应) 。最重要的是 ondraw(重画窗口),通常用 cwnd:invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、 快捷键和其他用户消息。 4) cdialog 对话框 5) cpen 笔,画线 6) cbrush 刷子,填充 7) cbitmap 位图 8) crgn 区域,指定一块区域可以用于做特殊处理。 9) cstring 字符串。封装了 c 中的字符数组,非常实用。 10) cpoint 点,就是(x,y)对 11) crect 矩形,就是(left,top,right,bottom) .3 游戏环境需求游戏环境需求 游戏要求(包括原始数据、技术参数、设计要求、图纸量、工作量要求等) (1) 操作系统:windows nt windows xp windows7 (2) 应用软件:microsoft visual studio 2010 4 .4 游戏界面需求游戏界面需求 (1 1)游戏说明界面:)游戏说明界面: 图 2.1 游戏说明界面 (2 2)游戏开始界面:)游戏开始界面: 图 2.2 游戏开始界面 5 (3 3)游戏运行界面)游戏运行界面 图 2.3 游戏运行界面 (4 4)游戏结束界面)游戏结束界面 图 2.4 游戏结束界面 6 2.32.3 程序分析程序分析 .1 游戏大体框架如下图所示游戏大体框架如下图所示 图 2.5 游戏大体框架 .2 主要游戏函数主要游戏函数 void csnake2view:ondraw(cdc* pdc) void csnake2view:oninit(void) void csnake2view:onstart() void csnake2view:onpause() void csnake2view:oncontinue() void csnake2view:onexit() void csnake2view:onintroduce() void csnake2view:onrestart() void csnake2view:onkeydown(uint nchar, uint nrepcnt, uint nflags) void csnake2view:onrbuttondown(uint nflags, cpoint point) void csnake2view:ontimer(uint_ptr nidevent) 开始游戏 暂停游戏 退出游戏 继续游戏 游戏控制模块 重新开始 7 .3 游戏程序整体间调用关系图游戏程序整体间调用关系图 图 3.6 游戏程序关系图 initsnake() drawsnake() 设置自动移动定时器和增加食物定时器 游戏开始 csnakedlg:onpaint() drawfood () 桌面初始化 初始化蛇头和蛇移动方向 随机初始化一个食物到桌面 settimer() ctable:addfood() 蛇移动 蛇吃食? 蛇增长 继续? 蛇死亡? 桌面上随机生成食物 movesnake () addsnake() 退出程序 是 是 否 否 ongamestart() gameover() tb_state_sblock 8 3 3 程序设计程序设计 3.13.1 游戏教程的知识点游戏教程的知识点 1、 cview 类中的消息响应 2、 控件的消息响应 3、 基于 cview 类内的具体游戏实现 4、 数组 5、游戏图形的实现用 cdc 类实现。 3.23.2 游戏基本流程和大体思想游戏基本流程和大体思想 1、 定义蛇类和食物类,初始化贪吃蛇各项成员变量,包括图像的出现在屏幕 的初始位置,长度,以及蛇的行走方向。食物类的定义包括出现的初始位 置,以及食物是否被吃掉的判断。 2、 用数组初始化长度为 3 的贪吃蛇,并且默认食物未出现 3、 在 cview 类上运用 mfc 提供的 windows 消息中 wm_timer 消息,运用 ontimer()函数让系统提供一个时钟节拍,更新游戏 4、 具体游戏实现,包括蛇撞到自己和围墙都将使游戏结束,判断吃豆等,其 中还包括根据蛇的速度和长度来进行游戏难度的改变。 5、 具体键盘游戏操作运用到 windows 消息响应中的 wm_keydown,用 onkeydown()来响应玩家的实际操作。 9 3.33.3 游戏程序模块实现函数说明游戏程序模块实现函数说明 第一部分:第一部分: 本版游戏的具体实现是在 cviewl 类中实现,所以其他类不用添加任何代码。 由于此次贪吃蛇需要 mfc 的开发环境,所以打开 visual studio2010 新建 一个 mfc 单文档工程,取名 snake2。 然后单击菜单栏里的“项目” ,找到“类向导” ,单击打开,在类名中选择 snake2view 添加以下 windows 信息 1 wm_keydown 2 wm_rbuttondown 3 wm_timer 并且添加虚函数 oninitialupdate() oninitialupdate()的功能如下: 视图窗口完全建立后第一个被框架调用的函数。框架在第一次调用 ondraw 前会调用 oninitialupdate,因此 oninitialupdate 是设置滚动视图的逻辑尺 10 寸和映射模式的最合适的地方。 时间上,两者先后顺序不同,构造函数生成本类的对象,但没有产生窗口, oncreate 后窗口产生,然后才是视图的 oninitialupdate,一般在这里对视图 的显示做初始化。简单点,就是 oncreate 只是产生 view 的基本结构和变量而在 oninitialupdate()中,主要初始化视图中控件等。对各个变量进行初始化操作 所以我们要用这个函数来进行贪吃蛇的初始化工作。再者还要添加一个成 员函数 oninit()进行贪吃蛇外观的初始化。 图 3.1 添加消息 11 图 3.2 添加虚函数 再者是设计游戏的一些控件来控制“开始游戏” “结束游戏” 和“暂停 游戏” “退出游戏” “重新开始” “游戏介绍” 。 12 我们可以点击“资源视图”然后找到“menu”文件夹,选 “idr_mainframe”进行控件的具体设计,这里我们在 menu 文件夹中把 “idr_mainframe”中默认的控件全部删除 右键其中的标题栏,点击属性,会得到一个菜单栏标题,我们分别建立 1 个菜单栏标题。这里我们分别建“游戏操作” “游戏说明” 。 图 3.3 菜单栏标题 点击并且在已有控件中的列表中点击属性,进行“菜单项目属性”的设置。 我们本别建立的属性“标明”与对应的 id 有 a. 开始游戏 id_start b. 暂停游戏 id_pause c. 继续游戏 id_continue d. 退出游戏 id_exit 13 e. 重新开始 id_restart f. 游戏介绍 id_introduce 此处控件的设计是“可见即可得”的控件操作,成功设置 id 之后 1、 右键“游戏开始” 。 2、 点击“添加事件处理程序” 。 3、 在 message maps 页面,在要进行消息响应的控件 id 列表 object ids 中上 选择对应的 id, 这里我们选择 idm_start,具体实现的环境是 cview 类, 所以我们必须把“class name”的默认“cmainframe”改为“cview 类” , 并且在“messages”类型设置中,用“command”设置为其为命令消息。其 余各项也按照同理进行设置。 图 3.4 添加事件处理程序 14 图 3.5 添加事件处理程序向导 第二部分第二部分 具体实现游戏、 step 1 首先我们在文件“snake2view.cpp”开头处分别定义 蛇 和食物 的全局变量 struct snake /蛇的全局变量 int x,y; int len; int direct; 15 snake50; struct food /食物的全局变量 int x; int y; int isfood; food; 图 3.6 蛇与食物的全局变量 接着把那窗口往下拉,找到”void csnake2view:oninitialupdate()”,添加 如下代码 ” void csnake2view:oninitialupdate() cview:oninitialupdate(); snake0.x=10; snake0.y=10; snake1.x=11; 16 snake1.y=10; snake2.x=12; snake2.y=10; snake0.direct=3; snake0.len=3; food.isfood=1; / todo: add your specialized code here and/or call the base class 3.43.4 程序变量声明程序变量声明 代码说明一代码说明一: : 1、 初始化贪吃蛇起初有 3 个节点,长度为 3,起始坐标;食物默认为 1 无 0 有。 2、 step 2 找到类视图中的“csnake2view”单击右键找到“属性” ,然后再属 性栏里找到“消息”按钮,点击,然后在那里找到“wm_keydown”添加函 数,然后回到 snake2view.cpp,添加代码如下: void csnake2view:onkeydown(uint nchar, uint nrepcnt, uint nflags) 17 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, nflags); 3、 onkeydown 函数的第一个参数 uint nchar 是接收用户键入的信息,然后我 们用 switch 进行选择判断 代码说明二:代码说明二: 1、 snake0代表的是蛇头,我们对蛇头的方向 snake0.direct 进行判断。 case vk_up:if(snake0.direct!=2)snake0.direct=1;break; 意思就是当 snake0.direct 的方向此时并不等于“下”的时候,才能做出 “上”的操作动作,否则则忽略用户“向上”的操作按键效果 2、 step 3 用同样的方法对 onrbuttondown()具体添加代码如下: void csnake2view:onrbuttondown(uint nflags, cpoint point) 18 cstring str; str.format(_t(“%d,%d“),point.x,point.y); afxmessagebox(str); / todo: add your message handler code here and/or call default 这个函数功能是:用鼠标右键屏幕,就会马上显示当前位置的坐标信息。 3、 step 4 在同一窗口为“csnake2view:oninit”添加 void csnake2view:oninit(void) cdc *pdc=getdc(); cbrush drawbrush=(rgb(0,255,0); cbrush *drawbrush=pdc-selectobject( for(int i=0;irectangle(snakei.x*20,snakei.y*20,(snakei.x+1)*20,(snakei.y+ 1)*20); pdc-selectobject(drawbrush); 代码说明三代码说明三: : 1、 利用 windows 给我们提供的 cdc 类来进行画图,我们首先用一个指向 cdc 类的指针去接受与该窗口相关联的 dc 句柄,然后用定义画刷一个 drawbrush 对象,并且用 rgb(0,250,0)来给画刷初始化颜色。且用 electobject(函数把对象画刷选入到设备描述表中,用 for 循环依次把贪吃蛇的 3 个节点画出来。 void far rectangle(int left, int top, int right, int bottom);这个 19 函数的的功能根据 函数功能:该函数画一个矩形,用当前的画笔画矩形轮廓,用当前画刷进行填 充. 2、 step 5 仍在同一视图,分别找到 onstart,onpause,oncontinue,onexit,onrestart 函数添加以下代码 void csnake2view:onstart() settimer(1,3000,null); afxmessagebox(_t(“3秒后开始游戏!“); /开始游戏 void csnake2view:onpause() killtimer(1); afxmessagebox(_t(“暂停游戏.“); /暂停游戏 void csnake2view:oncontinue() settimer(1,10,null); /继续游戏 void csnake2view:onexit() afxmessagebox(_t(“退出游戏.“); exit(0); /退出游戏 void csnake2view:onrestart() csnake2view:oninitialupdate(); csnake2view:oninit(); csnake2view:onstart(); 20 /重新开始 3、 step 6 对 ondraw()的添加代码 ondraw()函数众所周知视图类中的输出.视图类的输出基本上都是在视图 类的 ondraw 函数中处理的,系统会准备好入参,然后调用 ondraw 函数,所以 我们只需找到它,然后添加代码 void csnake2view:ondraw(cdc* pdc) csnake2doc* pdoc = getdocument(); assert_valid(pdoc); if (!pdoc) return; cbrush backbrush(rgb(0,50,250); cbrush* poldbrush = pdc-selectobject( crect rect; pdc-getclipbox( pdc-patblt(rect.left, rect.top, rect.width(), rect.height(),patcopy); pdc-selectobject(poldbrush); pdc-rectangle(19,19,501,501); oninit(); 代码说明四:代码说明四: 1、 此处是用画刷画一个背景,并且画出 3 个矩形区域 2、 函数原型:int getclipbox(hdc hdc, lprect lprc); 3、 该函数得到一个能够完包含当前可见区域的最小矩形的大小。 4、 函数原型:int nyleft, int nwidth, int nheight, dword dwrop); 5、 该函数使用当前选入指定设备环境中的刷子绘制给定的矩形区域。 6、 step 7 一样是通过属性,在消息里找到“wm_timer”添加函数,然后返回 21 “snake2view.cpp”为该函数添加代码 void csnake2view:ontimer(uint_ptr nidevent) cdc *pdc=getdc(); cstring soure; if(snake0.len=3)settimer(1,600,null); if(snake0.len=6)settimer(1,400,null); if(snake0.len=9)settimer(1,300,null); if(snake0.len=11)settimer(1,200,null); if(snake0.len=14)settimer(1,100,null); soure.format(_t(“得分%d!“),(snake0.len-3)*10); if(snake0.x*20=480|snake0.y *20=480) killtimer(1); afxmessagebox(soure); if(snake0.len3) for(int sn=snake0.len-1;sn0;sn-) if(snake0.x*20=snakesn.x*20 afxmessagebox(soure); 22 / / 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; if(snake0.direct=1)snake0.y-; if(snake0.direct=2)snake0.y+; if(snake0.direct=3)snake0.x-; if(snake0.direct=4)snake0.x+; ? pdc-selectstockobject(black_pen); cbrush drawbrush=(rgb(255,0,0); cbrush *drawbrush=pdc-selectobject( pdc- rectangle(snake0.x*20,snake0.y*20,(snake0.x+1)*20,(snake0.y+ 1)*20); pdc-selectobject(drawbrush); if(snake0.x*20=food.x*20 food.isfood=1; 23 snakesnake0.len-1.x=snakesnake0.len-2.x; snakesnake0.len-1.y=snakesnake0.len-2.y; if(food.isfood=1) srand(unsigned)time(null); do for(int isfo=snake0.len-1;isfo=0;isfo-) if(snake0.x*20=snakeisfo.x*20 food.y=rand()%20; while(food.x*20430|food.y*20430); pdc-rectangle(food.x*20,food.y*20,(food.x+1)*20,(food.y+1)*20); food.isfood=0; cview:ontimer(nidevent); 代码说明五:代码说明五: 1、 切换到“资源视图” ,展开节点,找到“dialog”并在此节点上单击鼠标右 键,在弹出的快捷菜单中选“插入对话框” 。 2、 然后创建对话框的类,方法是打开类向导,单击“添加类”按钮,在弹出 的mfc类向导对话框中的“类名”文本框中输入“cintroducedialog” ,在 基类下拉列表中选择“cdialog”,在对话框下拉列表中输 “idintroduce”,单击完成按钮,对话框类创建完毕。 24 3、 接着在对话框里添加游戏的介绍,然后在“snake2view.cpp”中加入头文 件“#include”introducedialog.h” ”然后往下拉,找到”void csnake2view:onintroduce()“添加代码 void csnake2view:onintroduce() cintroducedialog introduce; introduce.domodal(); /游戏介绍 4 4 系统实现系统实现 4.14.1坐标位置信息模块实现坐标位置信息模块实现 void csnake2view:onrbuttondown(uint nflags, cpoint point) cstring str; str.format(_t(“%d,%d“),point.x,point.y); 25 afxmessagebox(str); / todo: add your message handler code here and/or call default 4.24.2键盘方向键操作模块实现键盘方向键操作模块实现 void csnake2view: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, nflags); 4.34.3蛇身撞界与分数计算模块实现蛇身撞界与分数计算模块实现 soure.format(_t(“得分%d!“),(snake0.len-3)*10); if(snake0. x*20=480|snake0.y*20=480) killtimer(1); afxmessagebox(soure); if(snake0.len3) for(int sn=snake0.len-1;sn0;sn-) if(snake0.x*20=snakesn.x*20 afxmessagebox(soure); 4.44.4食物重新生成模块实现食物重新生成模块实现 26 if(food.isfood=1) srand(unsigned)time(null); do for(int isfo=snake0.len-1;isfo=0;isfo-) if(snake0.x*20=snakeisfo.x*20 food.y=rand()%20; while(food.x*20430|food.y*20430); pdc-rectangle(food.x*20,food.y*20,(food.x+1)*20,(food.y+1)*20); food.isfood=0; 4.54.5游戏测试游戏测试 以下是部分游戏视图:以下是部分游戏视图: 27 图4.1游戏开始运行 图4.2游戏结束 5 5 总结总结 在开始着手编程之前,我以为编个小游戏很简单,但是当我深入思考后发现, 28 并不是自己想象的那么简单,虽然不是什么难度很大的算法,但是程序要考虑 的问题很多,相当复杂,需要考虑的很全面,不然就打不到预期的效果。深入 思考碰壁后,我在 vc+课本上找到了灵感,把课本上的小程序仔细研究调试之 后,终于弄清楚了其中的奥妙。通过此次贪吃蛇游戏的设计,确实学到了很多 实战的经验。以前只是纸上谈兵,真正下起手来才发现自己其实对 c+语言还 没有掌握到编程的程度。 开始编译之后,自己通过与同学交流,查阅资料,独立的编写出了游戏代 码,并进一步优化,加强可操作性,从中得到了很多课上没有的知识,体会到 了编程的快乐,也许,编程就是,由简单到复杂,由复杂到简单。刚开始时, 一直失败,好多错误,其实就是些基本的错误,比如变量的定义,整 型变量的范围,结构体的运用,指针的定义,函数的调用等等,通过这些 问题才发现自 己学习的知识是那么不牢固。再有就是些技术上的难题, 比如画图函数,初次接触,需要去查阅运用。这次实习不仅仅锻炼了我的 vc+编程能力,同时让我对可视化编程有了更深入 了解,对使用 vc+来开发游戏 程序有了初步体会!在此对辅导老师表示真挚感谢! 参考文献参考文献 1木林森、高峰霞、罗丽琼、奚红宇. visual c+6.0 使用与开发.清华大 29 学出版社.1998 2孙鑫 余安萍 编著. vc+深入详解.电子工业出版社出版.2012 3谭浩强 主编 怂金珂 高丽华 张迎新 编著.vc+程序设计基础教程.清 华大学出版社出版.2010 4郑阿奇.visual c+ 实用教程(第三版).电子工业出版社.2011 5张晓民.vc+2010 应用开发技术.北京:机械工业出版社.2013 6陈泊志.visual c+程序设计. 北京:中国铁道出版社.2009 7明日科技.visual c+从入门到精通(第 3 版).北京:清华大学出版社. 2012 8杜青.vc+.net(2008)课程设计经典案例. 北京:清华大学出版社. 2012 9jeff prosise(美).programming windows with mfc second edition.beijing. tsinghua university press.2001 10anders hejlsberg scott wiltamuth peter golde. the c# programming languagem. posts int len; int direct; snake50; struct food int x; int y; int isfood; food; / csnake2view implement_dyncreate(csnake2view, cview) begin_message_map(csnake2view, cview) on_command(id_file_print, void csnake2view:ondraw(cdc* pdc) csnake2doc* pdoc = getdocument(); assert_valid(pdoc); if (!pdoc) return; cbrush backbrush(rgb(0,50,250);/外框的颜色 cbrush* poldbrush = pdc-selectobject( crect rect; pdc-getclipbox( pdc-patblt(rect.left,rect.top, rect.width(), rect.height(),patcopy); pdc-selectobject(poldbrush); pdc-rectangle(19,19,501,501); oninit(); void csnake2view:onfileprintpreview() #ifndef shared_handlers afxprintpreview(this); 32 #endif bool csnake2view:onprepareprinting(cprintinfo* pinfo) return doprepareprinting(pinfo); void csnake2view:onbeginprinting(cdc* /*pdc*/, cprintinfo* /*pinfo*/) void csnake2view:onendprinting(cdc* /*pdc*/, cprintinfo* /*pinfo*/) void csnake2view:onrbuttonup(uint /* nflags */, cpoint point) clienttoscreen( oncontextmenu(this, point); void csnake2view:oncontextmenu(cwnd* /* pwnd */, cpoint point) #ifndef shared_handlers theapp.getcontextmenumanager()-showpopupmenu(idr_popup_edit, point.x, point.y, this, true); #endif #ifdef _debug void csnake2view:assertvalid() const cview:assertvalid(); void csnake2view:dump(cdumpcontext csnake2doc* csnake2view:getdocument() const assert(m_pdocument-iskindof(runtime_class(csnake2doc); return (csnake2doc*)m_pdocument; #endif /_debug afx_msg lresult csnake2view:onkeydown(wparam wparam, lparam lparam) return 0; 33 afx_msg lresult csnake2view:onrbuttondown(wparam wparam, lparam lparam) return 0; afx_msg lresult csnake2view:ontimer(wparam wparam, lparam lparam) return 0; void csnake2view:oninitialupdate() 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; void csnake2view:oninit(void) cdc *pdc=getdc(); cbrush drawbrush=(rgb(0,255,0);/这是蛇的初始颜色 cbrush *drawbrush=pdc-selectobject( for(int i=0;irectangle(snakei.x*20,snakei.y*20,(snakei.x+1)*20,(snakei.y+ 1)*20); 34 pdc-selectobject(drawbrush); void csnake2view:onstart() settimer(1,3000,null); afxmessagebox(_t(“3秒后开始游戏!“); void csnake2view:onpause() killtimer(1); afxmessagebox(_t(“暂停游戏.“); void csnake2view:oncontinue() settimer(1,10,null); void csnake2view:onexit() afxmessagebox(_t(“退出游戏.“); exit(0); void csnake2view:onkeydown(uint nchar, uint nrepcnt, uint nflags) 35 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, nflags); void csnake2view:onrbut
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业战略变革试题及答案
- 伪随机数生成考试考题及答案
- 抖音双十一活动策划方案
- 2025年云计算应用考试试题及答案
- 计算机技术员考试试题及答案概述
- 项目合同协议书
- 新疆出入境边防检查总站所属事业单位2025年度公开招聘笔试和合格分数线笔试历年典型考题及考点剖析附带答案详解
- 公共关系技巧的训练计划
- 行政法学的评估标准及试题及答案
- 网络问题识别与试题及答案
- 林下经济产业项目可行性研究报告
- 《深入了解中信建投》课件
- 2025年全民营养周科学实现吃动平衡健康中国营养先行课件
- 键盘采购合同协议
- 银泰证券公司融资融券业务方案设计
- 2025年高校教师岗前培训《高等教育学》考试模拟试卷及答案(共五套)
- 湖南省张家界市慈利县实验高中-奋进关键期跨越分水岭-高二下开学家长会【课件】
- 2025年湖北省建设投资集团有限公司招聘笔试参考题库含答案解析
- 2025年中国证券融资融券行业市场调查研究及投资前景预测报告
- 鱼跃前滚翻单元计划-2024-2025学年人教版体育与健康六年级上册
- DB32∕T 525-2010 学生公寓用纺织品
评论
0/150
提交评论