目录
GitHub仓库
本项目已在GitHub上开源,不要吝啬你的小星星哦!亲!
GitHub - Themberfue/GreedySnake: Console-based GreedySnake mini-game
win32 API
在使用C语言实现贪吃蛇小游戏之前,由于其是通过控制台实现的,在之前还需了解一些win32 API的相关知识。
所谓win32 API即为Microsoft 32位平台的应用程序编程接口(Application Programming Interface)。所有在Win32平台上运行的应用程序都可以调用这些函数
在使用这些函数接口前,建议先更改如下选项
1.呼出cmd命令台窗口(输入win+r后输入cmd)。
2.在窗口上处右键点击“属性”,找到“启动”选项卡。
3.找到“默认终端应用程序”选项,将其改为“让Windows决定”或者“Windows控制台主机”。
ps:建议改为“Windows控制台主机”。
控制台程序
平常我们运行起来的黑框就是控制台程序,我们可以用cmd命令来改变控制台的一些相关参数,也可以用C语言来改变,这里就要用到system函数来进行修改,在使用system函数前,还需包含头文件<stdlib.h>。
system("mode con cols=100 lines=30");
上述代码表示将控制台的行改为30行,列为100列
我们还可以用system函数改变控制台左上侧的标题
system("title 贪吃蛇小游戏");
将上述代码结合起来就是这样的一个C语言代码
#include <stdio.h>
#include <stdlib.h>
int main() {
system("mode con cols=100 lines=30");
system("title 贪吃蛇小游戏");
getchar();
return 0;
}
将代码运行起来就是如下效果(这里的getchar()是为了防止程序立即结束导致title不显示)
控制台屏幕上的坐标COORD

typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
给坐标赋值:
COORD pos = { 20, 15 };
GetStdHandle 函数
HANDLE GetStdHandle(DWORD nStdHandle);
实例:
HANDLE hOutput = NULL;
//获取标准输出的句柄(⽤来标识不同设备的数值)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleCursorInfo 函数
BOOL WINAPI GetConsoleCursorInfo(
HANDLE hConsoleOutput,
PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
);
HANDLE hOutput = NULL;
//获取标准输出的句柄(⽤来标识不同设备的数值)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOutput, &CursorInfo);//获取控制台光标信息
CONSOLE_CURSOR_INFO 结构
typedef struct _CONSOLE_CURSOR_INFO {
DWORD dwSize;
BOOL bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo 函数
BOOL WINAPI SetConsoleCursorInfo(
HANDLE hConsoleOutput,
const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
);
实例:
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
//影藏光标操作
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOutput, &CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo(hOutput, &CursorInfo);//设置控制台光标状态
SetConsoleCursorPosition 函数
BOOL WINAPI SetConsoleCursorPosition(
HANDLE hConsoleOutput,
COORD pos
);
实例:
COORD pos = { 10, 5};
HANDLE hOutput = NULL;
//获取标准输出的句柄(⽤来标识不同设备的数值)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
//设置标准输出上光标的位置为pos
SetConsoleCursorPosition(hOutput, pos);
//设置光标的坐标
void SetPos(short x, short y)
{
COORD pos = { x, y };
HANDLE hOutput = NULL;
//获取标准输出的句柄(⽤来标识不同设备的数值)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
//设置标准输出上光标的位置为pos
SetConsoleCursorPosition(hOutput, pos);
}
getAsyncKeyState 函数
SHORT GetAsyncKeyState(
int vKey
);
#define KEY_PRESS(VK) ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 )
#include <stdio.h>
#include <windows.h>
int main()
{
while (1)
{
if (KEY_PRESS(0x30))
{
printf("0\n");
}
else if (KEY_PRESS(0x31))
{
printf("1\n");
}
else if (KEY_PRESS(0x32))
{
printf("2\n");
}
else if (KEY_PRESS(0x33))
{
printf("3\n");
}
else if (KEY_PRESS(0x34))
{
printf("4\n");
}
else if (KEY_PRESS(0x35))
{
printf("5\n");
}
else if (KEY_PRESS(