C语言贪吃蛇的完善

在上次尝试建立了一个贪吃蛇游戏的雏形(蛇的长度固定、没有金币吃,其余与正常规则相同)后,今天打算对其进行修改以实现上述两项功能。
下面是上次的源代码,经过分析我发现,只需增加一个在空白位置随机产生金币的函数,并修改move函数以使蛇吃了金币后长度加一:
这里写图片描述
这里写图片描述

首先,我们需要增加一个在空白位置随机产生金币的函数food。先定义foodx 、foody以表示金币的座标,然后使x、y是边框范围内随机产生的数,最后,加上一个条件:产生的位置必须是空格,否则继续生成随机位置直到该位置为空格,
在该位置放置金币,用“S”表示。
代码如下图:
这里写图片描述
之后需要对move函数稍作修改。首先,之前的判断条件是只要新产生的蛇头位置不为空格即game over,现在要改为新产生的蛇头位置既不是空白又不是金币。在游戏没有结束的情况下,需要分两种情况:第一,新蛇头位置为空白,即没吃金币,则和之前的版本完全一样,照搬即可。第二,新蛇头位置为”S”,即吃了金币,此时与之前的区别是蛇的长度加一,加的那一节长度到了哪里去呢?是加到了蛇尾处。因为原先是蛇的长度不变,因此每一段的要往前走一步取代之前它前面那一段的位置,因而原先的最后一个位置被淘汰,退化为空格。而现在吃了金币后长度加一,可理解为金币变成了新蛇头,后面的都不变,因此在原先基础上,把给原来最后一段赋值为空格改为赋值为“X”,即蛇身。修改后move函数代码如下图:
这里写图片描述
这里写图片描述
此外还有一点需要注意:之前因为蛇身长度恒为4,因此存放蛇身位置的数组大小为4,但这时因为蛇身可能增长,所以数组需要留出些富裕以容纳增加的长度,这次设计的空间为10*11的,我们不妨就把这个数组的大小设为200,这样就绰绰有余了。
这时字符游戏贪吃蛇的改良就完成了,现在它已经有点贪吃蛇的样子了:
这里写图片描述
这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章