用C语言写贪吃蛇游戏的初探

贪吃蛇是一款经典的游戏,其基本玩法是通过键盘输入控制蛇上下左右四个方向移动,在撞到墙或自身时死亡。由于是初次尝试,先不考虑食物的产生。吃食物并身体延长这两个问题。
首先,我们先要有个框架,即实现上上述功能要有哪些函数。首先,先要表示边框(蛇的移动范围)及蛇,然后要设定一个死亡的条件,在没有死亡的条件下,读入指令控制蛇的移动,并输出相应图像。每次输出完要清空屏幕再输出下一次的图像。
根据以上这些功能,我们使用这几个函数:gameover、printmap、move。其功能从函数名就可以看出来,主函数如下图:
这里写图片描述

首先是gameover函数,用于设定蛇的死亡,即满足“蛇触碰墙壁或自身时死亡”这个条件时蛇死亡,游戏结束(不再接受指令),并输出“game over”。
在死亡后,需要输出game over,然后不再读入指令。这里我们需要一个flag,将其命名为running,开始时为1,当且仅当其为1时读入指令,而当gameover函数被调用(即死亡)时,其值变为0。因此这个函数很简单,只有两行,关键是什么时候调用它,这以蛇的表示为基础,后面会写到。

接下来是printmap函数。首先,我们先要设定一个蛇移动的范围,我们不妨用一个二维数组表示,其边框用“*”围成,中间的空白部分(空格)可供蛇移动。然后,我们用H表示蛇头,X表示蛇身,这样比较清晰直观,初步设定蛇的长度为5,初始位置位于左上角。这样我们只需打印这个二维数组就可表示图像了,因此这个函数也非常简单,只是需要注意每次打印前要清空前面的。
这里写图片描述

输入、输出都确定好了,接下来便是最重要的中间处理——move函数(控制蛇的移动的)了。我们需要表示蛇的位置。其身上的每个点对应二维数组上的一个座标。可以想见,蛇每次移动,相当于蛇头沿所指定的方向走一步,留出的空位(原来的蛇头位置)由最后一个点补上。因此我们可以将蛇头位置及上次蛇头位置分别记录,然后剩余的身体部分有一个数组表示,数组的顺序是蛇身从前到后的顺序,每移动一次,先记录下原蛇头的位置,再移动蛇头,最后蛇身数组第n个元素为原来数组的(n+1)个元素,原蛇头位置为新数组的第一个元素,这样相当于抛弃了蛇尾,剩下的蛇身顺次往前移,之前的蛇头退化为新的蛇尾,实现了前面说到的移动特征,并能够一直按规律移动(每次移动不改变蛇头、蛇身表示的结构、次序)。输入指令移动实际上就是移动蛇头,因此用一个switch循环即可。需要注意的是,每次移动完,要判断蛇头的新位置是否为空白,若不是,则说明不是撞到墙就是撞到自己身上了,此时应该调用gameover函数,若没有死亡才照常继续。代码如下图:
这里写图片描述
这里写图片描述

至此一个简化版的贪吃蛇就初见雏形了,至于吃金币及蛇身变长则留到后面讨论。(一下为运行结果):

这里写图片描述

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