目录
第三部分:核心功能实现(snake_functions.c)
第一部分:常量和枚举定义(snake.h)
#pragma once
#include<locale.h>
#include<stdlib.h>
#include<stdio.h>
#include<windows.h>
#define false (0)
#define true (1)
#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,
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;
第二部分:主函数与测试入口(main.c)
#define _CRT_SECURE_NO_WARNINGS 1
#include"snake.h"
void test()
{
int ch = 0;
do
{
//创建贪吃蛇
Snake snake = { 0 };
GameStart(&snake);//游戏初始化
GameRun(&snake);//游戏过程
GameEnd(&snake);//游戏结束
SetPos(20, 15);
printf("再来一局吗?(Y/N):");
ch = getchar();
getchar();//清理\n
} while (ch == 'Y' || ch == 'y');
}
int main() {
//修改适配本地中文环境
setlocale(LC_ALL, "");
test();//贪吃蛇游戏测试
SetPos(0, 27);
return 0;
}
第三部分:核心功能实现(snake_functions.c)
SetPos()函数
- 功能: 定位控制台光标位置。
void SetPos(int x,int y)
{
//获得设备句柄
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
//根据句柄设置光标的位置
COORD pos = { x, y };
SetConsoleCursorPosition(handle, pos);
}
WelcomeToGame() 函数
- 功能: 输出欢迎界面信息。
void WelcomeToGame()
{
//打印欢迎信息
SetPos(35,10);
printf("欢迎来到贪吃蛇小游戏\n");
SetPos(38, 20);
system("pause");
system("cls");
//打印介绍信息
SetPos(15, 10);
printf("用 ↑ ↓ ← → 来控制蛇的移动,F3是加速,F4是减速\n");
SetPos(15, 11);
printf("加速能得到更高的分数");
SetPos(38, 20);
sys