基于c语言的贪吃蛇游戏论文.doc_第1页
基于c语言的贪吃蛇游戏论文.doc_第2页
基于c语言的贪吃蛇游戏论文.doc_第3页
基于c语言的贪吃蛇游戏论文.doc_第4页
基于c语言的贪吃蛇游戏论文.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学校代码 学号 分 类 号 密级 本科学年论文 基于C语言的贪吃蛇游戏学院、系 专业名称 年 级 学生姓名 指导教师 2012年 10 月 10 日基于C语言的贪吃蛇游戏目录摘要:3关键词3引言:31.1课题要求41.2课题研究工具:41.3应用环境42.游戏程序设计52.1程序功能:52.2设计思想52.3.1设计流程图72.3.2 游戏流程图83.数据结构设计83.1 Food结构体83.2 Snake结构体93.3游戏中使用的宏常量表104.算法分析104.1各模块简介115.系统测试136.总结13参考文献:14摘要:近年来,随着通信技术的高速发展,移动网络和移动终端性能的不断提高与完善,以及手机、电脑的高普及率,使得人们对终端系统应用开发的需求在不端增大,贪吃蛇游戏是受广大人群喜爱的一款游戏,贪吃蛇的设计比较复杂,在这个游戏设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用 c 语言的图形库函数。本文基于c语言,在Microsoft Visual C+6.0下实现需要用图形驱动文件的支持。游戏所以操作均通过键盘完成,操作简便。关键词:函数 循环 结构体 引言:贪吃蛇是一款非常经典的手机游戏,贪吃蛇的设计比较复杂,它涉及的面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。在这个游戏设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用C语言的图形库函数。因此,在设计开发过程中,要对C语言的图形库函数有一定的了解,利用图形库函数实现一些功能。 贪吃蛇之所以取这样的名字,其用意还是很明显的,贪吃蛇其实并不贪,它更像是人不断地追求的象征,就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。虽然现在市面上存在各种各样的游戏版本,可是贪吃蛇市场还是依然存在。 因为它的特殊在于吸引人更深入。随着游戏速度不断加快,其刺激也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机。都能很快顺利的运行。对于在外忙碌的人,不可能花费大量的时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合他们的需求。贪吃蛇是家喻户晓的益智类小游戏,选择这个题目是为了将自己的所学知识加以运用,我希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践和实际的项目中提高自己的编程能力,通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。1.1课题要求(1)收集资料,分析课题,分解问题,形成总体设计思路;(2)对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(3)上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(4)完成课程设计报告。 1.2课题研究工具:本程序采用Microsoft Visual C+6.0的英文版本进行编译。VisualC+6.0是Microsoft公司推出的基于Windows操作系统的可视化C+编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C+规范,但仍有相当多的编程人员使用VisualC+6.0进行应用系统的开发。1.3应用环境 操作系统 Windows XP Windows Vista Windows7 2.游戏程序设计2.1程序功能:贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记时,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。2.2设计思想 这个程序的关键是表示蛇的图形以及蛇的移动。用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是画矩形块和覆盖矩形块。食物的出现与消失也是画矩形块和覆盖矩形块。其实我们可以简单模拟一下贪吃蛇的游戏模式:某个世界上突然出现一条蛇,它很短,它的运动神经异常,它没法停止自己的多动症在它的世界里就只有食物,它很饿,也很贪吃;同样在不明原因的情况下,食物从天而降,可惜的是没有落到嘴边;饥饿的主人公,不管它有没有毒,也不问食物的来历,径直向食物爬去;它吃到食物啦,它超出想象的同化能力让食物很快的成为自己身体的一部分,它的身子变长啦。当它吃到第一颗食物时,上帝有给它第二颗,于是它吃了第二颗,于是又变长了,于是又有第三颗它的身子是一直的加长,它不管自己过长身体的麻烦转身不便,继续吃下去,现在它是直接把巴张大,好让食物有个绿色通道。但是在某天的下午,它咬到了自己,它才想起自己是一条毒蛇,于是晕死过去(不是毒死);又或者它往食物冲锋的时候,它失去控制,撞到了墙上。为了便于理解,定义两个结构体:食物与蛇。 整个游戏可分为四个步骤:第一步,出现食物;第二步,蛇不停运动;第三步,检查蛇是撞到自己或墙壁;由第四步起游戏有两条支线(A、B):第四步A,蛇没有碰到自己或墙壁,蛇继续前进,绘制蛇的动作;第五步,判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤;第四步B,蛇碰到自己或墙壁,终止游戏。 2.3.1设计流程图开始蛇行进方向为按键方向蛇正常运行游戏初始化界面游戏开始运行按键这选择 是否 蛇吃到食物否碰壁或碰到自己 是 蛇死亡玩家结束游戏2.3.2 游戏流程图游戏开始游戏运行计分游戏结束 3.数据结构设计游戏中蛇与食物是两个主要的对象,程序中可以采用Food和Snake两个结构体来分别描述食物和蛇。3.1 Food结构体Food结构体用来描述食物描述食物在屏幕上的位置,以及游戏场景中是否需要添加食物的标志信息。结构体成员x和y描述了食物在屏幕上行、列坐标的位置;成员变量addFood标志游戏场景中是否需要添加食物,addFood=0,表示游戏场景中有食物,addFood=1,则表示食物已经被贪吃蛇吃掉,游戏场景中需要添加食物。Food结构体定义如下:struct Foodint x; /*食物的横坐标*/int y; /*食物的纵坐标*/int addFood; /*屏幕上是否有食物的标志,0:表示有食物,1:表明游戏场景中需要添加食物*/;3.2 Snake结构体Snake结构体描述了游戏中的贪吃蛇,包括贪吃蛇蛇身的节数、蛇身在每一节屏幕上的坐标位置,以及蛇的移动方向和生命状态等信息。结构体成员Joint表示当前贪吃蛇蛇身的节数。常量MAX_JOINT表示游戏所允许的贪吃蛇蛇身的最大节数。结构体中用一个两维数组xMAX_JOINT和yMAX_JOINT保存蛇身每一节位于屏幕上的行、列坐标。结构体成员direction表示蛇当前的移动方向,约定1,2,3,4分别代表右、左、上、下4个方向,对应着程序中的四个宏观量MV_RIGHT、MV_LEFT、MV_UP、MV_DOWM。成员life描述蛇的生命状态,life=0,表示活着,life=1,表示死亡。Snake结构体定义如下:struct Snakeint xMAX_JOINTS; /*保存蛇身每一节位于屏幕上的列坐标*/int yMAX_JOINTS; /*保存蛇身每一节位于屏幕上的列坐标*/int joint; /*蛇的节数*/int direction; /*蛇的移动方向*/int life; /*蛇的生命,0表示活着,1表示死亡*/;3.3游戏中使用的宏常量表 宏常量 数值 含义MAX_JOINTS200贪吃蛇的最大节数RIGHT0x4d00键盘 按键的键值LEFT0x4b00键盘 按键的键值DOWN0x5000键盘 按键的键值UP0x4800键盘 按键的键值ESC0x011b键盘Esc按键的键值MV_RIGHT1蛇向右方向移动MV_LEFT2蛇向左方向移动MV_UP3蛇向上方向移动MV_DOWM4蛇向下方向移动4.算法分析依据所需要处理的任务要求,规划输入数据和输出结果,决定存放数据的数据结构。语言中数据结构集中体现在数据类型上,因此在进行语言程序设计时,应统筹规划程序中所使用的变量,数组,指针等,以及它们的类型等。这点是很重要的,如果在此期间选择不合适的变量或者数组,将来修改就十分困难。程序通过不断扫描游戏者键盘的输入来决定蛇的运动方向,并随时侦测蛇头位置判断蛇是否吃到食物。吃到食物则按照游戏规则增长蛇的长度,并更新分数,同时在游戏场景中随机生成新食物,如此循环;当蛇的头部撞击到游戏场景边界或者蛇身时,游戏结束。游戏者也可以通过按Esc键直接退出游戏。主函数main()通过调用函数InitGraph()实现图形系统初始化,调用函数DrawFence()实现绘制围墙等游戏场景,调用函数GamePlay()实现具体的贪吃蛇游戏,调用函数PrScore()来显示和更新游戏者所得分数,最后通过调用函数Closegraph()结束游戏。其中,函数GamePlay()是实现贪吃蛇游戏的关键函数。首先,随机出现新食物,设置蛇的初始状态及其运动方向,并将初始得分记零;然后,通过while循环来检测游戏者的键盘输入,以控制蛇的运动方向。当蛇头撞到围墙或自己身体时,则调用函数GameOver()结束游戏。需注意的是,由于蛇的头部为两节,第三节蛇身不可能拐过来,因此游戏程序从蛇的第四节开始判断是否撞到自己或围墙。4.1各模块简介设计关键所在蛇不停移动的:蛇的不停移动,就是蛇的下一节取代前一节的位置,在计算机中就是蛇下一节的位置坐标变成前一节的位置坐标。在上文中,已定义蛇的位置坐标为数组类型,一组坐标对应一节的位置,假设有i+1节,由0到i节,第i节的坐标取第i-1节的坐标,第i-1节的坐标取第i-2节的坐标直到第1节取第0节的坐标。而第0节的坐标,即蛇头的坐标要往某个方向变化,变化量为蛇每节的长度。蛇的这种坐标轮换需要循环语句使其继续下去。 1main()主函数主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统。 2画面函数DrawFence()主界面就是一个密封的围墙,用两个循环语句分别在水平方向和垂直方向输出连续的宽度和高度均为10个单位的矩形小方块,围成密闭图形,表示围墙,为了醒目,设置为淡青颜色,用函数setlinestyle(SOLID_LINE,0,THICK_WIDTH)设置线型宽度为3个像素。设置3个像素的围墙线,蛇在贴墙走的时候,会擦掉部分围墙线,使线变细,图形变得不好看,如果不想这种情况出现,则将线型宽度设置为1个像素。3游戏具体过程函数GamePlay()这个函数是游戏的主要部分,难点在表示蛇的新位置并消除前一次的图形。采用的方法是每次移动的时候从最后一节开始到倒数第二节(因蛇头为两节),将前一节的坐标赋值给后一节的坐标,移动后只要把最后一节用背景色去除即可,因为新位置0到n-l节还是要出现在画面上的。然后蛇头按照方向键来更改位置。另外,食物的随机出现要确保它的位置在10的倍数位置上,因为蛇的坐标都是以10为模的,这样的话就可以让蛇吃到,蛇吃到食物的判断是蛇头的坐标和食物的坐标相等。其算法过程为:(1)设置初始值。为防止食物总出现在一个位置上,要设置随机数发生器,真正产生随机数。初始时,蛇只有蛇头,设定一个开始的方向。(2)循环执行,直到按Esc键退出。 (3)没有按键的情况下,循环执行。如果没有食物,随机出现食物;如果有食物,则显示食物,蛇移动身体,根据蛇的方向改变坐标值,并判断蛇是否撞到了墙或自己吃了自己,如果出现这两种情况之一,则蛇死,调用游戏结束函数GameOver(),结束本次游戏,重新开始。如果蛇吃到了食物,蛇身体长一节,数组元素增加一个,身体节数、分数都进行相应的改变。在新位置画出蛇。(4)如果有按键,则识别键值。如果按键为Esc键则结束游戏,程序运行结束;如果所按键为方向键,则根据该键改变代表蛇方向的变量direction的值,要考虑相反方向键无效。4游戏结束函数GameOver() 游戏结束,清除屏幕,输出分数,显示游戏结束信息。5PrScore()输出分数 在指定位置利用sprintf()将整数转换为字符串,用outtextxy()输出,bar()函数的应用是为了覆盖原来的值。6Closegraph ()图形结束在显示游戏结束信息的画面时,按任意键关闭图形系统,程序结束。5.系统测试游戏测试是为了发现错误而运行程序的过程,成功的测试是发现了至今尚未发现的错误。(1)拟定测试计划。根据游戏的总体情况,仔细分析游戏各个步骤的运行可能出现的状况,对各种情况进行汇总,然后拟定出一份具体测试步骤。(2)初步测试。根据你定好的计划进行游戏调试,出现意外情况时及时记录。测试完后对所记录的意外情况进行分析,然后提出改进的方案,在进行修改。(3)深度测试。对游戏进行最后的修改,确认没有漏洞后再进行测试从各个方面进行一次整体的排查,直到不再出现意料之外的情况。6.总结当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 这次课程设计我还了解到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论