写贪吃蛇前,需要了解以下WIN32 API接口
(64位环境是兼容WIN32的,不要想WIN64 API了,没有这个东西)
包括窗口设置,光标设置,按键检测
直接复制粘贴就可以自己修改参数调试运行
windows设备输入编码表:虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
//#include<stdlib.h>
#define keypress(vkey)( (GetAsyncKeyState(vkey) & 1 ) ? 1 : 0 ) //宏定义
int main()
{ // ********WIN32 API********
//都在window.h里→→→
// ********控制台窗口大小调整与窗口标题********
//1.
// 在控制台/cmd中用指令调整窗口大小
//mode con cols = int lines = int; 两个int代表两个整肃
//在控制台/cmd中用指令调整窗口标题
// title name 例如:title 洛天依
//
//2.在源码中调整窗口大小与标题
system("mode con cols=40 lines=30");//cols是横坐标,按字节算,lines是纵坐标,按行算
system("title 洛天依"); //title 后加任意字符串
system("pause"); //暂停
// ********控制台句柄/控制权限********
//
//GetStdHandle,win API函数,获取一个控制台句柄,用来识别不同设备/窗口,相当于是这个控制台的手柄,函数有了这个手柄才能控制
//例如想要控制这个控制台的光标,就必须获取这个控制台的权限
//GetStdHandle的参数:STD_INPUT_HANDLE/STD_OUTPUT_HANDLE/STD_ERROR_HANDLE
HANDLE hand = NULL; //windows.h
hand = GetStdHandle(STD_OUTPUT_HANDLE);
//hand就是控制台的输出句柄
//GetConsoleCursorInfo获取控制台光标大小和可见性信息
//BOOL WINAPI GetConsoleCursorInfo(句柄,一个PCONSOLE_CURSOR_INFO结构体的指针,结构体里包含光标信息);
//这个结构体如下
//struct _CONSOLE_CURSOR_INFO
//{
// DWORD dwSize; //控制台光标高度百分比
// BOOL bvisible; //控制台光标可见性 true/false
//};
CONSOLE_CURSOR_INFO posi = { 0 };//定义一个光标信息结构体变量hand
GetConsoleCursorInfo(hand,&posi); //获取光标信息
printf("光标高度为:%d\n光标可见性:%d\n", posi.dwSize, posi.bVisible); //查看光标结构体信息
Sleep(2000); //睡眠
posi.dwSize = 50;
SetConsoleCursorInfo(hand, &posi); //传入光标信息
Sleep(2000);
posi.bVisible = false;
SetConsoleCursorInfo(hand, &posi); //隐藏光标
Sleep(3000);
// ********光标的定位********
//
// COORD是WIN32 API定义的一个结构体类型,内部有光标的坐标信息
// 内部结构如下
// typedef struct _COORD
// {
// SHORT X; //横坐标
// SHORT Y; //纵坐标
// }COORD,*PCOORD; //这里的*PCOORD与下面的代码意义相同
// typedef COORD* PCOORD; //即 把结构体的指针类型COORD* 定义为PCOORD
COORD position = { 17,15 }; //必须包含windows.h
//SetConsoleCursorPosition(handle,COORD position)
//用于设定光标位置,handle为句柄,position为COORD结构体
SetConsoleCursorPosition(hand,position);//将position里面的坐标信息传到hand里
printf("洛天依\n"); //在坐标17,51处开始打印
system("pause"); //暂停
// ********获取输入设备的输入信息********
//
// short GetAsyncKeyState(int keydata) //async异步,非同步
// 获取按键状态,参数为每个输入键的对应编码(包括鼠标)
// 返回值为一个short,即16bit。如果该返回值的最高位是1则为按下状态,0是抬起状态
// 最低位是1表示这个键被按过
// 定义一个宏来判断一个键是否按过 转到第5行的宏定义
// #define keypress(vkey) ((GetAsyncKeyState(vkey))&1)=1?1:0 //宏定义最后不要加“;”
// vkey编码表:https://learn.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes
short vkey = 0;
//数字键盘按下测试
while (1)
{
if(keypress(0x60))
{
printf("按下了0\n");
}
if (keypress(0x61))
{
printf("按下了1\n");
}
if (keypress(0x62))
{
printf("按下了2\n");
}
if (keypress(0x63))
{
printf("按下了3\n");
}
if (keypress(0x64))
{
printf("按下了4\n");
}
if (keypress(0x65))
{
printf("按下了5\n");
}
if (keypress(0x66))
{
printf("按下了6\n");
}
if (keypress(0x67))
{
printf("按下了7\n");
}
if (keypress(0x68))
{
printf("按下了8\n");
}
if (keypress(0x69))
{
printf("按下了9\n");
}
}
//←←←都在windows.h里
return 0;
}
输出是这样的: