#简易贪吃蛇(c语言)
###贪吃蛇游戏是指在规定的方框内,通过操控键盘上的 ↑ ↓ ← → 键 来进行贪吃蛇的方向控制。在方框内吃掉随机出现的食物来延长蛇的身体。
###需要的头文件及函数原型
#ifndef __SNAKE_H__
#define __SNAKE_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define WALL "X" //墙壁符号
#define FOOD "O" //蛇的符号
#define INIT_X 20 //初始化蛇的位置 X坐标
#define INIT_Y 20 //初始化蛇的位置 Y坐标
typedef int SDataType;
typedef struct SnakeNode {
int x;//节点的x坐标
int y;//节点的y坐标
struct SnakeNode * next;
}SnakeNode ,*pSnakeNode;
enum Direction {
UP = 1,
DOWN,
LEFT,
RIGHT,
};//蛇当前运行方向状态
enum State
{
OK, //存活
NORMAL_END, //按esc正常退出
KILL_BY_WALL,//撞到墙壁死亡
KILL_BY_SELF,//撞到蛇身死亡
};//蛇的状态
typedef struct Snake
{
SnakeNode *psnake;// 蛇的头结点
int TotalScore; //总分数
int AddScore; //分数增加比
int SleepTime; //蛇的运行速度(电脑刷新间隔)
enum Direction Dir; //蛇当前所处的方向状态
enum State Status; //社当前的状态
SnakeNode *pFood; //食物所处的位置坐标
}Snake , *pSnake;
//蛇结构体
void GameStart(pSnake ps);//游戏开始函数
void InitSnake(pSnake ps);//初始化蛇函数
void SetPos(int x, int y);//运用控制台命令设置节点出现的位置
void PrintMap(); //打印地图
pSnakeNode BuyNode(); //生成一个节点
void CreateSnake(pSnake ps);//创建一个蛇
void CreateFood(pSnake ps);//创建一个食物节点
void GameRun(pSnake ps); //游戏运行函数
void Pause(); //游戏暂停函数
int HasNextNode(pSnakeNode pf, pSnakeNode pn);//判断蛇头所指向的下一个节点是不是食物节点
void EatFood(pSnake ps, pSnakeNode pn);//进食食物使得整体延长
void NoFood(pSnake ps, pSnakeNode pn); //没有食物节点向蛇头方向运行
void SnakeMove(pSnake ps);//蛇的方向操作函数
void helpinfo(pSnake ps); //当前状态
void KillByWall(pSnake ps);//被墙撞死
void KillBySelf(pSnake ps);//蛇吃自己
void GameEnd(pSnake ps); //游戏结束释放空间,打印结果
#endif//__SNAKE_H__
//test.c
#include "Snake.h"
void test()
{
Snake ps;
GameStart(&ps);
GameRun(&ps);
GameEnd(&ps);
}
int main()
{
test();
return 0;
}
##函数实现分析
#include "Snake.h"
void InitSnake(pSnake ps)
//初始化蛇函数
{
ps->AddScore = 10;
ps->Dir = UP;
ps->SleepTime = 200;
ps->TotalScore = 0;
ps->psnake = NULL;
ps->Status = OK;
}
void SetPos(int x, int y)
//运用控制台命令设置节点出现的位置
{
COORD pos;
HANDLE handle;
pos.X = x;
pos.Y = y;
handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(handle,pos);