一些造贪吃蛇所需要的冷门知识

win32 API

1.控制台:平时的那个黑框框,还有cmd即命令提示符

2.使用cmd命令设置控制台窗口的大小:30行,100列

mode con cols=100 lines=30

3.通过命令设置控制台窗口的名字

title 贪吃蛇

4.我们能够用C语言中的system函数来执行系统命令

2.3.4例:

system("mode con cols=100 lines=30);

system("title 贪吃蛇);

注:在程序结束后,名字会恢复原样

可以用这个:system("pause");//pause叫暂停(按任意键继续)

5.坐标(0,0)表示最左上角哪个地方(注:是左上角顶部!)

COORD是一个结构体,表示一个字符在控制台屏幕缓冲区上的坐标

COORD的声明:

typedef struct_COORD{

        SHORT X;

        SHORT Y;

}COORD, *PCOORD;

5.例:

COORD pos = { 40, 10 };(头文件:windows.h)

6.获取句柄:

HANDLE GetStdHandle(DWORD nStdHandle);

nStdHandle参数仅有下列三个

STD_INPUT_HANDIE标准输入设备

STD_OUTPUT_HANDIE标准输出设备

STD_ERROR_HANDIE标准错误设备

6.例:

HANDLE operate = NULL;

operate = GetStdHandle(STD_OUTPUT_HANDIE);

然后便可以通过operate来操作标准输出流了

7.隐藏光标所要知晓的知识:

(1.)
typedef struct _CONSOLE_CURSOR_INFO {
DWORD Size;
BOOL Visible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

Size是光标所占字符单元格的百分比

Visible是游标的可见性,默认为true

(2).

BOOL WINAPI GetConsoleCursorInfo

(  HANDLE               hConsoleOutput

   PCONSOLE_CURSOR_INFO lpConsoleCursorInfo );

第一个参数是句柄

二是上边那个结构体。

这个函数的功能是获取第一个参数所指向控制台中的光标信息,并放到第二个参数中去

(3).

BOOL WINAPI SetConsoleCursorInfo(
HANDLE hConsoleOutput,
const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo
);
第一个参数是句柄
二是上边那个结构体。
这个函数的功能是将第二个参数所指向的光标信息,放到第一个参数所指向控制台中去
(4).使用示例:
先造一个结构体:
CONSOLE_CURSOR_INFO cursor info = {0};
接着获取当前句柄的光标信息
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleCursorInfo(handle,&cursor_info);
再设置相关信息
cursor info.bVisible = false;
再将这个信息赋予句柄
SetConsoleCursorInfo(handle,&cursor_info);
完成
8.
在指定位置打印信息所需要掌握的知识:
(1).
COORD pos = { 20, 50 };
(2).
BOOL WINAPI SetConsoleCursorPosition(
HANDLE hConsoleOutput,
COORD pos
);
第一个参数是句柄
二是储存着坐标信息的变量(储存方式和上边那个一样)
(3).使用示例:
先造一个句柄
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
再存储坐标信息:
COORD pos = { 10, 20 };
再将pos弄进去
SetConsoleCursorPosition(handle, pos);
printf("haha");
(4).将光标坐标的修改造成一个函数
void My_SetPos(int x, int y)
{
	COORD pos = { x, y };
	HANDLE handle =  GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(handle, pos);
}

9.

SHORT GetAsyncKeyState(
int vKey
);
将键盘上每一个键的虚拟键值都传递给函数,函数通过返回值来分辨按键的状态。
GetAsyncKeyState 的返回值是short类型,在上⼀次调⽤ GetAsyncKeyState 函数之后,如果
返回的16位short数据当中,最高位是1,说明按键状态是按下,如果最高是0,说明按键状态是抬 起;如果最低位被置为1,则说明该按键被按过,否则为0。
9.例:
将9封装成一个宏:
#define KEY_PRESS(VK) ((GetAsyncKeyState(VK)&0x1) ? 1 : 0)
10.
●▼★■等都叫宽字符
要想输出这种字符那么要具备的知识:
(1.)首先要适配到本地环境
char* setlocale (int category, const char* locale);
setlocale 函数用于修改当前的地区,不仅可以针对⼀个类项修改,还可以针对所有类项。
setlocale 的第⼀个参数可以是前面说明的类项中的⼀个,这样的话每次只会影响⼀个类项,而如果第⼀个参 数是LC_ALL,就会影响所有的类项。
C标准给第⼆个参数仅定义了2种可能取值:“C”(正常模式)和“”(本地模式)
在任意程序执行开始,都会隐藏式执行调用:
setlocale(LC_ALL, "C");
当地区设置为"C"时,库函数按正常方式执行,小数点是⼀个点。
当程序运行起来后想改变地区,就只能显示调用setlocale函数。用""作为第2个参数,调用setlocale 函数就可以切换到本地模式,这种模式下程序会适应本地环境。比如:切换到我们的本地模式后就支持宽字符(汉字)的输出等
(2).打印
一个汉字也是一个宽字符
宽字符的打印用wprintf(),对应的占位符是%lc;
还有%ls;
(2).例:
setlocale(LC_ALL, "");
wchar_t ch1 = L'古';
wprintf(L"%lc\n", ch1);

打印宽字符串:

setlocale(LC_ALL, "");
wchar_t ch[20] = L"落魄谷中寒风吹";
wprintf(L"%s\n", ch);

(3).注:一个宽字符占两个正常字符的宽度

11.初始化建议:地图27行58列,(24,5)处出现蛇,连续5个节点

12.注意事项:蛇的身体节点和食物的x坐标都是偶数

13.SetPos坐标函数那里进行一个补充:

第一个参数是x,第二个是y,x指的是X轴的,即横着的坐标,而不是第几行

14.

VK_LEFT

0x25

LEFT ARROW 键

VK_UP0x26UP ARROW 键
VK_RIGHT0x27RIGHT ARROW 键
VK_DOWN0x28DOWN ARROW 键

选自:虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值