By Tomas 2016.3.2
编程语言: C
程序介绍: 利用队列这个数据结构编写一个简单的贪吃蛇小游戏。
原理分析: 队列的特点就是先进先出(FIFO),我们就是利用他的这个特点来模拟一条贪吃蛇。我们首先考虑一下这个游戏需要哪些元素,然后怎么用终端模拟这些元素。
蛇:蛇在终端上的表示就是很多个字符连在一起就是蛇,比如: @@@@ 或者 2222222 都是一条蛇。然而,队列是有队头和队尾之分,那么用它表示的蛇也必须有蛇头和蛇尾。这个点很重要,就是需要用队尾表示蛇头,因为队列是先进先出的数据结构,蛇在移动的时候,他的尾巴要消失,然后需要在移动的方向上加上一段蛇,这样就能使蛇移动。在数据结构上来说就是队列的一个元素先出队列,然后再将一个元素人队。如图:
蛇的移动:
蛇一:
蛇二: 蛇一向下移动
尾巴消失
然后在下方添加一段蛇,这样蛇就向下移动了
蛇吃到食物:
看了蛇的移动,那么蛇吃到食物比移动更容易,直接将一段蛇添加到原来的蛇上面就好了,在数据结构上就是表现为一个元素进入队列的操作。如图:
蛇向下走一步就可以吃到食物了。
蛇吃到食物,变成三个节点。
以上是蛇正常游戏,那么接下来就是游戏结束的条件。
撞到边框: 边框就用坐标表示,然后在对应的坐标上输出字符。
撞到自己: 每走一步,就判断头的坐标是否与原来蛇的节点坐标重复,若重复则游戏结束。
以下是参考代码:
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#include<process.h>
#include<stdlib.h>
#include<time.h> //引用头文件
enum Diriction{
UP,DOWN,LEFT,RIG};
struct Snake{ //定义蛇的节点
int x;
int y;
struct Snake *next;
};
struct Serpent{
enum Diriction dir; //定义蛇的方向
int lenght; //定义蛇的长度
};
struct Food{
int a;
int b;
}; //定义食物的坐标
//全局变量,在全体函数都可以用的到的变量,在这只声明一次就可以了
struct Snake *head,*tail; //定义蛇头和蛇尾的指针,就相当于队列的头和尾,head是队头,tail是队尾
struct Food *food; //定义食物
struct Serpent *serpent; //定义蛇的方向和长度
int