前言
这是我自己做的第五个小项目---贪吃蛇游戏(必备知识篇)。后期我会继续制作其他小项目并开源至博客上。
上一小项目是通讯录项目,没看过的同学可以去看看:
有关通讯录的小项目
https://blog.csdn.net/hsy1603914691/article/details/142502235?spm=1001.2014.3001.5501
Win32 API知识
1. Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外,它同时也是⼀个很大的服务中心,调用这个服务中心的各种服务(每⼀种服务就是⼀个函数),可以帮应用程序达到开启 视窗、描绘图形、使用周边设备等目的。
2. 由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。
控制台程序(CMD)
必要指令
1. 我们可以使用cmd命令来设置控制台窗口的长宽:设置控制台窗口的大小,100列,30行。
mode con cols=100 lines=30
2. 也可以通过命令设置控制台窗口的名字。
title 贪吃蛇
3. 需要在VS中设置成:默认终端程序让windows决定。
在VS中调用实现
1. 使用system()函数可以用来执行系统命令。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main() { system("mode con cols=100 lines=30");//调整CMD行与列 system("title 贪吃蛇");//修改CMD的标题 system("pause");//暂停观察 return 0; }
COORD结构体
1. COORD 是Windows API中定义的⼀个结构体。
2. 表示⼀个字符在控制台屏幕幕缓冲区上的坐标,坐标系 (0,0) 的原点位于缓冲区的顶部左侧单元格。
2. 需要引入<windows.h>头文件。
#include <windows.h> int main() { COORD pos1 = { 0,0 }; COORD pos2 = { 5,10 }; return 0; }
GetStdHandle函数
1. GetStdHandle是⼀个Windows API函数。
2. 它⽤于从⼀个特定的标准设备中取得⼀个句柄,使⽤这个句柄可以操作设备。
3. 句柄:数值上,是一个32位无符号整型值;逻辑上,相当于指针的指针;形象理解上,是Windows中各个对象的一个唯一的、固定不变的ID;作用上,Windows使用句柄来标识诸如窗口、位图、画笔等对象,并通过句柄找到这些对象。
HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出的句柄,存放在houtput中。
CONSOLE_CURSOR_INFO结构体
1. 成员1:dwSize,由光标填充的字符单元格的百分比,此值介于1到100之间。
2. 成员2:bVisible,光标的可见性。 如果光标可见,则此成员为 TRUE。
typedef struct _CONSOLE_CURSOR_INFO { DWORD dwSize; BOOL bVisible; } CONSOLE_CURSOR_INFO; CONSOLE_CURSOR_INFO CursorInfo;//创建一个CONSOLE_CURSOR_INFO的结构体 CursorInfo.bVisible = false; //隐藏控制台光标
Get/SetConsoleCursorInfo函数
1. 获取/设定指定的控制台屏幕缓冲区的光标大小和可见性的信息。
2. 先获取,再设定。
HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出的句柄,存放在houtput中 CONSOLE_CURSOR_INFO CursorInfo; //定义一个光标信息的结构体 GetConsoleCursorInfo(houtput, &CursorInfo); //获取控制台光标信息 CursorInfo.bVisible = false; //隐藏控制台光标 SetConsoleCursorInfo(hOutput, &CursorInfo); //设置控制台光标状态
SetConsoleCursorPosition函数
1. 设置指定控制台屏幕缓冲区中的光标位置。
2. 我们将想要设置的坐标信息放在COORD类型的变量pos中,并且调用SetConsoleCursorPosition函数将光标位置设置到指定的位置。
HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出的句柄,存放在houtput中 COORD pos2 = { 5,10 }; //设定我们想要定位的坐标 SetConsoleCursorPosition(houtput, pos2); //将光标定位到pos2
GetAsyncKeyState函数
1. 将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态,GetAsyncKeyState 的返回值是short类型。
2. 如果返回的16位的short数据中,最高位是1,说明按键的状态是按下;如果最高是0,说明按键的状态是抬起。
3. 如果最低位被置为1则说明,该按键被按过,否则为0。
#include <stdio.h> #include <windows.h> #define KEY_PRESS(VK) ( (GetAsyncKeyState(VK) & 0x1) ? 1 : 0 ) 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(0x36)) { printf("6\n"); } else if (KEY_PRESS(0x37)) { printf("7\n"); } else if (KEY_PRESS(0x38)) { printf("8\n"); } else if (KEY_PRESS(0x39)) { printf("9\n"); } } return 0; } //直接返回我们输入的数字键
本地化
1. C语言最初假定字符都是单字节的,但是这些假定并不是在世界的任何地方都适用。
2. <locale.h>头文件提供的函数用于控制C标准库中对于不同的地区会产生不⼀样行为的部分。
3. setlocale()函数⽤于修改当前地区,可以针对⼀个类项修改,也可以针对所有类项。
setlocale(LC_ALL, " ");//切换到本地环境
宽字符
1. 宽字符的字面量必须加上前缀“L”,否则 C 语言会把字面量当作窄字符类型处理。
2. 前缀“L”在单引号前面,表示宽字符,对应 wprintf() 的占位符为 %lc。
3. 前缀“L”在双引号前面,表示宽字符串,对应 wprintf() 的占位符为 %ls 。
#include <stdio.h> #include<locale.h> int main() { setlocale(LC_ALL, ""); wchar_t ch1 = L'●'; wchar_t ch2 = L'⽐'; wchar_t ch3 = L'特'; wchar_t ch4 = L'★'; printf("%c%c\n", 'a', 'b'); wprintf(L"%lc\n", ch1); wprintf(L"%lc\n", ch2); wprintf(L"%lc\n", ch3); wprintf(L"%lc\n", ch4); return 0; }
致谢
感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!