游戏说明:
- 用 ↑ . ↓ . ← . → 来控制蛇的移动
- F3是加速,F4是减速,加速能获得更高分数,减速则得分降低
- 按空格键可实现暂停,暂停后按任意键继续游戏
- 按Esc键可直接退出游戏
- 游戏结束后可以选择继续或则退出
游戏运行展示:
贪吃蛇游戏当中蛇的移动速度可以进行调整,视频中为大家调整了适当的速度。
实现过程:
代码详解:
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <locale.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <stdbool.h>
#include <conio.h>
#include<string.h>
#define WALL L'■'
#define BODY L'●'
#define FOOD L'★'
//蛇默认的起始坐标
#define POS_X 24
#define POS_Y 5
#define KEY_PRESS(VK) ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )
//游戏的状态
enum GAME_STATUS
{
OK = 1,//正常运行
ESC, //按了ESC键退出,正常退出
KILL_BY_WALL,//撞墙
KILL_BY_SELF //撞到自身
};
//蛇行走的方向
enum DIRECTION
{
UP = 1,
DOWN,
LEFT,
RIGHT
};
//蛇身结点的定义
typedef struct SnakeNode
{
int x;
int y;
struct SnakeNode* next;
}SnakeNode, * pSnakeNode;
//贪吃蛇
typedef struct Snake
{
pSnakeNode pSnake;//维护整条蛇的指针,是指向蛇头
pSnakeNode pFood;//指向食物的指针
int Score;//当前累积的分数
int FoodWeight;//一个食物的分数
int SleepTime;//蛇休眠的时间,休眠的时间越短,蛇的速度越快,休眠的时间越长,蛇的速度越慢
enum GAME_STATUS status;//游戏当前的状态
enum DIRECTION dir;//蛇当前走的方向
//...
}Snake, * pSnake;
//颜色设置
void color(int c);
//定位控制台光标位置
void SetPos(int x, int y);
//游戏开始前的准备
void GameStart(pSnake ps);
//打印欢迎界面
void WelcomeToGame();
//绘制地图
void CreateMap();
//初始化贪吃蛇
void InitSnake(pSnake ps);
//创建食物
void CreateFood(pSnake ps);
//游戏运行的整个逻辑
void GameRun(pSnake ps);
//打印帮助信息
void PrintHelpInfo();
//蛇移动的函数- 每次走一步
void SnakeMove(pSnake ps);
//判断蛇头的下一步要走的位置处是否是食物
int NextIsFood(pSnake ps, pSnakeNode pNext);
//下一步要走的位置处就是食物,就吃掉食物
void EatFood(pSnake ps, pSnakeNode pNext);
//下一步要走