C语言贪吃蛇需要用到的WIN32 API

 写贪吃蛇前,需要了解以下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;
}

 输出是这样的:

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值