贪吃蛇游戏运行画面-CSDN直播
目录
5.3.1 判断移动过程中是否遇到食物(NextIsFood)
1. 实验目标
- 贪吃蛇地图绘制
- 蛇吃食物的功能(上、下、左、右方向键控制蛇的动作)
-
蛇撞墙死亡
-
蛇撞自身死亡
-
计算得分
-
蛇身加速、减速
-
暂停游戏
2. Win32 API介绍
2.1 Win32 API
Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外,它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程序达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序(Application),所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API 也就是 Microsoft Windows 32 位平台的应用程序编程接口。
其实说人话就是:如果你要基于Windows操作系统来编写一些程序,则Windows会提供各种接口,便于你完成一些功能
2.2 控制台程序(Console)
mode con cols=100 lines=30
也可以通过命令设置控制台窗口的名字:
title 贪吃蛇
#include <stdlib.h>
int main()
{
//设置控制台窗口的长度:设置控制台窗口的大小,30行,100列
system("mode con cols=100 lines=30");
//设置cmd窗口名称
system("title 贪吃蛇");
return 0;
}
运行效果图
执行完后我们会发现窗口大小调制好了,但窗口名却没有,这是因为程序已经结束了。
解决方法:
- getchar(); 执行到这行会停下来,等待接收一个字符
- system("pause") 执行到这行命令程序会暂停
2.3 控制台屏幕上的坐标COORD
注意:使用COORD需要包含头文件<windows.h>
COORD是WindowsAPI中定义的一个结构体,表示一个字符在控制台屏幕幕缓冲区上的坐标,坐标系(0,0)的原点位于缓冲区的顶部左侧单元格。
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
给坐标赋值:
COORD pos = { 10, 15 };
2.4 GetStdHandle
使用需要包含头文件<windows.h>
GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值),使用这个句柄可以操作设备。HANDLE GetStdHandle(DWORD nStdHandle);
说人话:要操作特定的控制台程序就要获得它的操作权限,能要识别你在操作谁


2.5 GetConsoleCursorlnfo
检索有关指定控制台屏幕缓冲区的光标大小和可见性的信息
BOOL WINAPI GetConsoleCursorInfo(
HANDLE hConsoleOutput,
PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
);
PCONSOLE_CURSOR_INFO是指向CONSOLE_CURSOR_INFO 结构的指针,该结构接收有关主机游标(光标)的信息总结:使用GetConsoleCursorlnfo传入的第一个参数是句柄,为何需要句柄?原因是如要隐藏光标首先需要获得当前控制台对应的光标信息。第二个参数是结构体指针
HANDLE hOutput = NULL;
//获取标准输出设备的句柄(⽤来标识不同设备的数值)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
//定义结构体变量
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOutput, &CursorInfo);//获取控制台光标信息
//调用完这个函数后就能把hOutput对应的光标信息填充到这个结构体变量中去
2.5.1 CONSOLE_CURSOR_INFO
typedef struct _CONSOLE_CURSOR_INFO {
DWORD dwSize;
BOOL bVisible;
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
-
dwSize,由光标填充的字符单元格的百分比。 此值介于1到100之间。 光标外观会变化,范围从完全填充单元格到单元底部的水平线条。
-
bVisible,游标的可见性。 如果光标可见,则此成员为 TRUE。
CursorInfo.bVisible = fa