贪吃蛇的实现
先实现主界面,后续将会不断完善。(逐渐添加更多的功能)
test.c
#define _CRT_SECURE_NO_WARNINGS
#include"snake.h"
void Test() {
Snake snake = { 0 };//创建贪吃蛇
//1.游戏开始 - 初始化游戏
GameStart(&snake);
//2.游戏运行 - 游戏的正常运行过程
//GameRun(&snake);
//3.游戏结束 - 游戏的善后(释放资源)
//GameEnd(&snake);
}
int main() {
//设置程序本地化
setlocale(LC_ALL, "");
Test();
return 0;
}
snake.c
#define _CRT_SECURE_NO_WARNINGS
#include"snake.h"
//设置光标的位置
void SetPos(short x,short y) {
COORD pos = { x,y };
HANDLE hOutput = NULL;
//获取标准输出的句柄(用来表示不同设备的数值)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
//设置标准输出上光标的位置为pos
SetConsoleCursorPosition(hOutput, pos);
}
void WelComeToGame() {
//定位光标
SetPos(40, 15);
printf("欢迎来到贪吃蛇小游戏\n");
SetPos(40, 25);
system("pause");//pause为暂停命令
}
void GameStart(pSnake ps) {
//控制台窗口的设置
system("mode con cols=100 lines=30");
system("title 贪吃蛇");
//光标隐藏掉
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
//隐藏光标操作
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOutput, &CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false;//隐藏控制台光标
SetConsoleCursorInfo(hOutput, &CursorInfo);//设置控制台光标状态
//打印欢迎界面
WelComeToGame();
}
snake.h
#pragma once
#include<locale.h>
#include<stdlib.h>
#include<Windows.h>
#include<stdbool.h>
#include<stdio.h>
enum GAME_STATUS {
OK,
END_NORMAL,
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 DIRECTION _Dir;//描述蛇的方向
enum GAME_STATUS _Status;//游戏的状态
}Snake, *pSnake;
//1.游戏开始 - 初始化游戏
void GameStart(pSnake ps);
//2.游戏运行 - 游戏的正常运行过程
void GameRun(pSnake ps);
//3.游戏结束 - 游戏的善后(释放资源)
void GameEnd(pSnake ps);
//游戏开始的欢迎界面
void WelComeToGame();