《C语言程序设计》课程设计题目:贪吃蛇游戏设计学院:信息学院专业:网络工程姓名:李益双学号:1101010121班级:信息A1111班指导教师:罗成职称:讲师完成日期:2012年6月2目录1、前言……………………………………………32、摘要…………………………………………..43、项目背景……………………………………..54、需求分析……………………………………..65、概要设计……………………………………..76、详细设计与测试……………………………..8601定义蛇身的数据结构……………………….8602算法设计与程序流程图……………………..8602.1贪吃蛇算法设计……………………..8602.2程序流程图…………………………..9603光标移动的设计与实现……………………..10603.1显示水平围墙的实现………………..10603.2显示分数的实现……………………..11603.3接受玩家按键信息的实现…………..11603.4游戏结束时显示信息的实现……..…11604贪吃蛇游戏主干的设计……………..……..12604.1游戏的初始化与加载的实现………..12604.2食物随机产生的实现…………………13604.3蛇身的增长设计……………………..14604.4蛇身的显示与移动的设计实现……..15604.5蛇的头部与物体碰撞的而设计实现….167、编码…………………………………………..178、结论…………………………………………..189、参考文献……………………………………..1910、致谢………………………………………….193前言C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。C语言是由UNIX的研制者丹尼斯·里奇(DennisRitchie)于1970年由肯·汤普逊(KenThompson)所研制出的B语言的基础上发展和完善起来的。目前,C语言编译器普遍存在于各种不同的操作系统中,例如UNIX、MS-DOS、MicrosoftWindows及Linux等。C语言的设计影响了许多后来的编程语言,例如C++、Objective-C、Java、C#等。1980年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局(AmericanNationalStandardInstitution)为C语言订定了一套完整的国际标准语法,称为ANSIC,作为C语言的标准。1980年代至今的有关程式开发工具,一般都支持符合ANSIC的语法。对于一个初学者,MicrosoftVisualC++是一个比较好的软件。界面友好,功能强大,调试也很方便。这是微软出的一个C语言集成开发环境(IDE),主要有:VC++6.0、VS2005.VS2008.VS2010等,分为企业版和学生版等。对于初学者VC++6.0是比较容易上手的,但其对标准支持的不好可能使人养成不良的编程习惯。在unix/linux操作系统上,学习c语言一般使用vim/emacs来编辑源文件,使用gcc来编译源文件,使用make程序来管理编译过程。C++学习过程中,涉及到很多的基本知识点,需要以练习的形式逐步深入,以达到融会贯通的目的。学习C++是一项交互式练习,不实际编写程序就无法学会C++,因此,要抱着一种十年方能磨一剑的心理,扎扎实实从基础开始。选一些好的实例,这些实例经过反复的挑选,既有利于我们掌握有关知识,又不识趣味性。不断地写代码,写有意义的代码。这其实也是入门任何其他编程语言的必由之路。在编程的过程中,重点训练我的编程的逻辑思路和算法以及编程、调试的基本技术。因此,在作课程设计时,以任务驱动为前提,从提出问题开始,行分析和算法设计,最后再归纳总结,以加强学习的针对性和应用性。万丈高楼平地起,能够编写复杂的游戏都是在编写过简单的游戏程序基础上演变过来的能力。然而像贪吃蛇这样的小游戏程序,就自然成了游戏设计者的入门首选。因此其界面简单,操作、玩法一目了然,所以编写起来就不会很困难,而且需要考虑的问题也不是很多,就是蛇的显示、移动、碰撞3个游戏的主块,程序就自然编写出来了,不会一开始就把游戏设计初学者拒之门外。编成之后成就感就油然而生,并使之对游戏设计产生强烈的兴趣。成为向游戏设计之路成功迈进的第一步,同时对于VC++的应用水平也会上升,用起来会更加熟练、得心应手。从易到难这是一个准则,总之,贪吃蛇小游戏的研究会对增长程序阅读能力、编写程序能力等起到了意想不到的作用。4摘要本文首先对小游戏的发展前景进行了展望,并对其研究现状与研究目标进行了介绍。然后对编写程序用的工具软件VC++进行了介绍。接着进入主题,对贪吃蛇这个游戏进行了介绍然后又对游戏总体设计与分析。最后详细地介绍了游戏中各个细节的具体实现,并进行了细致的分析。行云流水般地将在游戏编写过程中遇到的问题以及相应的解决方法表述的清清楚楚。在实践中我获得到了许多宝贵的知识和编程的经验!关键字:贪吃蛇,VC++,小游戏。5ABSTRACTInthispaper,Atthewesawthefutureofthedevelopmentoflittlegame.andthenweintroducedthesituationandtargetofgameresearch.afterwards,wepeovidedtheprogrammingtoolwhichiscalledVC++madebyMicrosoft.Nextlet’sgetdowntobusiness.inthefirstplace.weintroducedthegame—greedysnake.inthesecondplace,wedesignedandanalyzedtheoverallgame.Atlast,wevividlyprovidedtheparticularrealizationofgamedetails,andanalyzedthosedetailmeticulous.Intheprocessofgameprogramming.Icameupagainstlotsoftrouble,butIdidn’tgiveitup,bythecontrary.Iovercamethemonebyone,andatlastImetwithsuccess,Ihavegotmanypreciousknowledgeandprogrammingexperienceinthepractice.Keywords:Greedysnake,VC++,littlegame.6项目背景贪吃蛇简介蛇——传说中的圣灵之物,仰头为神,俯首为魔。蛇是月亮国膜拜的神,月亮国的子民们都认为蛇是万能的主宰派来保护他们的守护者。蛇在这个岛屿就像空气一样自然的出现在各个角落,有些还成为居民的宠物,陪伴孩子长达,和年轻人一起去探险,守护者散步的老人。在善良的女神女娲神保佑下,人们的生活安宁平静。为了答谢女娲神的庇佑,每年月亮果的国民们都会举办一个守护蛇大赛,大人家都会拿出自己最强、最炫、最快、最稀有的蛇来参加比赛,获得第一名的人将得到国王的特别嘉奖。所以国民一生都在培养更有威力、更长、更壮的蛇。“贪吃蛇”是在一个产生于1970年代中后期的计算机游戏。也叫贪吃蛇。该游戏在1990年代由于一些手机将其引入而一时间再度流行起来。在游戏中,玩家操作一条细长的蛇爬行与一个带边界的平面上,一路拾起触碰到之事或其它类似的物件,并要避免触碰到自身或者包围者游戏区的“墙”。每次贪吃蛇吃掉一件食物,它的身体变增长一些,这让游戏的难度渐渐变大。操控贪吃蛇时,玩家操控贪吃蛇的头部的朝向(上、下、左、右)操控贪吃蛇的进行方向贪吃蛇的身体将跟随其头部行进。另外,玩家不可在游戏中途停止贪吃蛇的行进。随着贪吃蛇的成功移植到手机系统,贪吃蛇的操作按键要求与手机按键完美匹配,使贪吃蛇游戏风靡起来。7需求分析现在小游戏很是流行在手机以及互联网上都是很火热的,这引起了我的兴趣。查看了而几个小游戏网站,其实也没有什么,只不过是写以FLASH为主开发的Flash小游戏,确实没有什么非同凡响的地方。但你仔细思考想一下,就不难发现,这些东西还真有一定的市场,只是现在还默默地没有被人们所关注。首先,不断扩大的网络爱好者和电脑应用者队伍,带来了很多“新手”,这些新手还会像以前我们刚开始接触是一样,对一些相对简单,操作也方便、娱乐性强东西很感兴趣。源源不断的加入者,组成了“小游戏”玩家的新主力军。其次,“小游戏”很方便下载,而且现在的数码小产品被越来越多的青年所青睐,拥有许多超强功能来支持这些小游戏。再次,随着电视上网络上进程的推进,网络走进千家万户的时代为期不远。因为电视分辨率与内存大小的限制,以及遥控器操作要求简单,这种小游戏将会有一个巨大而潜在的市场。今后小游戏的发展趋势:1,体积小,小游戏一般都占硬盘空间相当小,方便下载传播;2,内容好,体积小并不代表没有内容,相反小游戏的内容还是比较丰富的;3,耐玩,正是因为小游戏占空间不大,它也是在电脑上占据比较长的游戏了;4,娱乐性高,小游戏玩起来还是蛮有趣的,拥有一定的娱乐性;5,无年龄层次,不分老少、男女小游戏面向的晚间范围广。8概要设计贪吃蛇游戏的额基本规则:通过键盘上的1、2、3、4键来控制蛇的运行方向,当蛇将食物吃到了后身体长度自动增加,当蛇撞到墙或吃到自身则蛇死,此时将退出贪吃蛇游戏;当蛇向左运行时,按向右键将不会改变蛇的运行方向,蛇将继续前进;同理其他方向一样。在编写贪吃蛇游戏时有一下几个技术要点。第一、如何实现蛇在吃到食物后食物消失,这里用到的方法是采用背景色在出现事物的地方将食物重画,这样食物就消失不见了。第二、、如何实现蛇的移动且在移动过程中不留下痕迹,实现蛇的移动也是贪吃蛇游戏最核心的技术,主要方法是将蛇头后面的每一节逐次移动到前一节的位置,然后按蛇的运行方向不同对蛇头的位置作出相应调整,蛇每向前运行一步,相应的将其为不宜结用背景色重画,及去掉其尾部。第三、当蛇向上运行时,从键盘中输入向下键,此时蛇的运行方向不变,其他几个方向以此类推,之力我是采用if….eles语句来实现该功能。第四、食物出现的位置这里采用随机产生,但这种随机产生也是有一定限制条件的即食物出现位置的横纵坐标必须能被10整除,只有这样才能保证蛇能够吃到食物。9详细设计与测试601定义蛇身的数据结构对于蛇身在某一瞬间的位置标识,我们采用一个一维的数组来标识出来,即用动态增长的数组来存储每一节蛇身的位置(包括蛇头和蛇尾)。也就是说,用存储单位空间存储当前蛇身某部位的位置来对整个蛇身的位置进行标识,因此每个存储空间的内容就是一个点的坐标值(row,col),而蛇身以从左到右的方式进行编号,最左边是蛇的尾部,最右边是蛇的额头不。如表6-1为三节蛇的数据结构。表6-1三节蛇的数据结构(snake[0].row,snake[0].col)(snake[1].row,snake[1].col)(snake[2].row,snake[2].col)snake[0].row和snake[0].col是第0号蛇身也就是蛇尾的横坐标row和纵坐标col:以此类推,snake[2].row和snake[2].col则是第二号蛇身也就是蛇头的横坐标row和纵坐标col。602算法设计与程序流程图602.1贪吃蛇算法设计Snakegame:1:初始化游戏,游戏界面的绘制、游戏速度的设置、食物产生2:while玩家不按退出键3:if玩家按下某方向键4:蛇身按照玩家按下方向移动5:eles蛇身按照默认方向(右)移动6:endif7:if蛇头碰到墙壁8:游戏结束9;endif10:if蛇头碰到自身11:游戏结束12:endif13:if蛇碰到食物14:蛇身增长、分数增加、产生新食物15;endif16:endwhlile17:游戏结束==========================================