目录
本文章将介绍如何使用C语言在Windows环境的控制台中模拟实现经典小游戏贪吃蛇。
1.游戏效果演示
基于控制台实现贪吃蛇小游戏
2.技术要求
C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32API等。
3.win32API
在写关于贪吃蛇的代码之前,我们要先掌握Win32API如何使用
3.1控制台程序
平常我们运行起来的黑框程序其实就是控制台程序
我们可以用一些cmd命令来设置控制台窗口的长宽,如mode
也可以改变窗口命名,如title
3.2 控制台屏幕上的坐标COORD
COORD
是Windows API中定义的一个结构体,用于表示控制台屏幕上的一个字符的坐标。它有两个成员:X
(表示列位置)和Y
(表示行位置)。
COORD类型的声明:
给坐标赋值:
3.3 GetStdHandle
GetStdHandle
是一个 Windows API 函数,用于从特定的标准设备(标准输入、标准输出或标准错误)中获取一个句柄(handle)。句柄相当于控制台的权限,有了它才能操控控制台。需包含头文件windows.h。
函数原型:
实例:
3.4 GetConsoleCursorInfo
GetConsoleCursorInfo
是 Windows API 中的一个函数,用于检索有关指定的控制台屏幕缓冲区的光标的可见性和大小信息。
函数原型:
实例:
3.4.1 CONSOLE_CURSOR_INFO
CONSOLE_CURSOR_INFO
是一个在 Windows 编程中使用的结构体,用于表示控制台光标的信息。该结构体主要在 GetConsoleCursorInfo
和 SetConsoleCursorInfo
函数中使用,以获取或设置控制台光标的大小和可见性。
结构体定义:
- dwSize
描述:这个成员变量表示光标填充的字符单元格的百分比。其值通常在 1 到 100 之间,表示光标从完全不可见(接近0)到完全填充(100)的大小。
- bVisible
描述:这个成员变量表示光标的可见性。如果 bVisible
为 TRUE
,则光标是可见的;如果为 FALSE
,则光标是不可见的。
3.5 SetConsoleCursorInfo
SetConsoleCursorInfo
是 Windows API 中的一个函数,用于设置控制台屏幕缓冲区的光标信息,包括光标的大小和可见性。
函数原型:
实例:
3.6 SetConsoleCursorPosition
SetConsoleCursorPosition
是Windows API中的一个函数,用于设置控制台窗口中光标的位置。
函数原型:
实例:
SetPos:封装⼀个设置光标位置的函数
3.7 GetAsyncKeyState
GetAsyncKeyState是一个Windows API函数,用于检测程序运行时某个按键的状态,包括是否按下或弹起。
函数原型:
将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。
GetAsyncKeyState 的返回值是short类型,在上⼀次调用GetAsyncKeyState 函数后,如果 返回的16位的short数据中,最高位是1,说明按键的状态是按下,如果最高是0,说明按键的状态是抬 起;如果最低位被置为1则说明,该按键被按过,否则为0。
如果我们要判断⼀个键是否被按过,可以检测GetAsyncKeyState返回值的最低值是否为1.
实例:
4.贪吃蛇游戏设计和分析
为实现贪吃蛇游戏的运行,我们将分成三个文件(一个头文件和源文件)来实现
snake.h:包含头文件
snake.c:实现游戏各功能代码的函数实现
tect.c:贪吃蛇游戏中的类型声明和函数的声明。
4.1初始化蛇的结构体
我们通过链表的方式来维护蛇的结构体