基于c语言的贪吃蛇游戏论文

时间:2024.3.31

学校代码                                                        学号      

分 类 号                                                        密级               

本科学年论文

学院、系          

专业名称                  

年    级                    

学生姓名                    

指导教师                    

20##年 10 月 10 日

基于C语言的贪吃蛇游戏

目录

摘要:..................................................................................................................... 3

关键词..................................................................................................................... 3

引言:..................................................................................................................... 3

1.1课题要求............................................................................................................ 4

1.2课题研究工具:............................................................................................. 4

1.3应用环境......................................................................................................... 4

2.游戏程序设计....................................................................................................... 5

2.1程序功能:..................................................................................................... 5

2.2设计思想......................................................................................................... 5

2.3.1设计流程图............................................................................................... 7

2.3.2 游戏流程图.............................................................................................. 8

3.数据结构设计....................................................................................................... 8

3.1 Food结构体.................................................................................................... 8

3.2 Snake结构体.................................................................................................. 9

3.3游戏中使用的宏常量表................................................................................ 10

4.算法分析............................................................................................................. 10

4.1各模块简介................................................................................................... 11

5.系统测试............................................................................................................. 13

6.总结..................................................................................................................... 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   Windows’7

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 Food

{

   int x; /*食物的横坐标*/

   int y; /*食物的纵坐标*/

   int addFood; /*屏幕上是否有食物的标志,0:表示有食物,

1:表明游戏场景中需要添加食物*/

};

3.2 Snake结构体

Snake结构体描述了游戏中的贪吃蛇,包括贪吃蛇蛇身的节数、蛇身在每一节屏幕上的坐标位置,以及蛇的移动方向和生命状态等信息。结构体成员Joint表示当前贪吃蛇蛇身的节数。常量MAX_JOINT表示游戏所允许的贪吃蛇蛇身的最大节数。结构体中用一个两维数组x[MAX_JOINT]和y[MAX_JOINT]保存蛇身每一节位于屏幕上的行、列坐标。结构体成员direction表示蛇当前的移动方向,约定1,2,3,4分别代表右、左、上、下4个方向,对应着程序中的四个宏观量MV_RIGHT、MV_LEFT、MV_UP、MV_DOWM。成员life描述蛇的生命状态,life=0,表示活着,life=1,表示死亡。Snake结构体定义如下:

struct Snake

{

   int x[MAX_JOINTS]; /*保存蛇身每一节位于屏幕上的列坐标*/

   int y[MAX_JOINTS]; /*保存蛇身每一节位于屏幕上的列坐标*/

   int joint; /*蛇的节数*/

   int direction; /*蛇的移动方向*/

   int life; /*蛇的生命,0表示活着,1表示死亡*/

};

3.3游戏中使用的宏常量表

4.算法分析

依据所需要处理的任务要求,规划输入数据和输出结果,决定存放数据的数据结构。

C语言中数据结构集中体现在数据类型上,因此在进行C语言程序设计时,应统筹规划程序中所使用的变量,数组,指针等,以及它们的类型等。这点是很重要的,如果在此期间选择不合适的变量或者数组,将来修改就十分困难。

程序通过不断扫描游戏者键盘的输入来决定蛇的运动方向,并随时侦测蛇头位置判断蛇是否吃到食物。吃到食物则按照游戏规则增长蛇的长度,并更新分数,同时在游戏场景中随机生成新食物,如此循环;当蛇的头部撞击到游戏场景边界或者蛇身时,游戏结束。游戏者也可以通过按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节的坐标,即蛇头的坐标要往某个方向变化,变化量为蛇每节的长度。蛇的这种坐标轮换需要循环语句使其继续下去。 

1.main()主函数

主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统。

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()

    游戏结束,清除屏幕,输出分数,显示游戏结束信息。

5.PrScore()输出分数

    在指定位置利用sprintf()将整数转换为字符串,用outtextxy()输出,bar()函数的应用是为了覆盖原来的值。

6.Closegraph ()图形结束

在显示游戏结束信息的画面时,按任意键关闭图形系统,程序结束。

5.系统测试

游戏测试是为了发现错误而运行程序的过程,成功的测试是发现了至今尚未发现的错误。

(1)拟定测试计划。根据游戏的总体情况,仔细分析游戏各个步骤的运行可能出现的状况,对各种情况进行汇总,然后拟定出一份具体测试步骤。

(2)初步测试。根据你定好的计划进行游戏调试,出现意外情况时及时记录。测试完后对所记录的意外情况进行分析,然后提出改进的方案,在进行修改。

(3)深度测试。对游戏进行最后的修改,确认没有漏洞后再进行测试从各个方面进行一次整体的排查,直到不再出现意料之外的情况。

6.总结

当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。

这次课程设计我还了解到了开发一个软件所需的步骤,一个软件的开发需要经过可行性研究,需求分析,系统设计,编码的单元测试,调试等功能,在软件开发的每一个阶段都有它的关键之处,它们都为后面软件的开发设计打下了基础,其中的任何一个环节出错都将导致软件开发失败,它们是相辅相成的。

为了完成这次的学年论文,我查阅了许多的资料,翻阅了很多有关贪吃蛇编程的书籍。了解到贪吃蛇游戏是可基于多个平台编译的游戏,如基于Java平台、基于Linux平台等,通过C语言和一些图形化编程工具进行编写。而在我整个论文的完成过程中,我进一步的对C语言有了更充分的认识与了解,同时也加深了我对这门学科的兴趣,让我可以在枯燥的程序中找到与众不同的快乐。

回顾起此次论文撰写,自从决定题目到完成整个编程,从理论到实践,在这么长的时间里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

参考文献:

(1)《C语言大学实用教程学习指导》,第二版,电子工业出版社

(2)赵海廷,《C语言程序设计》,05年版,北京人民邮电出版社,2005.

(3)何光明,杨静宇.《C语言程序设计与应用开发》.06年版.北京:清华大学出版社,2006.

(4)张强华. 《 C 语言程序设计》.20##年版.北京. 人民邮电出版社.2001.

更多相关推荐:
语文论文的文体特点

语文论文的文体特点语文教学论文,是以语文教学作为研究对象的科学论文。就语体学的分类而言,语文教学论文属于科学研究论文的范畴。但是教学论文与一般的科研论文、学术论文又有所不同。学术论文可以是纯理论、纯学术的研究;…

语文论文的选题及写作技巧

语文论文的选题及写作技巧一、语文论文的文体特点语文教学论文,是以语文教学作为研究对象的科学论文。就语体学的分类而言,语文教学论文属于科学研究论文的范畴。但是教学论文与一般的科研论文、学术论文又有所不同。学术论文…

语文论文的选题及写作技巧

语文论文的选题及写作技巧一、语文论文的文体特点语文教学论文,是以语文教学作为研究对象的科学论文。就语体学的分类而言,语文教学论文属于科学研究论文的范畴。但是教学论文与一般的科研论文、学术论文又有所不同。学术论文…

大学语文论文

高职《大学语文》课堂教学设计及其改革--------------------------------------------------------------------------------发表日期:20…

高中语文论文:文言虚词用法推断“七看”

文言虚词用法推断“七看”一、看语法结构借助语法结构分析可以推断文言虚词的用法。①先*抚之甚厚(归有光《项脊轩志》)“抚之”是动宾短语,“之”是动词“抚”的宾语,代词,代“妪”,可译为“她”。②且夫我尝闻少仲尼之…

农村小学语文论文:农村小学语文教学评价存在的问题及对策思考

农村小学语文论文:农村小学语文教学评价存在的问题及对策思考[摘要]当前,在农村小学语文教学中,存在着教学评价理念仍然落后、评价指标单一、评价方法单调、评价主体单向等问题,严重制约着小学语文教学改革的开展。本文从…

语文论文刘彩红

浅谈如何提高小学生的作文能力睢阳区高辛镇杜娄小学刘彩红【摘要】:小学语文教学法指出:作文教学是培养学生书面表达能力的重要途径,是培养学生观察、思维能力的重要途径,是提高学生思想认识水平的重要途径。作文教学在语文…

大学语文论文

现代艺术设计对传统文化元素的开发与运用当代的经济是迅猛的发展如今各式各样的人和事都会有固然艺术也出现了各种各样的风格和样式艺术界也随之出现了各种风所以人们的生活也随着发生了变化就如服装一样什么复古风啊蕾丝当道啊...

小学语文论文

摘要小学生良好的学习习惯是学生优秀的学习品质健康的学习心理科学的学习方法和技巧的综合反映是小学生学会学习的重要标志也是其终身学习能力形成的前提和基础著名教育家叶圣陶先生说过教育是什么往简单方面说只需一句话就是要...

六年级语文作文范文

六年级语文作文范文1丢失了诚信的同学我想对你说不知道你的名字也不记得你的模样唯一能记起的就只有你端端正正地身着初一新校服的隐隐约约的身影清楚地记得那个匆忙的早晨你突然从拐弯处蹿了出来那个我从不相识的你就在那个匆...

小升初语文作文写作九大技巧

小升初语文作文写作九大技巧一回扣标题法不管在何种情况下作文中的扣题是极为重要的更何况在考试作文无法煞尾的情况下尤为需要如有一年高考的标题是一次不寻常的考试在记述了某件事情之后一旦想不出更好的结尾方式就不妨以对我...

高中语文作文写作技巧(绝好资料-奉献给高三的学子)1

高中作文写作技巧高考作文各种文体写作复习技巧当前对于高考作文来说首先要解决的问题不是怎么写而是写什么很多考生拿到了作文题往往不知道写些什么脑子里似乎不存在所要写的东西这到底是怎么造成的呢高考满分作文他们无一例外...

语文论文(46篇)