用队列写贪吃蛇(C语言版)

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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值