结合C语言和链表来写一个贪吃蛇小游戏

写贪吃蛇需要用到的知识:

C语言函数、结构体、链表、枚举、动态内存管理、预处理指令、Win32 API。

这个游戏我们要实现的基本功能:

贪吃蛇的地图绘制、上下左右控制贪吃蛇的运动、贪吃蛇撞墙、计算得分、蛇的加速减速、游戏暂停。

我们想要实现这个游戏,就必须要有Win32 API 的知识储备,这对我们游戏的实现很重要,所以我们先简单学会一下这个的用法。

1.COORD

这个是控制控制台应用的坐标的x轴和y轴在控制台应用上就是这样的,COORD pos = {3,5};这就是他的用法。

2.GetStdHandle

它⽤于从⼀个特定的标准设备(标准输⼊、标准输出或标 准错误)中取得⼀个句柄(⽤来标识不同设备的数值),使⽤这个句柄可以操作设备。就好像我们的把手一样。用法如下:

这是这个函数的几个参数。具体在项目里面怎么用我们等会儿会讲。

3.GetConsoleCursorInfo

检索有关指定控制台屏幕缓冲区的光标⼤⼩和可⻅性的信息,通俗一点来讲,就是控制光标的可见度,这个作用是让游戏更加美观。用法如下:

具体在项目里面怎么用我们等会儿会讲。

4.CONSOLE_CURSOR_INFO

这个结构体,包含有关控制台光标的信息。

dwSize,由光标填充的字符单元格的百分⽐。此值介于1到100之间。光标外观会变化,范围从完 全填充单元格到单元底部的⽔平线条。

bVisible,游标的可⻅性。如果光标可⻅,则此成员为TRUE。

CursorInfo.bVisible = false;    //隐藏控制台光标,大部分我们会这么用。

5.SetConsoleCursorInfo

6.SetConsoleCursorPosition

既然这些都学了,我们就把他们结合起来,封装一个定位坐标的函数,这样我们游戏里经常用到,就会很方便了。

7.GetAsyncKeyState

将键盘上每个键的虚拟键值传递给函数,函数通过返回值来分辨按键的状态。

我们每个按键都有自己的虚拟码,所以我们只需判断这个返回值即可。

好了,我们的Win32 API函数也学习完了,我们可以开始写游戏了。

游戏的构成

我们首先要打好框架,我们要知道我们先干嘛。

第一,我们要将蛇的信息保护起来,指向蛇头的指针,指向食物的指针,蛇的方向,游戏的状态,一个食物的权重,总分数,休息时间(移向下一个位置的间隔时间),这些我们都要维护起来,需要运用到结构体。这就是我们对贪吃蛇信息的维护。

初始化游戏

初始化游戏我们要打印欢迎界面,功能介绍,绘制地图,创建蛇,创建食物,设置游戏的相关信息。有这么多的事情要做那么我们就封装一个函数来实现吧。值得注意的一点是我们要记得适配本地化,  setlocale(LC_ALL,“”);记得包含头文件 locale.h。

这是初始化游戏的大纲,还有一些函数的实现如下:

这就是贪吃蛇的第一部分:初始化游戏。

游戏运行

就如初始化游戏一样,我们将游戏运行也包装成一个函数,这样会让我们的代码逻辑更加清晰。

首先,我们要打印帮助信息,告诉玩家他的分数和一些按键情况等等,然后我们要让蛇动起来,但在这之前,我们必须要检测游戏的运行情况,是撞墙了还是撞自己了,还是OK,着我们就要用一个do-while循环,而在循环里面,我们要检测玩家的按键情况,是往上走还是往下走,还是往左走等等。那么,我们来看看代码怎么写。

这是游戏运行逻辑的大概,还有里面的函数实现如下:

这就是游戏运行这一个最重要的板块。最后,我们就可以做收尾工作了。

结束游戏

结束游戏这个步骤我们也把他封装成一个函数,如下图所示:

以上就是这个游戏的整个逻辑了,再给大家展示一下我们的测试文件test.c吧

这个游戏做成的样子,再我上传的视频里有,感兴趣的伙伴可以去看看。

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值