- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
贪吃蛇设计思路
《贪吃蛇》游戏设计思路我前一段时间写了个贪吃蛇,有位吧友求思路,而网上也没有类似的教程帖子(至少我当初没找到(-_-),我只找到了现成的代码……),于是乎,我就整理了一下自己的设计思路,写下了这篇东西,如果你是老鸟,有什么说错的地方还希望您具体指出来,毕竟我的功力还不深。。。。。。。。如果你是新手,大家一起交流探讨吧,我也算是刚入门的新手。在本帖最后,我会附上自己写的完整的程序代码,里面也有一些注释,以供大家参考。首先,看看我的贪吃蛇的程序框图。从图中可以看出,整个游戏就是一个大的循环,当判断蛇的生命值为0时就跳出循环游戏结束,否则继续游戏。常用的结构是:While (1){..........//游戏内容..........If (……)break;//满足游戏结束的条件时跳出循环结束游戏}解决了游戏的主体结构,接下来就是游戏的具体内容了。先来看看我们需要哪些变量;蛇的身体(链表,包含了蛇每一节的坐标,和生命值);食物(数组,两个元素,包含了食物的坐标);蛇的运动方向(整型,共四个值);首先,蛇的身体应该选用什么数据类型来存储呢?数组组是肯定不行的,因为数组的大小是固定的,你不知道你的蛇最终能达到多长(或许有高手能让蛇长到占满屏幕?),而且在数组的头部插入数据是很麻烦的一件事,你必须把所有的数据都往后移动一个元素才行。因此,此处我选用了链表来储存蛇的身体信息,(有的小伙伴要问了:什么是链表啊?这个请自行百度,我的个人看法是,链表就是对结构体的一种应用。话说我们学了一学期的C语言,老师也没讲链表之类的东西,不知道很正常,它应该属于数据结构这一门学科的内容吧。如果你不懂链表也没关系,数组完全可以代替它,只是在资源的利用上要浪费一点,在数据的插入与删除上要麻烦一点而已)。链表的一个节点应该包含哪些内容呢?首先是蛇的坐标x和y,然后是生命值(其实只有第一个节点能用上它,你也可以去掉它,然后另外单独定义一个全局变量如life来判断蛇的生死),最后是指向下一个节点的结构体指针。定义如下:struct snk{//蛇身体 int x;int y;int life;struct snk *link;};然后是食物:int food[2];//食物,用food[0]表示x坐标,用food[1]表示y坐标当然,食物必须定义为全局的。当然如果你有需要,还可以定义一个全局整型变量来保存积分:int fen=0;//积分需要的主要数据已经定义好,接下来是初始化。那么,就先来初始化蛇的身体,创建一个链表;struct snk *snake;//指向蛇链表头(第一个节点)的结构体指针 //声明两个个链表节点,初始化最开始的几节蛇身体snake=(struct snk *)malloc(sizeof(struct snk));snake-x=10;snake-y=10;snake-life=1;snake-link=(struct snk *)malloc(sizeof(struct snk));snake-link-x=10;snake-link-y=9;snake-link-x=10;snake-link-link=NULL;这里我只初始化了两节,你也可以多加几节,但是,最后别忘了把最后一个节点的link指针设为空,它标志着蛇的结尾,至于life,只需把第一个节点初始化为非零值即可。接下来是初始化食物,为了能够随机生成食物,我们需要用到time.h为我们提供的随机函数,rand()和srand();为了方便后面的食物生成,我们把食物生成单独做成一个函数mkfood(),想一想,它需要哪些参数,它的返回值是什么?为了防止生成的食物的坐标与蛇的身体重合,所以mkfood函数需要知道蛇的状态,食物是全局变量,因此函数不需要返回值,因此mkfood函数的函数首部应该是void mkfood(struct snk *p);//产生食物每次调用它都需要用srand函数重设随机数种子,然后用rand函数产生随机数,分别赋值给food[0]和food[1]作为食物的x坐标和y坐标。在这之后,需要遍历一次蛇的每一个节点,并把它们与食物的坐标比较,如有相同的,既产生的食物和蛇的身体重复了,就必须重新设定食物的坐标,这里我用的是递归调用mkfood函数来重新设定食物坐标。如果你用递归方法来重设食物坐标,不得不提的是当你在设定随机数种子时不要使用time()函数,因为time函数只能精确到秒,一旦食物与蛇身体重复,就会递归调用mkfood函数,此时时间还远远不足一秒,所以导致随机数种子还是和原来的一样,产生的随机数也和原来一样,还是和蛇身体重复,如此循环往复的递归调用,以现在的CPU运算能力,一秒钟之内可以进行的运算次数是相当惊人的,最终导致栈的溢出,程序崩溃。。。。所以应该
您可能关注的文档
最近下载
- 柯林斯词频分级词汇(一到五星).docx VIP
- 母婴护理知识大全课件.pptx
- GB∕T30146-2023 《安全与韧性 业务连续性管理体系 要求》“8.1运行策划和控制”理解与实施指导材料(2024A0).docx VIP
- GB∕T30146-2023 《安全与韧性 业务连续性管理体系 要求》“8.3业务连续性策略和解决方案”理解与实施指导材料(2024A0).docx VIP
- GB∕T30146-2023 《安全与韧性 业务连续性管理体系 要求》“8.2 业务影响分析和风险评估”理解与实施指导材料(2024A0).docx VIP
- GB∕T30146-2023 《安全与韧性 业务连续性管理体系 要求》“8.5演练策划”理解与实施指导材料(2024A0).docx VIP
- 中考现代文阅读——邓宗良《母亲的叶搭饼》.docx VIP
- GB∕T30146-2023 《安全与韧性 业务连续性管理体系 要求》“8.6业务连续性文件和能力评价”理解与实施指导材料(2024A0).docx VIP
- 华住加盟管理指导手册.pdf VIP
- (5MWh方案)--【314电芯液冷】100MW200MWh储能方案书.docx
文档评论(0)