贪吃蛇——C语言实现
贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏,也就是实现贪吃蛇的基本功能,比如在地图中,用“↑↓←→”控制移动蛇的方向,吃掉食物之后,蛇身体会变长等等。。。。
首先我们得分析,游戏中我们会碰见的一些情况。
①蛇的部分,蛇的身子是一节一节的,此时最容易联想到的数据结构就是顺序表,链表,如果把蛇比做顺序表或者链表,在之后吃到食物的时候,身子肯定会变长,这就涉及到插入的操作,所以为了更高的效率,我们用链表实现我们的蛇的部分,最初我们把蛇身子按照四个结点打印在屏幕。
②蛇的移动,在屏幕上面蛇的移动看起来是整个身子向前方平移一个单位,但是其原理是我们在屏幕的另一个地方把蛇从新打印一遍,又把之前的蛇身子去除掉。
③食物的产生,随机的在地图中产生一个节点,在蛇的头坐标和食物的坐标重复的时候,食物消失,蛇的身子加长,也就是蛇的节点数增加一个。
④蛇在其中的几种状态,正常状态:蛇头节点的坐标没有和墙的坐标以及自己身子的坐标重合,
被自己杀死:蛇头的坐标和蛇身子的坐标重合,
撞墙:蛇头的坐标和墙的坐标重合。
下面我们给出代码,在代码中解释整个游戏的简单运行
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <memory.h>
#include <string.h>
#define FOOD "█"//我们把蛇身子和食物,以及地图用黑框框表示,定义为宏
//蛇初始位置的坐标
#define INIT_X 24
#define INIT_Y 2
//设置光标位置,之后会使用这个函数来进行打印蛇身子,食物,地图等
void SetPos(int x,int y){
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//把标准输出的句柄得到,并交给变量handle,
COORD pos = {0};
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle,pos);//设置handle的输出位置,
}
//画地图
void DrawMap(void){
int i;
for (i=0;i<58;i+=2)//画出地图的上边界,在控制界面每一个汉字,占两位,所以每次i+2
{
SetPos(i,0);
printf(FOOD);
}
for (i=0;i<58;i+=2)//画出地图的下边界
{
SetPos(i,26);
printf(FOOD);
}
for (i=0;i<26;i++)//