目录
二、了解一下Win32API以及当前游戏实现需要用的函数:头lude
(2)、欢迎界面&&功能介绍(关于光标定位函数在上面讲解Win32API时已经写过)
一、技术要求:
C语言的函数、结构体、单链表、动态内存管理、枚举、Win32API、预处理指令等
二、需要的功能:
游戏界面(地图绘制),蛇的身体,蛇的移动方向,蛇的状态,暂停,蛇的加速与减速,食物,一食物的分数,总分,
二、了解一下Win32API以及当前游戏实现需要用的函数:头lude<windows.h>
1、概念:
Win32 API是一套由微软提供的应用程序编程接口(Application Programming Interface)。它是Windows操作系统的核心组成部分,为开发者提供了访问操作系统底层功能和资源的接口,包括图形界面、文件操作、进程和线程管理(可以帮应⽤程序达到开启 视窗、描绘图形、使⽤周边设备等)等。
2、控制台程序:(经常运行的黑色框框就是控制台)
VS2022的控制运行时是这样的,这个叫终端,要先改掉
设置里面默认终端应用程序改成Windows 控制台主机
就是如下qing
mode命令 设置控制台的长度和宽度
system("mode con cols=100 lines=30");
用到了system函数,用来控制控制台信息要包含头文件<stdlib.h>
title命令 设置控制台名字
system("title 贪吃蛇");
3、控制台屏幕上的坐标COORD
COORD是WindowsAPI中定义的⼀个结构体,表⽰⼀个字符在控制台屏幕幕缓冲区上的坐标,坐标系 (0,0)的原点位于缓冲区的顶部左侧单元格。
如下是COORD的结构体类型声明
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
4、句柄 GetStdHandle 函数
句柄是啥意思???控制台窗口,你要去操作他,那你要先获得他的使用权,才能操作,相当于“手柄”,你插了自己的手柄是不是可以抓住他的,然后去实行游戏的各种状态。想要炒菜,是不是得抓住锅的把手 (相当与标识(标记))。
HANDLE是一个指针(typedef改名而来)
在函数里面有三种选择,根据需求进行选择,这里我们选择的是标准输出设备
返回的是一个值
5、光标的隐藏
GetConsoleCursorInfo 函数
获得光标信息
第一个变量是句柄,第二个是一个结构体
这个结构体 包括光标的占比和可见性
dwSize,由光标填充的字符单元格的百分⽐。此值介于1到100之间。光标外观会变化,范围从完 全填充单元格到单元底部的⽔平线条。
bVisible,光标的可⻅性
先创建一个结构体变量,然后取其地址传入光标信号获取函数
对于如下结构体变量可以初始化为0更好
修改光标需要用到头文 <stdbool.h>
结构体成员 bVisible 默认情况下是 true (开启)
SetConsoleCursorInfo 函数
你获得到信息以后,将结构体成员的值进行了修改,那么是不是还需要一个函数来完成设置
第一个是句柄,第二个是结构体
如下:你修改好光标后,传个SetConsoleCursorInfo函数,设置完成
流程如下:
6、光标的坐标修改
SetConsoleCursorPosition 函数 定位光标的坐标
第一个是HANDLE 类型也就是 句柄 第二个参数是COORD类型,就是关于坐标相关的结构体
在蛇的移动过程中,我们蛇是不断改变位置的,那么光标也是要不断变化的,可以分装一个函数来进行光标位置的定位
//定位光标
void SetPos(short x, short y)
{
//句柄(标识标准输出,屏幕缓冲区)
HANDLE houtput = NULL;
houtput = GetStdHandle(STD_OUTPUT_HANDLE);
//给光标进行定位
COORD pos = { x,y };
SetConsoleCursorPosition(houtput, pos);
}
7、获取按键(虚拟按键)的情况
getAsyncKeyState 函数 (winuser.h)
键盘上每一个键的虚拟键都有一个虚拟值,传参的是虚拟件的代码 虚拟键代码
返回值是16位的short值,最高位是1,则是按下的,若是为0,则是抬起的情况
我们可以想到按位&1,得到的值无非是 0或者1
可以设置一个变量宏,
三、关于实现地图绘制
看下面的光标,x与y的关系是y = 2x,长方形的样子(因为默认是以单字符的形式建立的坐标系)
实际上我们打印的地图是宽字符,打印出来是占2个字节的位置(平时我们使用的是窄字符)
1、 讲解一下 C语言的国际化(地区化)
过去C语⾔并不适合⾮英语国家(地区)使⽤。 C语⾔最初假定字符都是单字节的。但是这些假定并不是在世界的任何地⽅都适⽤来为了使C语⾔适应国际化,C语⾔的标准中不断加⼊了国际化的⽀持。⽐如:加⼊了宽字符的类型 wchar_t 和宽字符的输⼊和输出函数,加⼊了头⽂件<locale.h>,其中提供了允许程序员针对特定 地区(通常是国家或者说某种特定语⾔的地理区域)调整程序⾏为的函数
setlocale 函数 第二个参数单纯使用 “” 就是本地化,“C” 就是正常模式,传递NULL 就是当前地区
setlocale(LC_ALL, " ");//切换到本地环境
setlocale(LC_ALL, "C");//正常情况
修改类别(那些调整)
LC_COLLATE:影响字符串⽐较函数 strcoll() 和 strxfrm() 。