ImageVerifierCode 换一换
格式:DOC , 页数:25 ,大小:942.04KB ,
资源ID:11722015      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/11722015.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(c语言课程设计-贪吃蛇设计.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

c语言课程设计-贪吃蛇设计.doc

1、 《C语言程序设计》课程设计 题 目: 贪吃蛇游戏设计 学 院: 信息学院 专 业: 网络工程 姓 名: 李益双 学 号: 1101010121 班 级: 信息A1111班 指导教师: 罗成 职 称: 讲师

2、 完成日期: 2012年6月 目 录 1、 前言……………………………………………3 2、 摘要…………………………………………..4 3、 项目背景……………………………………..5 4、 需求分析……………………………………..6 5、 概要设计……………………………………..7 6、 详细设计与测试……………………………..8 601 定义蛇身的数据结构……………………….8 602算法设计与程序流程图……………………..8 602.1贪吃蛇算法设计……………………..8 602.2程序流程图…………

3、………………..9 603光标移动的设计与实现……………………..10 603.1显示水平围墙的实现………………..10 603.2显示分数的实现……………………..11 603.3接受玩家按键信息的实现…………..11 603.4游戏结束时显示信息的实现……..…11 604 贪吃蛇游戏主干的设计……………..……..12 604.1游戏的初始化与加载的实现………..12 604.2食物随机产生的实现…………………13 604.3蛇身的增长设计……………………..14 604.4蛇身的显示与移动的设计实现……

4、15 604.5蛇的头部与物体碰撞的而设计实现….16 7、 编码…………………………………………..17 8、 结论…………………………………………..18 9、 参考文献……………………………………..19 10、 致谢………………………………………….19 前 言 C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。 C语言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)于1970年 由肯·汤普逊(Ken

5、Thompson)所研制出的B语言的基础上发展和完善起来的。目前,C语言编译器普遍存在于各种不同的操作系统中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C语言的设计影响了许多后来的编程语言,例如C++、Objective-C、Java、C#等。 1980年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局(American National Standard Institution)为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。1980年代至今的有关程式开发工具,一般都支持符合ANSI C的语法。 对于一个初学者,

6、Microsoft Visual C++是一个比较好的软件。界面友好,功能强大,调试也很方便。这是微软出的一个C语言集成开发环境(IDE),主要有:VC++6.0、VS2005.VS2008.VS2010等,分为企业版和学生版等。对于初学者VC++6.0是比较容易上手的,但其对标准支持的不好可能使人养成不良的编程习惯。 在unix/linux操作系统上,学习c语言一般使用vim/emacs来编辑源文件,使用gcc来编译源文件,使用make程序来管理编译过程。 C++学习过程中,涉及到很多的基本知识点,需要以练习的形式逐步深入,以达到融会贯通的目的。学习C++是一项交互式练习,

7、不实际编写程序就无法学会C++,因此,要抱着一种十年方能磨一剑的心理,扎扎实实从基础开始。选一些好的实例,这些实例经过反复的挑选,既有利于我们掌握有关知识,又不识趣味性。不断地写代码,写有意义的代码。这其实也是入门任何其他编程语言的必由之路。在编程的过程中,重点训练我的编程的逻辑思路和算法以及编程、调试的基本技术。因此,在作课程设计时,以任务驱动为前提,从提出问题开始,行分析和算法设计,最后再归纳总结,以加强学习的针对性和应用性。 万丈高楼平地起,能够编写复杂的游戏都是在编写过简单的游戏程序基础上演变过来的能力。然而像贪吃蛇这样的小游戏程序,就自然成了游戏设计者的入门首选。因此其界面简单,操

8、作、玩法一目了然,所以编写起来就不会很困难,而且需要考虑的问题也不是很多,就是蛇的显示、移动、碰撞3个游戏的主块,程序就自然编写出来了,不会一开始就把游戏设计初学者拒之门外。编成之后成就感就油然而生,并使之对游戏设计产生强烈的兴趣。成为向游戏设计之路成功迈进的第一步,同时对于VC++的应用水平也会上升,用起来会更加熟练、得心应手。从易到难这是一个准则,总之,贪吃蛇小游戏的研究会对增长程序阅读能力、编写程序能力等起到了意想不到的作用。 摘 要 本文首先对小游戏的发展前景进行了展望,并对其研究现状与研究目标进行了介绍。然后对编写程序用的工具软件 VC++进行了介绍。接着进入

9、主题,对贪吃蛇这个游戏进行了介绍然后又对游戏总体设计与分析。最后详细地介绍了游戏中各个细节的具体实现,并进行了细致的分析。行云流水般地将在游戏编写过程中遇到的问题以及相应的解决方法表述的清清楚楚。在实践中我获得到了许多宝贵的知识和编程的经验! 关键字:贪吃蛇,VC++,小游戏。 ABSTRACT In this paper, At the we saw the future of the development of little game.and t

10、hen we introduced the situation and target of game research . afterwards, we peovided the programming tool which is called VC++ made by Microsoft . Next let’s get down to business . in the first place . we introduced the game—greedy snake .in the second place ,we designed and analyzed the overall ga

11、me .At last , we vividly provided the particular realization of game details, and analyzed those detail meticulous. In the process of game programming. I came up against lots of trouble, but I didn’t give it up, by the contrary. I overcame them one by one ,and at last I met with success ,I have got

12、many precious knowledge and programming experience in the practice. Key words :Greedy snake, VC++, little game. 项目背景 贪吃蛇简介 蛇——传说中的圣灵之物,仰头为神,俯首为魔。蛇是月亮国膜拜的神,月亮国的子民们都认为蛇是万能的主宰派来保护他们的守护者。蛇在这个岛屿就像空气一样自然的出现在各个角落,有些还成为居民的宠物,陪伴孩子长达,和年轻人一起去探险,守护者散步的老人。在善良的女神女娲神保佑下,人们的生活安宁平静。为了答谢女娲神的庇佑,

13、每年月亮果的国民们都会举办一个守护蛇大赛,大人家都会拿出自己最强、最炫、最快、最稀有的蛇来参加比赛,获得第一名的人将得到国王的特别嘉奖。所以国民一生都在培养更有威力、更长、更壮的蛇。 “贪吃蛇”是在一个产生于1970年代中后期的计算机游戏。也叫贪吃蛇。该游戏在1990年代由于一些手机将其引入而一时间再度流行起来。在游戏中,玩家操作一条细长的蛇爬行与一个带边界的平面上,一路拾起触碰到之事或其它类似的物件,并要避免触碰到自身或者包围者游戏区的“墙”。每次贪吃蛇吃掉一件食物,它的身体变增长一些,这让游戏的难度渐渐变大。操控贪吃蛇时,玩家操控贪吃蛇的头部的朝向(上、下、左、右)操控贪吃蛇的进行方向

14、 贪吃蛇的身体将跟随其头部行进。另外,玩家不可在游戏中途停止贪吃蛇的行进。随着贪吃蛇的成功移植到手机系统,贪吃蛇的操作按键要求与手机按键完美匹配,使贪吃蛇游戏风靡起来。 需求分析 现在小游戏很是流行在手机以及互联网上都是很火热的,这引起了我的兴趣。查看了而几个小游戏网站,其实也没有什么,只不过是写以FLASH为主开发的Flash小游戏,确实没有什么非同凡响的地方。但你仔细思考想一下,就不难发现,这些东西还真有一定的市场,只是现在还默默地没有被人们所关注。 首先,不断扩大的网络爱好者和电脑应用者队伍,带来了很多“新手”,这些新手还

15、会像以前我们刚开始接触是一样,对一些相对简单,操作也方便、娱乐性强东西很感兴趣。源源不断的加入者,组成了“小游戏”玩家的新主力军。 其次,“小游戏”很方便下载,而且现在的数码小产品被越来越多的青年所青睐,拥有许多超强功能来支持这些小游戏。 再次,随着电视上网络上进程的推进,网络走进千家万户的时代为期不远。因为电视分辨率与内存大小的限制,以及遥控器操作要求简单,这种小游戏将会有一个巨大而潜在的市场。 今后小游戏的发展趋势:1,体积小,小游戏一般都占硬盘空间相当小,方便下载传播;2,内容好,体积小并不代表没有内容,相反小游戏的内容还是比较丰富的;3,耐玩,正是因为小游戏占空间不大,它也是在电

16、脑上占据比较长的游戏了;4,娱乐性高,小游戏玩起来还是蛮有趣的,拥有一定的娱乐性;5,无年龄层次,不分老少、男女小游戏面向的晚间范围广。 概要设计 贪吃蛇游戏的额基本规则:通过键盘上的1、2、3、4键来控制蛇的运行方向,当蛇将食物吃到了后身体长度自动增加,当蛇撞到墙或吃到自身则蛇死,此时将退出贪吃蛇游戏;当蛇向左运行时,按向右键将不会改变蛇的运行方向,蛇将继续前进;同理其他方向一样。 在编写贪吃蛇游戏时有一下几个技术要点。 第一、 如何实现蛇在吃到食物后食物消失,这里用到的方法是采用背景色在出现事物的地方将食物重画,这样食物就消失不见了。

17、 第二、 、如何实现蛇的移动且在移动过程中不留下痕迹,实现蛇的移动也是贪吃蛇游戏最核心的技术,主要方法是将蛇头后面的每一节逐次移动到前一节的位置,然后按蛇的运行方向不同对蛇头的位置作出相应调整,蛇每向前运行一步,相应的将其为不宜结用背景色重画,及去掉其尾部。 第三、 当蛇向上运行时,从键盘中输入向下键,此时蛇的运行方向不变,其他几个方向以此类推,之力我是采用if….eles语句来实现该功能。 第四、 食物出现的位置这里采用随机产生,但这种随机产生也是有一定限制条件的即食物出现位置的横纵坐标必须能被10整除,只有这样才能保证蛇能够吃到食物。

18、 详细设计与测试 601定义蛇身的数据结构 对于蛇身在某一瞬间的位置标识,我们采用一个一维的数组来标识出来,即用动态增长的数组来存储每一节蛇身的位置(包括蛇头和蛇尾)。 也就是说,用存储单位空间存储当前蛇身某部位的位置来

19、对整个蛇身的位置进行标识,因此每个存储空间的内容就是一个点的坐标值(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和纵

20、坐标col。 602 算法设计与程序流程图 602.1 贪吃蛇算法设计 Snake game : 1:初始化游戏,游戏界面的绘制、游戏速度的设置、食物产生 2:while 玩家不按退出键 3: if 玩家按下某方向键 4: 蛇身按照玩家按下方向移动 5: eles蛇身按照默认方向(右)移动 6: end if 7: if 蛇头碰到墙壁 8: 游戏结束 9; end if 10: if 蛇头碰到自身 11:

21、 游戏结束 12: end if 13: if 蛇碰到食物 14: 蛇身增长、分数增加、产生新食物 15; end if 16: end whlile 17: 游戏结束 ============================================================= 602.2程序流程图 602.2程序流程图 603光标移动的设计与实现 在游戏过程中,对于光标的移动相当重要。首先,食物的产生是随机产生的,可能出现在游戏界面的任何一个地

22、方,因此生成随机坐标后,就要将光标移动到该坐标,然后进行显示食物操作。其次,游戏界面的显示也需要移动光标。譬如,纵向的围栏的显示。再次,就是蛇身的移动了,蛇尾部要不断清空,这样蛇就动起来了。其中X为纵坐标,Y为横坐标,(X,Y)对应于屏幕上的像素点。COORD这个数据结构、SetConsoleCurorPosition()、GetStdHandle()这2个函数都是位置,GetStdHandle()得到标准输入输出的句柄。Gotoxy()这个函数是布尔型的,返回真或假。 下面将光标移动应用到贪吃蛇游戏中 603.1显示水平围墙的实现 水

23、平围墙就是在游戏区域中,限制蛇行动的上下界,即活动的对打边界。这里用一系列“====”连续显示,直到设定的最大活动范围。 水平围墙如图603.1所示 图603.1水平围墙 603.2显示分数的实现 对于玩家的得分,是在游戏当中,玩家控制贪吃蛇每当吞掉一个食物,相应的分数就会增加一分。游戏结束时,分数会清零,再下一盘游戏中从0分开始计数 玩家的分数显示如图603.2所示 603.2分数显示图 603.3接受玩家按键信息的实现 为了接受来自键盘的信息,之力用到了conio.h这个头文件。通过一个布尔函数kbhit()的真假来判断是否有按键被

24、敲击,如果没有,游戏正常运行;否则通getch()得到那个char变量的按键信息,然后修改蛇的运动方向。 603.4游戏结束时显示信息的实现 当游戏介绍时,屏幕上要显示“Game over”的字样,还有“another game(y/n)?”的字样来让玩家选择继续游戏还是退出游戏。这里是通过使用gotoxy()函数,是上述的字样在想要显示的位置出现的。游戏结束的而显示信息如图603.4所示 图603.4游戏结束显示 604贪吃蛇游戏主干的设计 604.1游戏的初始化与加载的实现 游戏开始的时候,初始化蛇的长度为4节,行进方向为右。并

25、定义2维数组screengrid[row][col],该数组的作用是产生食物用。蛇开始移动的坐标是哦(2,2)。然后绘制围墙横的围墙用一排“=”显示,纵的围墙用一列“||”显示,这样游戏的框架就出来了,初始化游戏分数,并显示游戏的一些帮助,如按键设置等。 游戏初始化,包括蛇的初始长度,蛇初始行进的方向,游戏区域的显示。 游戏加载完成后,效果如图604.1所示 图604.1贪吃蛇的初始化 604.2食物随机产生的实现 对于前面提到过的一个二维数组screengrid[r

26、ow][col]这里要用到。用rand()函数生成2个随机生成的整数作为食物的横坐标和纵坐标,并判断食物是否出去围墙,如果在游戏区域外面,则对随机生成的横纵坐标进行修改。然后移动光标到此处坐标进行输入“*”操作。(用“*”代表食物)这里的c和r会在判断蛇头是否碰到食物用到。这里要应用到time.h这个头文件,用于产生随机数。 食物随机产生,如图602.2所示 图604.2随机食物产生 604.3蛇身的增长设计 对于蛇身增长的设计要考虑到蛇头的运行方向。如果蛇头向右行进,新增加

27、的蛇身横坐标不变,纵坐标增加1;如果蛇头向左行进,新增加的蛇身横坐标不变,纵坐标减1;如果蛇头向上行进,新增加的蛇身纵坐标不变横坐标减1;如果蛇头向下行进,新增加的蛇身纵坐标不变横坐标加1. 604.4蛇身的显示与移动的设计实现 对于蛇身的显示属于本程序设计的难点之一,因为蛇身是一个运动的物体,每个时刻的某一节所在的位置是变化的。就像一个动画过程,需要每隔一个固定的时间,对蛇进行显示一次,并将蛇尾部的一节消掉,使蛇头向前增进一节。这是一个动态的过程,当然设置的固定显示蛇身时间是能让人眼来得及反应的时间,也就是不能太快,否则在人看到就是频闪的一串了。其中add

28、segment()这个函数是用来为蛇头的前移赋值的。 604.5蛇的头部与物体的碰撞的设计实现 对于蛇的头部与物体碰撞的检测同样属于本程序设计的难点。 1、首先来关注蛇的额头不与游戏区域围墙的碰撞检测。如果检测到有碰撞,则游戏结束;否则游戏正常运行。这个是通过判断蛇的头部的横、纵坐标是否超过设定的额最大的界限或是低于最小的下限来判断的 如图604.5.1所示为碰壁情况

29、 图604.5.1为碰壁情况 2、其次,考虑蛇的头部是否与自己身体的某个部位产生的碰壁检测。如果检测到有碰壁,则游戏结束;否则游戏正常运行。这个是通过一个循环将蛇的头部的横、纵坐标值与每节蛇身(处蛇头外)知道蛇的尾部的横、纵坐标值与蛇的头部的横、纵值一致,则游戏结束;否则游戏正常运行。 如图604.5.2所示为蛇碰到自身的情况,蛇头与距蛇尾长度一致的蛇身处相撞。 图604.5.2蛇碰到自身的情况 3、最后,就是蛇的头部是否与食物碰撞的检测了。如果检测到没有碰到则游戏正常运行;否则首先将二维数组scr

30、eengrid[row][col]里有食物的那个数据元素清空,以便生成下一个食物。然后在游戏区域再随机产生一个食物,分数和蛇的长度分别增加1,最后在游戏区域下方显示分数。这里是通过令蛇的头部的横、纵坐标与先前产生食物时设置的2个变量进行比较判断的,这2个变量分别是r,c(r表示食物的横坐标,c表示食物的纵坐标),如果2者分别相等,则成功吞掉食物;否则游戏继续进行。 如图604.5.3所示为将要碰到食物的情况,食物用“*”表示 图604.5.3蛇碰到食物的情况 结论 通过理论与实践的完美结合,我的贪吃蛇游戏成功的编制完成了。虽然所编写的而这个游戏很简单,又

31、因为自己能力有限,游戏画面相当粗糙,没有经过美化的界面美感就谈不上了,只能用简陋形容了。但是值得骄傲的是整个游戏的编写是自己亲手,并且依靠自己的智慧独立完成的。在编写游戏过程中,遇到了许多难题,例如,蛇的头部与食物的检测问题,蛇的移动与显示问题,蛇的转向问题,食物的随机生成问题等等,这些个难题摆在面前,让人实在有些招架不住。经过查阅大量的文献资料阅读相关书籍,最后决定了采用分治算法的思想来对摆在面前的问题一一击破。在解决的是蛇的移动与显示问题的时候,通过大量的研究、实验与调试,试验过多种移动与显示的方法,最后决定了一种简单易用的算法。解决难题的时候,仿佛是拨了一层云,又见一层云,但是日光也越来

32、越闪耀了,最终看到了阳光,取得了成功。自己感觉通过这次学习研究,自己受益匪浅。不仅自己揭开了游戏程序神秘的面纱,而且在实际的程序编写与调试过程中,自己成长了不少,实战的能力提高了不少。万丈高楼平地起,能够编写复杂的游戏都是在编写简单的游戏基础上演变过来的能力。然而像贪吃蛇这样的简单游戏,就自然成了设计者的入门之选,因为其界面简单,操作、玩法一目了然,所以编写起来就不会很困难,而且需要考虑的问题也不用太多,就是蛇的显示、移动、碰撞3个游戏的主块,攻破这3个主块,程序就自然编写出来了,不会一开始就把游戏设计初学者拒之门外。编成之后就感觉就会油然而生,并使之对游戏设计产生强烈的兴趣。成为向游戏设计之

33、路成功迈进的第一步,同时对于VC++的运用水平也会上升,用起来会更加娴熟、得心应手。从易到难这是哟个准则,总之,贪吃蛇小游戏的研究会对增长程序阅读能力、程序编写能力等起到了意想不到的作用。当然,自己的程序不足之处到处都是,譬如可以讲画面设计的美观一点,可以设置一下游戏的难度,可以令算法的执行效率再高一点并不满足编写出来就行。字啊以后漫漫的研究学习道路上,我还有很远的璐要走,迎接我的是一个严峻的挑战。 参考文献 1.《C语言程序设计》. 朱立华 王立柱 . 人民邮电出版社。 2.《C语言程序开发—范例宝典》. 王娣 安剑 孙秀梅 . 人民邮电出版社。 3.《数据结构》.

34、 姜梅 赵坚 . 中国水利水电出版社 4.《高级语言C++程序设计》 . 刘璟 周玉龙 . 高等教育出版社 5.《C++实战操作100例》 . 蒋卫华 李伟华 . 清华大学出版社 6.《游戏设计基础》 . Emest Adams . 机械工业出版社 7.《游戏设计概论》 . 潜龙 . 科学出版社 ————致谢

35、 2012.6 附录 ——编码 #define N 200 #include #include #include #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0;/*得分*/ int gamespeed=50

36、000;/*游戏速度自己调整*/ struct Food { int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ }food;/*食物的结构体*/ struct Snake { int x[N]; int y[N]; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/ }snake; void Init(void);/*图形驱动*/ void Close(void);/*图形结束*/ void DrawK(vo

37、id);/*开始画面*/ void GameOver(void);/*结束游戏*/ void GamePlay(void);/*玩游戏具体过程*/ void PrScore(void);/*输出成绩*/ /*主函数*/ void main(void) { Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/ } /*图形驱动*/ void Init(void) { int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tc"); cleard

38、evice(); } /*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/ void DrawK(void) { /*setbkcolor(LIGHTGREEN);*/ setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ for(i=50;i<=600;i+=10)/*画围墙*/ { rectangle(i,40,i+10,49); /*上边*/ rectangle(i,451,i+10,460);/*下边*/ } for(i=40;i<=450;i+=10) {

39、 rectangle(50,i,59,i+10); /*左边*/ rectangle(601,i,610,i+10);/*右边*/ } } /*玩游戏具体过程*/ void GamePlay(void) { randomize();/*随机数发生器*/ food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life=0;/*活着*/ snake.direction=1;/*方向往右*/ snake.x[0]=100;snake.y[0]=100;/*蛇头*/ snake.x[1]=110;snake.y[1]=100; snake.nod

40、e=2;/*节数*/ PrScore();/*输出得分*/ while(1)/*可以重复玩游戏,压ESC键结束*/ { while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/ { if(food.yes==1)/*需要出现新食物*/ { food.x=rand()%400+60; food.y=rand()%350+60; while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++; while(food.y%10!=0) food.y++; food.yes=0;/*画面上有食物了*/

41、 } if(food.yes==0)/*画面上有食物了就要显示*/ { setcolor(GREEN); rectangle(food.x,food.y,food.x+10,food.y-10); } for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ { snake.x[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; } /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) { case 1:snake.

42、x[0]+=10;break; case 2: snake.x[0]-=10;break; case 3: snake.y[0]-=10;break; case 4: snake.y[0]+=10;break; } for(i=3;i

43、<55||snake.x[0]>595||snake.y[0]<55|| snake.y[0]>455)/*蛇是否撞到墙壁*/ { GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/ } if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break; if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/ { setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-1

44、0); snake.x[snake.node]=-20;snake.y[snake.node]=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10; PrScore();/*输出新得分*/ } setcolor(4);/*画出蛇*/ for(i=0;i

45、speed); setcolor(0);/*用黑色去除蛇的的最后一节*/ rectangle(snake.x[snake.node-1],snake.y[snake.node-1], snake.x[snake.node-1]+10,snake.y[snake.node-1]-10); } /*endwhile(!kbhit)*/ if(snake.life==1)/*如果蛇死就跳出循环*/ break; key=bioskey(0);/*接收按键*/ if(key==ESC)/*按ESC键退出*/ break; else if(key==UP&&snake.direction!=4) /*判断是否往相反的方向移动*/ snake.direction=3; else if(key==RIGHT&&snake.direction!=2) snake.direction=1; else if(key==LEFT&&snake.direction!=1) snake.directi 25

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服