实现功能:
增速——蛇每吃一次食物自身速度就是增加一次;
加速——每次按F1可增加一次速度,但不能超过最快速度;
减速——每次按F2可减缓一次速度,但不能小于自身原本的速度;
分数——每吃一次食物,分数会实时更新出来;
暂停——游戏中按空格键可以暂停,再按一次又开始游戏,如果按esc直接退出游戏。
RetroSnaker.h
#ifndef __RETROSNAKER_H__
#define __RETROSNAKER_H__
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
/*********宏定义区**************/
#define FOOD "■"
#define INIT_X 24 //蛇出生点
#define INIT_Y 10
#define INIT_SPEECH 500
#define MAX_SPEECH 100
#define INIT_LENTH 5 //初始长度
/**********枚举常量定义区*********/
enum DIRECTION
{
//行走方向
UP = 1,
DOWN,
LEFT,
RIGHT
};
enum Status
{
/*蛇的状态*/
OK, //活的
KILL_BY_SELF, //被自己弄死
KILL_BY_WALL //被墙弄死
};
/*********结构体定义区****************/
typedef struct node
{
/*蛇身节点*/
int x;
int y;
struct node* next;
}SnakeNode, *pSnakeNode;
typedef struct Snake
{
/*蛇本身*/
pSnakeNode _pSnake; //蛇头指针
pSnakeNode _food; //食物
enum DIRECTION _Dir; //行走方向
enum Status _Status; //蛇状态
int _SleepTime; //每走一步停的时间
int lenth; //蛇长度
}Snake, *pSnake;
/**********函数声明区******************/
void SetPos(int x, int y);//设置光标位置
void DrawMap();//画地图
void InitSnake(pSnake pSnake); //初始化蛇
void CreatFood(pSnake pSnake);//初始化食物
int NextHasFood(pSnake pSnake, pSnakeNode nNode); //判断有木有食物
void EatFood(pSnake pSnake, pSnakeNode nNode); //吃食物
void NoFood(pSnake pSnake, pSnakeNode nNode);//没食物
void SnakeMove(pSnake pSnake); //蛇移动
int KillByWall(pSnake ps); //判断是否被撞墙
int KillBySelf(pSnake ps); //判断是否蛇头碰到蛇身
void SnakeRun(pSnake ps); //蛇连续跑
int SnakeLenth(pSnake ps); // 蛇长度
#endif
RetroSnaker.c
#include "RetroSnaker.h"
void SetPos(int x, int y)//设置光标位置
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = { 0 };
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void DrawMap()//画地图
{
int i = 0;
for (i = 0; i < 58; 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++) //打印左边界
{
SetPos(0, i);
printf(FOOD);
}
for (i = 0; i <=