前言:
贪吃蛇是一个久负盛名的游戏,与俄罗斯方块和扫雷游戏相同都是非常经典的游戏
一.游戏相关知识
1.COORD
(1)说明:
控制台屏幕上的坐标,有两个参数x,y,分别对应着横纵坐标,(0,0)对应控制台屏幕左上角顶格位置
(2)声明:
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
2.GetStdHandle
(1)说明:
它用于从一个特定的标准设备中获得一个句柄,用来操作该设备(具体咋理解呢?就相当于你炒菜的肯定是要用锅的嘛,那既然要用锅,那就一定要用把手呗,通过该把手来操控这口锅,然后进行炒菜。这里的把手就相当与这里的句柄,必须你获得了该句柄才能对操作台屏幕上的某些信息进行操作)
(2)声明:
HANDLE WINAPI GetStdHandle(
_In_ DWORD nStdHandle
);
(3)参数:
STD_INPUT_HANDLE((DWORD)-10) |
标准输入设备。 最初,这是输入缓冲区 CONIN$ 的控制台。 |
STD_OUTPUT_HANDLE((DWORD)-11) |
标准输出设备。 最初,这是活动控制台屏幕缓冲区 CONOUT$ 。 |
STD_ERROR_HANDLE((DWORD)-12) |
标准错误设备。 最初,这是活动控制台屏幕缓冲区 CONOUT$ 。 |
由于我们是要向屏幕输出信息,所以这里我们对该函数的传参选择第二个参数 !!
3.CONSOLE_CURSOR_INFO
(1)说明:
是一个结构体,用来存储控制台屏幕上的光标的占比大小和可见性
(2)声明:
typedef struct _CONSOLE_CURSOR_INFO {
DWORD dwSize;
BOOL bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
4. GetConsoleCursorInfo
(1)说明:
用来获取有关控制台屏幕上的光标的占比和可见性的相关信息
(2)声明:
BOOL WINAPI GetConsoleCursorInfo(
_In_ HANDLE hConsoleOutput,
_Out_ PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
);
(3)参数:
第一个就是刚才的句柄 ,第二个是光标
5.SetConsoleCursorInfo
(1)说明:
对修改过后的光标信息进行设置
(2)声明:
BOOL WINAPI SetConsoleCursorInfo(
_In_ HANDLE hConsoleOutput,
_In_ const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
);
6.SetConsoleCursorPosition
(1)说明:
设置光标的位置(初始打印位置)
(2)声明:
BOOL WINAPI SetConsoleCursorPosition(
_In_ HANDLE hConsoleOutput,
_In_ COORD dwCursorPosition
);
7. GetAsyncKeyState
(1)说明:
获取键盘上按键的状态,调用函数时键是向上还是向下,以及上次调用 GetAsyncKeyState 后是否按下了该键。
(2)声明:
SHORT GetAsyncKeyState(
[in] int vKey
);
(3)参数:
这里的参数是虚拟键代码,传参可以传常数(VK_ESCAPE
),也可以传value(0x1B)。在该游戏会用到的虚拟键代码有:
VK_ESCAPE |
0x1B | ESC 键 |
VK_SPACE |
0x20 | 空格键 |
VK_LEFT |
0x25 | LEFT ARROW 键 |
VK_UP |
0x26 | UP ARROW 键 |
VK_RIGHT |
0x27 | RIGHT ARROW 键 |
VK_DOWN |
0x28 | DOWN ARROW 键 |
VK_F1 |
0x70 | F1 键 |
VK_F2 |
0x71 | F2 键 |
(4)使用方式:
检测按键状态,是看它返回值的最低位,最低位为1表示按下,为0表示没按下
#define KEY_PRESS(VK) (GetAsyncKeyState(VK) & 1) ? 1 : 0
8.setlocale
(1)说明:头文件为:<locale.h>
用于修改当前地区,可以针对⼀个类项修改,也可以针对所有类项
(2)声明:
char* setlocale (int category, const char* locale);
(3)参数:
第一个参数:该参数为类项,