




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 / 36贪吃蛇实习报告课程设计报告贪吃蛇游戏设计专业 电子信息工程杜 运 福B电子 0620610620224曹 妍XX年 8月 30日 学生姓名 班学级 号 指导教师 完成日期贪吃蛇游戏设计摘要:本设计主要围绕贪吃蛇游戏展开。众所周知,贪吃蛇游戏一直以来是比较流行的。传统的贪吃蛇游戏功能比2 / 36较少,对蛇的控制仅限于向左转和向右转,而现在的贪吃蛇游戏已经发展的相当好;具有更多的功能和友好的界面。例如,最近流行的免费的 3D版的贪吃蛇游戏,界面相当的美观,有很强的立体效果,真实感更强,食物也为立体的且颜色绚丽。在 3D版贪吃蛇游戏里面,墙壁是真实的墙壁,障碍物比较多,如树、土丘等。此外,其功能更多更强,可以选择难度。不过,总而言之,3D 版与传统的贪吃蛇游戏有共性,即娱乐性与益智性。这些也是贪吃蛇游戏的优点。本人因水平有限,只能设计简单的贪吃蛇游戏。不过,在功能上,比传统贪吃蛇游戏更丰富。蛇可以反向运动,操作起来,显得更为灵活。界面的颜色选用绿色,不易使眼睛疲劳。关键词:3D 版;传统;灵活;2目 录1、 概述3 / 36、用 TC设计程序的方法、简要说明2、设计要求3、系统分析与模块设计、算法设计、数据结构、模块设计、模块枝干图4、程序流程图、图形驱动、开始画面4 / 36、显示食物、蛇向前移动、判蛇死、吃到食物后处理、判蛇反向移动、游戏结束、图形结束5、程序设计及关键源代码6、运行结果分析7、实习心得盐城工学院本科生课程设计报告5 / 36贪吃蛇游戏的设计1 .概 述、用 TC设计程序的方法首先应了解设计要求,然后按照功能设计模块,每个模块完成特定的功能,要使模块间的耦合性小,内聚性高;设计模块是相当重要的一个环节。模块的数量不宜太多,也不宜太少,要使每个模块都能比较简单的转换成流程图。模块设计完成后,就该给每个模块绘制流程图了。流程图要简单,容易理解,多用中文。不宜写过长的代码,增加理解难度。流程图与模块枝干图均可用绘图软件绘制,可适当加些背景色,用以区分。此外,流程图应容易转换成代码。绘制好了流程图,就要编写代码了。直接在 TC环境里输入代码,然后运行测试,检查错误,最终,将设计出可行的程序。、简要说明我设计的贪吃蛇游戏具有很多独特性。例如,墙壁不用实6 / 36体,而用中空的墙,颜色为绿色,显得更美观,且不易使眼疲劳。操作上,做了些简化,游戏开始时便可以自动运行,且速度较快,属中等难度。玩游戏的过程相当简单,只需按键盘上的上下左右方向键,便可改变蛇的行进方向。食物随机产生。贪吃蛇吃到一个食物后便得到 10分。得分显示在左上角。当蛇撞到墙壁或自己时,蛇死,游戏结束,输出得分。2.设计要求外观为矩形,食物随机产生,添加注释,统计得分、每吃到一个食物获得10分。蛇碰到自己或墙壁,游戏均结束。游戏结束时输出得分。画出模块枝干图与每个模块的程序流程图。修改某些代码,改变其外观及功能。游戏操作应尽量简单。界面美观,让人看了觉得舒服。7 / 363、系统分析与模块设计、算法设计玩游戏过程采用递归算法,由 WHILE(1)控制循环过程,可使游戏重复玩,在蛇死之前不停的玩。判断蛇死的算法是通过判断蛇有没有碰到自己及墙壁。使蛇向前移动采用递归算法,通过递归将蛇的每一节依次向前移动,横坐标与纵坐标依次向前赋值,从而达到使蛇前移的目的。蛇的前进方向通过 IF结构判断。1计算机实习报告姓名:王宁 班级: 2016211106 学号: 09210181 班内序号:31 指导老师:丘广晖 题目:贪吃蛇邮箱:3482664858 / 36贪吃蛇实验报告一功能说明总体功能说明概况: 一条蛇在密闭的围墙内,在围墙内出现食物,通过按键控制蛇向上下左右四个方向移动,蛇撞到食物,则食物被吃掉,蛇的身体增加一节。如果蛇在移动的过程中,撞到墙壁或身体的交叉,则游戏结束。特色:暂停功能:能随时通过按键来暂停游戏,再按一次则继续游戏。速度调节功能:当分数达到某个值后,对蛇的移动速度进行一定的提升。 毒果:增加另一种的毒果食物,蛇吃到该种食物后 gameover。 音效功能:吃掉食物、撞墙、在游戏结束时有不同的音效。用户界面主要是在围墙可以控制蛇吃到果实,同时分数就会升一分。9 / 36侧边栏标出了主要的功能键和等级,积分。 使用方法上下左右键控制蛇的运动,还有任意键控制游戏开始,空格键控制暂停,当游戏的得分超过一定数,蛇的速度就会加快,二程序设计说明 总体设计框架关键算法描述 算法一: 自定义函数:void movesnake(HANDLE hOutput,int snakex,int snakey,int len,WORD wColors); 移动蛇的函数,参数主要是蛇的坐标void fruit(HANDLE hOutput,int snakex,int snakey,int *x ,int *y,WORD wColors); 产生水果的函数,参数主要是蛇的坐标,和水果的坐标。使用了数组和指针void p_fruit(HANDLE hOutput,int snakex,int snakey,int *x ,int *y,WORD wColors); void put_fruit(int *x,int *y,int len,int snakex,int 10 / 36snakey); 放置果实的函数int level(HANDLE handle,int s,int p,char buf,WORD wColors); 等级判断函数,传递了一个存放分数的数组,速度,分数参数 算法二: 系统函数textout 专门用来输出一些字符,图案,主要参数就是字符的横纵坐标 _kbhit()检测是否有按键按下 _getch() 获取按键的值 Sleep 是程序休眠 n毫秒srand( (unsigned)time( NULL ); 随机数的种子函数,以时间做参数 rand产生伪随机数序列,后面一般会跟%n,代表取 0到 n的整数。程序设计的难点和关键点 蛇的图形的输出及蛇的移动方向。蛇头要用一个二维数组表示,身体要随蛇头一起11 / 36运动。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,而且转弯的时候会出现断裂。 检测蛇有无撞到食物、围墙或是自己的身体。当蛇开始移动之后,需要判断蛇头情况,然后根据位置是空白、食物、围墙还是蛇的身体来做出相应的反应。可以用一个二维数组来表示整个场景,对不同的地方赋予不同的值。 果实的随机产生。当食物被吃掉后,要重新随机产生。利用随机函数 rand产生随机数并将该随机数布置到符合场景大小的范围中来,而且不能和蛇身重叠了,所以要判断蛇身后在出现果实,以此作为食物位置的横纵坐标。 调试的方法问题一: 蛇头吃到果实的表示,起初简单认为只要果实和蛇头初始坐标重合,就代表吃到了果实,可是忽略了任何图形和文字在 c+中横坐标都占两格,也就是果实和蛇头都有两个横坐标,但蛇头从果实的边缘擦过,他也会吃了果实,但是坐标没有重合,下一个果实也就不会出现,然后12 / 36我就想到把它们的坐标都变成偶数就可以实现了重合。问题二:当撞到墙或者自己之后,蛇不会停下,而是继续往前走,然后我就用了一个停止函数 getch。问题三:果实出现的时候,不能和蛇身重合,所以需要从蛇头一节一节的判断之后,才可以出现果实。程序性能评价从运行效果来看,优点主要是蛇运动顺畅,屏幕初始化美观,不足是蛇的长度,屏幕的长宽度有限,只能玩几关就不可以玩了。从程序设计上来说,优点主要有简洁,明了,音乐的设置,速度升级,毒果的设置难度,各种文字移动和色彩的闪耀,不足是没有奖励机制,没有更多的功能。三心得体会刚开始时,一直失败,好多错误,其实就是些基本的错误,比如变量的定义,整型变量的范围,结构体的运用,指针13 / 36的定义,函数的调用等等,通过这些问题才发现自己学习的知识是那么不牢固。再有就是些更深难度的函数,自己以前没有学过,比如 textout,getch(),rand()等等,都需要自己学习老师给的范例,而且我发现要是编写一个稍大的程序,必须先画一个流程图,否则自己是不会知道怎么下手的,而且一个大程序是需要渐进编写的,边写边改的,不可能一步就能考虑周全。当时蛇出现并且能动时,我的心情激动无比,虽然里面也借鉴了老师给的例子一部分,可是毕竟是自己自学,编出来的,所以没有什么是不能做的,起初想想都觉得自己是不可能编出那么复杂的游戏,可是当自己真的编出来的时候,才会相信自己是有能力的。而且我们这次所学的函数,还有一些其它的小技巧,我想对以后的编程都会有帮助的。课程设计报告贪吃蛇游戏设计专业 信息工程系 王洪松 信息类 101班 10081051814 / 36学生姓名 班学时级 号 间课 程 设 计 任 务 书题 目 贪吃蛇 系 (部) 信息工程系 专 业 信息类 班 级 2016级 1班 学生姓名 王洪松 学 号 100810518月 日至 月 日 共 周指导教师(签字) 系 主 任(签字)年 月 日贪吃蛇游戏设计摘要:贪吃蛇是一款经典的休闲游戏,操作小蛇不停的朝食物的方向前进,直到吃掉了食物。每吃一个食物,小蛇15 / 36都会长长一节,随之而来的难度加大;当小蛇的头撞到墙时或者小蛇的头与身体相撞时,小蛇就会死亡;当然,小蛇的速度越快,每一个食物的分数就越高。开发环境概述Visual C+是微软公司的重要产品之一, 是一种功能强大行之有效的可视化编程工具。它提供了 MFC类库,使用户可以方便的开发自己想实现的功能。Visual C+的主要特点:自动化和宏功能。可以灵活地定制工具栏和菜单。可以直接运行和调试程序,还可以使用宏语言来自动操作调试器。 支持 Internet连接。一个新的便捷的项目系统可以允许一个工作区内包含多个不同的项目类型。 在工作区内可以包含多个并列的工程文件。16 / 36可以在对话框中使用 WizardBar将程序同可视化元素联系起来。Find in File命令支持两个独立的输出窗格,可以保存上一次搜索的结果。 这些新特性可以更好地利用 Visual C+开发工具进行 Windows应用程序开发。山东交通学院 2016 年度课程设计目 录1、概述、用 C类环境设计程序的方法1 、简要说明.,.1 2、设计要求.1 3、系统分析与模块设计2 、算法设17 / 36计 、数据结构 、模块设计 、模块枝干图 4、程序流程图、图形驱动.3 、开始画面.4 、显示食物.5 、蛇向前移动.6 、判蛇死.7、吃到食物后处理.8 、判蛇反向移动.9 、游戏结束.10 、图形结束.10 5、程序设计及源代码10-17 6、18 / 36运行结果分析18-20 7、实习心得21山东交通学院 2016 年度课程设计贪吃蛇游戏的设计1 .概 述、用 TC设计程序的方法首先应了解设计要求,然后按照功能设计模块,每个模块完成特定的功能,要使模块间的耦合性小,内聚性高;设计模块是相当重要的一个环节。模块的数量不宜太多,也不宜太少,要使每个模块都能比较简单的转换成流程图。模块设计完成后,就该给每个模块绘制流程图了。流程图要简单,容易理解,多用中文。不宜写过长的代码,增加理解难度。流程图与模块枝干图均可用绘图软件绘制,可适当加些背景色,用以区分。此外,流程图应容易转换成19 / 36代码。绘制好了流程图,就要编写代码了。直接在 TC环境里输入代码,然后运行测试,检查错误,最终,将设计出可行的程序。 、简要说明开始时以界面形式选择快速,中速,慢速,点击回车进入游戏。以快速为代表,为其设定一个变量,其延时为 30000,设定的延时为蛇每前进一步到下一步的相隔时间,并且设定的分数为 3分,这样,蛇就能以 30000单位的延时和 3分的游戏规则进行游戏。慢速和中速一次类推。在蛇不停的情况下,蛇的每后一节会到达蛇的前一节,依次类推,就是蛇不停的移动。 在靠近界面有围栏,画出围栏,并记录其坐标,蛇头一旦到达这个坐标,即判断蛇死;并且从蛇的第 4节开始判断蛇头的位置是否与其相等,如果是的话,也判断蛇死,退出游戏。通过对蛇头的坐标的加减蛇的宽度,可以用上下左右键来进行游戏,并且判断是否反方向移动。食物的坐标用随机数产生,但通过取余再加的方法使之处20 / 36于围栏的范围之内,并且在坐标的整十的倍数上,保证蛇头能与之相等。当蛇头的坐标等于食物的坐标时,即蛇吃到了食物,此时,增加的一节暂时没有显现出来,当下一步时在末尾加上一节即可。当蛇死之后,在屏幕上显示“GAME OVER”,表示游戏结束,显示分数后,退出。2.设计要求外观为矩形,食物随机产生,添加注释,统计得分、每吃到一个食物获得相应分数。蛇碰到自己或墙壁,游戏均结束。游戏结束时输出得分。画出模块枝干图与每个模块的程序流程图。修改某些代码,改变其外观及功能。游戏操作应尽量简单。 界面美观,让人看了觉得舒服。3、系统分析与模块设计21 / 36计算机实习报告姓名:班级:学号:小班序号:指导老师:题目:贪吃蛇(运行环境:2016)邮箱:visual,studio题目贪吃蛇实验报告22 / 36一功能说明总体功能说明主要完成什么功能,特色是什么。、我设计的的游戏首先在主界面选择游戏难度,接着进行游戏,在游戏过程中贪吃蛇不停地吃掉随机产生的食物,蛇身增长,直到蛇触碰到自己的身躯或边框,游戏结束特色:1.游戏过程伴有音乐,游戏开始会出现一段游戏剧情,增加趣味性2,游戏可以自选难度,且蛇身长每增加 5,设速度都会增快直到最快速度为止,且游戏过程中一直显示难度,3,游戏可以储存游戏分数,你可以查看最高分4,游戏过程中蛇的颜色,食物的颜色,分数的颜色,可以不停变换,增加视觉效果23 / 365,为降低难度,分数到达 12的倍数时,蛇身会变为 5用户界面关键游戏界面,并且要说明该界面完成的功能,不用把所有界面都显示出来游戏开始界面:选择游戏的难度游戏过程界面:进行游戏游戏结束界面:选择是否重新游戏使用方法(来自: 海达范文网:贪吃蛇实习报告) 比如:可以是什么键控制游戏?是否可以划分那难度?游戏是否可配置,界面风格是否可选等等用方向键控制蛇的移动,输入 1,2,3,选择难度,游戏中按除方向键其他键暂停,结束界面 y重新游戏,n 退出游戏二程序设计说明24 / 36总体设计框架下关键算法描述算法 1:算法输入参数和输出参数,算法功能,使用什么存储结构,在主程序中起什么作用,可以使用框图或伪代码表示。算法 2: 同上算法 1:蛇的移动使用数组静态存储蛇身于食物,如果不控制方向,则蛇处于一个循环中,每次蛇身后一个元素取代前一个位置,蛇头向前移动一,如有按键,则跳出内循环,根据按键寻则蛇的运动25 / 36伪代码: while 循环检测是否有按键,若有,进入相应循环休眠原来蛇位置变为空白蛇身数组后一个元素取代前一个元素位置根据按键改变蛇头位置显示蛇身若有按键,跳出内循环算法 2:水果的产生使用结构表示水果,当水果被蛇吃掉后,随机产生一个水果伪代码:if 蛇头位置与水果位置重合26 / 36While 循环随机产生水果的坐标If 坐标在框图内If 水果坐标不与蛇每一个坐标重合 跳出循环算法 3:判断蛇的死亡While a=0For 取遍蛇身每一个元素If 蛇头出了框图或蛇头与蛇身重合27 / 36a=1(a=1则循环停止)程序设计的难点和关键点:1 随机产生水果的位置,要保证水果在框图内且水果与蛇身不重和,2,判断蛇的死亡3,控制蛇的颜色变换4,对于分数的储存和导入调试的方法贪吃蛇程序程序设计报告【1】游戏介绍产生一个固定大小有边界的游戏区域,蛇从区域的中心开28 / 36始,由玩家通过键盘控制蛇的运动方向,用蛇头去吃随机分布在游戏区域内的食物;蛇的运动限制在游戏区域内,游戏区域有边界,所以蛇在区域内作循环运动;蛇的运动方向为直线运动,只走横和竖的方向,不走斜线;蛇身体的长度从 4开始每吃掉一份食物就增加一个长度;食物的出现安照随机分布的原则,蛇吃掉一份后随即在游戏区域内放一份新的食物;每吃掉一份食物得分为 1,游戏结束后统计全部的得分;游戏结束的条件为:在控制蛇的过程中蛇头碰到蛇的身体的任何部位或者碰到四壁。【2】基本概念,要点分析蛇的活动区域是由若干个小方格组成的。当这些小方格呈现灰色时,便显示蛇身。设整个区域由由 mn个方格组成,最左角上的方格坐标为,蛇由若干个相邻的方格组成的,将这些方格的坐标依蛇头至蛇尾的次序存入到一个数组中便代表了蛇身。当蛇在游戏区域中游动一格时,所对应的数组操作应该是将新的位置坐标插入到数组头部,同时将数组中最后一个元素删除,这项工作可以用一个一般的数组来完成,但当进行插入操作时需要自己移动数组中的元素;也可以使用 CArray来完成这些工作,CArray 的成员函数提供了需要的操作,这样做更简单一些。29 / 36游戏使用四个方向键来控制它的前进方向,在 OnKeyDown消息处理函数中,根据不同的方向键设置成员变量m_nDirect的值。当在菜单中选择开始时,启动了定时器,游戏开始,在定时器消息处理函数中,根据 m_nDirect的值判断出蛇的下个位置,如果没有超出边界或碰到自身,则它可以移到新的位置。如果吃到了食物,则在 CArray中只插入而不删除最后一个元素,蛇身长度增加。另外值得注意的是,当蛇移动一格时,只有蛇头和蛇身的位置需要重绘,为此专门编写了成员函数 ReDisplay来刷新一个小格。【3】程序概要设计程序流程图如下:【4】详细设计过程:新建工程 Snake,在 MFC的向导第一步选择 Single Document,按 Finishi结束。30 / 36选择 Resource View 窗口,打开菜单编辑器,在顶层菜单上添加一个名为“游戏”的弹出式菜单,该菜单下再添加一个名为“开始”的子菜单,其 ID为 ID_GAME_START,如下图所示。在 ClassWizard中为刚才编辑好的菜单添加消息处理函数,打开 ClassWizard,选中 Message Maps 页。在 Class Name中选择 CSnakeView,在 Object ID中选择 ID_Game_START,在 Messages中选择 COMMAND,添加消息处理函数。(4)在 ClassWizard中添加键盘消息处理函数。打开ClassWizard,选中 Message Maps页。在 Class Name中选择 CSnakeView,在 Object ID中选择 CSnake View,在Messages中选择 WM_KeyDown,添加消息处理函数。在 ClassWizard中添加定时器消息处理函数。打开ClassWizard,选中 Message Maps页。在 Class Name中选择 CSnakeView,在 Object ID中选择 CSnake View,在Messages中选择 WM_Timer , 添加消息处理函数。编辑生成代码,完成程序。31 / 36【5】 利用 MFC类向导添加代码步骤如下:选择 Class View 窗口,双击 CSnake View 类,添加如下成员
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025员工离职终止合同证明
- 2025秋部编版八年级语文上册《野望》教学设计
- 2025企业煤炭购销合同
- 2024-2025学年高中物理 第一章 电磁感应 2 感应电流产生的条件说课稿1 教科版选修3-2
- 本册综合教学设计-2025-2026学年初中化学九年级全一册人教版(五四学制)
- 线缆厂研发费用管理规定
- 2025知识产权许可合同书(合同版本)
- 2025建筑工地瓷砖订购合同模板
- 2025年应用文写作设备租赁合同范例
- 2025合同签订盖章操作指南
- 小学二年级综合实践活动课教学计划
- 采矿技术员考试试题及答案
- 中国建设银行校园招聘全国统一考试笔试题试卷历年真题内部题库(含答案)
- 生态环境保护执法课件
- 2024年卫生高级职称面审答辩(中医骨伤科)副高面审模拟试题及答案
- 招投标审计课件
- 14.3角的平分线(第2课时)(教学设计)数学人教版2024八年级上册
- 街道物业管理办公室职责
- 2025年保健产品的试题及答案
- 2025反洗钱知识考试试题库及答案
- 贵州省药品上市后变更备案管理实施细则
评论
0/150
提交评论