3步实现贪吃蛇

方法很简单,打开页面,复制,粘贴

一.整体思维架构

我们根据游戏的开始,运行,结束,将整个游戏划分成三个部分。在每个部分下面又划分出多个功能,接下来我们就根据模块一一实现功能。

二.Gamestart

2.1设置窗口大小与窗口名字

由于游戏需要用到控制台窗口,所以我们需要使用一些win32API的相关知识。

首先我们需要调整窗口大小,这里用到了一个mode con的指令,以及给title进行命名,通过调用system来实现

在使用system之前要加上头文件

2.2隐藏屏幕光标

2.2.1 GetStdHandle

GetStdHandle是Windows ApI函数,他用于从一个特定的标准设备(标准输入,标准输出,标准错误)中取得一个句柄,用这个句柄可以操作设备。

我们通过一个houput指针来接收一份标准输出光标。

2.2.2 GetConsoleCursorInfo

GetConsoleCursorInfo是用来检索有关指定控制台屏幕缓冲区的光标大小和可见性信息。他的参数为一个bool类型。使用时,需要一份handle指针,以及一个相关结构体(包含控制台光标信息)。

2.2.3 CONSOLE_CURSOR_INFO

这是一个结构体,能够获取有关控制台光标的信息。包括dwSize光标填充的字符单元格的百分比,bVisinle游标的可见性。

这里我们将其置为false,就可以隐藏光标。

2.2.4 SetConsoleCursorInfo

设置指定控制台屏幕缓冲区的光标大小和可见性。

我们将指针与检索信息传给其,就能完成光标设置。

2.3 欢迎界面WelcomeToGame

在此之前我们需要制作一个坐标设置的函数。

COORD是Windows API中定义的一个结构体,表示一个字符在控制台屏幕上的坐标。

由此我们可以制作一个定位函数

输入x,y的坐标,将光标定位到该处。

我们根据这个函数,以及屏幕的大小,适当调整位置打印相关信息。

这里我们运用到了pause 和cls,使每打印完一次信息就清理屏幕打印下一句信息。

2.4创建地图CreatMap

首先我们定义一下墙体

为一个□,这个字符号可以在输入法内找到。接着我们开始输入墙体,从0.0开始,在控制台内输入要用到wprintf,输入则需要在类型前加上L。由于控制台的x坐标与y坐标大小不一样的原因,x坐标相较于y坐标的每个单位要小,所以我们的循环中,x坐标处我们每两个一打印。

2.5创建蛇身InitSnake

2.5.1蛇身结点创建

这里我们用到一个结构体,蛇身需要xy坐标,以及下一个蛇身结点的地址。

2.5.2蛇的维护结构

一条蛇内要包含蛇头的指针,维护蛇食物的指针,蛇的初始方向,蛇的状态,得分情况,蛇的大小,每走一步需要休眠的时间。

我们用一个枚举结构体储存蛇的相关状态以及方向控制。

2.5.3初始化蛇身

传递一个蛇身结点,初始化为cur。我们先初始化蛇身为5个结点,通过for循环一次malloc出一块空间,结点依次链接。将结点赋给_psnake。

之后我们需要将蛇身打印出来,并且初始化数据。

2.6创建食物CreateFood

首先我们要保证食物要在地图内部,其次食物不能与蛇身重复。

我们将食物坐标设置为⭐

我们可以用x=rand%53+2,y=rand%25+1使得坐标在地图内部,while循环x%2!=0使x坐标恒为2的倍数。

完成上述判断后给食物进行初始化

2.7总结Gamestart

三. GameRun

3.1右侧打印有效信息PrintHelpInfo

3.2 KEY_PRESS

这是一个宏,用于检测按键状态,若按键被按下则首位为1,否则则为0

3.3主要设计思路

首先我们在右侧打印出游戏相应提示,用KEY_PRESS判断按键,来判断蛇的移动方向以及加速减速,游戏暂停等等。我们用一个do while循环来操作蛇的每一步,每走一步休眠一定时间,直到游戏结束为止。

我们通过控制sleep和weight来实现加速和减速效果。

3.4 蛇的移动SnakeMove

蛇的移动首先要满足不能和原先方向相反移动。蛇头向前走,蛇尾销毁结点。以及蛇的状态,是吃食物,撞墙,自杀。

3.4.1上下左右移动

通过判断按键是否按下,用Switch来进行循环判断,注意x坐标每次移动2个单位。

3.4.2判断是否有食物

若下一个结点有食物,就将食物与蛇结点相连接,随后打印出整条蛇,改变相应的分数,最后销毁的食物空间,创建一个新的食物。

若不是食物,则创建一个新结点放在蛇头出,并与蛇连接,销毁最后一个蛇结点。

3.4.3撞墙或自杀

3.5总结GameRun

四. GameEnd

4.1主要思路

告知死亡原因,并且释放所有结点。

4.2代码实现

五.完整代码

5.1 test.c

5.2 Snake.c

5.3 Snake.h

相关推荐
鹿角片ljp8 小时前
LeetCode 46. 全排列|吃透回溯
算法·leetcode·职场和发展
鼎艺创新科技8 小时前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
石头猫灯9 小时前
WordPress wp2shell 漏洞链完整拆解流程
网络·数据结构·安全·web安全
别动我齐刘海9 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
傻啦嘿哟10 小时前
英雄联盟皮肤爬虫:爬取全皮肤价格与特效,做比价工具
java·c++·爬虫
.道阻且长.11 小时前
11.LeetCode算法习题讲解--滑动窗口--将x减到0的最小操作数
算法·leetcode·职场和发展
caimouse11 小时前
ReactOS 图形系统分析(51):元文件子系统 — metafile.c
c语言·开发语言
码匠许师傅11 小时前
【C++ 面试真题】24. 聊聊 C++ 的时间日期处理
java·c++·面试
wenyq711 小时前
LeetCode 2460. Apply Operations to an Array
算法·leetcode
闻道且行之11 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv