c语言课程设计 贪吃蛇设计 下载本文

详细设计与测试

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 贪吃蛇算法设计 Snake game : 1:初始化游戏,游戏界面的绘制、游戏速度的设置、食物产生 2:while 玩家不按退出键

3: if 玩家按下某方向键

4: 蛇身按照玩家按下方向移动

5: eles蛇身按照默认方向(右)移动 6: end if

7: if 蛇头碰到墙壁 8: 游戏结束 9; end if

10: if 蛇头碰到自身 11: 游戏结束 12: end if

13: if 蛇碰到食物

14: 蛇身增长、分数增加、产生新食物 15; end if 16: end whlile 17: 游戏结束

=============================================================

9

602.2程序流程图

游戏初始化界面设计,产生食物方向按键蛇行进方向为按下方向蛇正常移动碰壁撞到自己碰到食物蛇身增长,分数增加,在产生食物玩家没有按退出键游戏结束

602.2程序流程图

10

603光标移动的设计与实现

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

下面将光标移动应用到贪吃蛇游戏中

603.1显示水平围墙的实现

水平围墙就是在游戏区域中,限制蛇行动的上下界,即活动的对打边

界。这里用一系列“====”连续显示,直到设定的最大活动范围。

水平围墙如图603.1所示

11

图603.1水平围墙

603.2显示分数的实现

对于玩家的得分,是在游戏当中,玩家控制贪吃蛇每当吞掉一个食物,相应的分数就会增加一分。游戏结束时,分数会清零,再下一盘游戏中从0分开始计数

玩家的分数显示如图603.2所示

603.2分数显示图

603.3接受玩家按键信息的实现

为了接受来自键盘的信息,之力用到了conio.h这个头文件。通过一个

布尔函数kbhit()的真假来判断是否有按键被敲击,如果没有,游戏正常运行;否则通getch()得到那个char变量的按键信息,然后修改蛇的运动方向。

603.4游戏结束时显示信息的实现

当游戏介绍时,屏幕上要显示“Game over”的字样,还有“another game(y/n)?”的字样来让玩家选择继续游戏还是退出游戏。这里是通过使用gotoxy()函数,是上述的字样在想要显示的位置出现的。游戏结束的而显示信息如图603.4所示

图603.4游戏结束显示

12