C语言——基于控制台实现贪吃蛇小游戏

目录

1.游戏效果演示

2.技术要求

3.win32API

3.1控制台程序

3.2  控制台屏幕上的坐标COORD

3.3 GetStdHandle

​编辑

3.4 GetConsoleCursorInfo

3.4.1 CONSOLE_CURSOR_INFO

 3.5 SetConsoleCursorInfo

3.6  SetConsoleCursorPosition

 ​​​​​3.7 GetAsyncKeyState

4.贪吃蛇游戏设计和分析

4.1初始化蛇的结构体

4.2 初始化游戏GameStart

  4.2.1 首先要打印游戏界面和规则,再隐藏光标和获取句柄

 4.2.2 游戏地图的打印

4.2.3 打印蛇身 

4.2.4 创建第一个食物 

 4.3 游戏运行GameRun

4.3.1 打印右侧的规则

 4.3.2 获取按键信息

4.3.3 蛇身移动

4.3.4 下一个坐标是食物

4.3.5 下一个坐标不是食物

4.3.6 蛇头撞到墙游戏失败

4.3.7  蛇头撞到蛇身游戏失败

 4.4 游戏结束GameEnd

 4.5 再来一局

 5.贪吃蛇代码展示

5.1 snake.h

5.2 snake.c

5.3 tect.c


本文章将介绍如何使用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初始化蛇的结构体

我们通过链表的方式来维护蛇的结构体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值