说到贪吃蛇大家应该都不陌生吧,我觉得小时候大家都玩过,反正我记得我小时候对这个游戏还算是有印象的,毕竟在当年洛基亚横行的年代,这个可是手机上必不可少的应用了,那么今天我们就来搞一个相较于弱一点的贪吃蛇。
预处理
大家都写过这么多的代码了,应该知道,也来我们方便运行和观看,我们通常先创建两个源文件后再创建一个头文件。
蛇(链表)
蛇的节点
好,那么我们想一想我们以前玩的贪吃蛇,是连在一起的吧,不是东一部分西一部分吧。所以我们创建一个链表然后来表示蛇的一个节点。那么我们知道链表中的除了下一个节点的地址还有数据是吧,就是我们节点的内容,那么我们要存什么嘞。那这就不得不引出一个新的知识点,我们的命令板其实是一个xy轴,虽然与我们学习过的xy轴是一样都有x,y但是我们这里的y轴在下面,但是我们的写法还是没有变化的还是(x,y)。那我为什么要说明这个东西嘞,是因为我们后面蛇和食物以及后面的一些提示肯定不能从(0,0)开始打印啊,我们要调整光标的位置,就是我们编译是那个一闪一闪的,那时我们打印下一个东西的地方。好了这里我只是向大家提及一下这个知识以便于我们后面使用的时候大家很疑惑。
那么我们确定了节点里面的存储物了,那么我们创建一个结构体,并且为它改个名字,这样我们后面方便写:
蛇的方向
当我们创建好蛇的结构体后,我们蛇运动怎么走啊,这样我们是不是就要在创建一个枚举来表示蛇的运动方向呀,虽然我们知道当我们面向左边的时候不能向反方向走,但是我们要先创建出可能要走的方向啊,不管有没有用,我有肯定是好的呀,所以我们就再创建应该枚举表示蛇的运动方向:
蛇的状态
我们写了蛇,蛇的方向,那么我们都知道蛇有三种状态,一种是正常情况,二是撞墙,三是咬到自己了。我们是不是也要写出来啊,不然我们就写了个bug出来嘛,然我我们都知道有时候我们玩着玩着不想玩了,想退出,那这是不是也是一种状态啊。那么我们这里就确认了四种状态,正常游戏,撞墙,咬自己和退出游戏。那么我们就再写一个枚举来表示这四种状态:
蛇的数据
ok,当我们写完这些前置准备后,我们是不是该考虑后面游戏内的数据了呀,例如什么要有地图吧(虽然以前玩的是没有边界的但是我们这里因为是阉割板所以我们这里是有地图的),要有开局前的提示什么吧,还是什么分数吧等等,这里是不是也要定义一个结构体嘞:
那么上面就是我们贪吃蛇的一些前置条件,当如还有一些头文件,但是我会在后面把源代码发出来的。
光标
当我们处理好前置条件后,我们需要再来处理一件事,就是我在前面给大家说过的,光标,大家现在都知道我们命名板是一个xy轴,那么我们如何移动光标和让光标消失嘞,毕竟我们也不想看到屏幕上始终有一个一闪一闪的东西打搅我们的思路吧。
void GameStart(psnake ps)
{
//设置窗口大小,改变窗口名字
system("mode con cols=100 lines=30");
system("title 贪吃蛇");
//隐藏光标
HANDLE houtput = GetStdHandle(STD_OUTPUT_HANDLE);//获取光标句柄
CONSOLE_CURSOR_INFO cursorinfo;
GetConsoleCursorInfo(houtput, &cursorinfo);//获取光标信息
cursorinfo.bVisible = false;//隐藏光标
SetConsoleCursorInfo(houtput, &cursorinfo);//设置光标状态
}
上面嘞是关于光标的一些指令与步骤,我知道大家也许不是很理解上面代码的意思,我们现在的主题毕竟是贪吃蛇嘛,所以后面我会写一篇博客来向大家解析一下上面的代码作用与使用方法。好吧,大家就先知道有这么个东西和有什么有就好了。
改变光标位置
当我们看过上面的关于光标的一些基础知识了,那我们知道光标的位置不能是(0,0),那么我们需要改变把,并且我们使用的频率应该不会少吧,那么我们直接封装一个函数,就来表示改变光标位置,这样我们使用就不用再写一遍源代码了:
游戏
以上就是真的我们贪吃蛇的前置条件了o(* ̄3 ̄)o 接下来我们就要正式写关于实现游戏的代码了。
游戏开始界面
那现在我们就开始了,我们都知道你打开游戏前都有一个界面,毕竟我们肯定是点错了,打开游戏,并且我们写一个游戏界面来给那些没玩过这些游戏的朋友简绍游戏游戏的玩法。这样也是很好的。因为我打算在最后把源代码发出来,那么我最好的时候将整局游戏示意图也录下来。这里我就直接写代码。
首先我们使用setpos函数来确定光标的位置,再使用wprintf函数来打印内容system(“pause”)语句则代表着暂停程序,按任意键表示继续程序,而system(“cls”)语句则代表着将当前控制台的页面全部清空,这样我们就打印出了我们的欢迎界面。后面大家的命令板名字会改变还会打印出上面我们写的字符。
游戏地图
我们在博客开始前也说过我们的贪吃蛇是被阉割过的是有地图的,所以我们现在要开始把我们的地图打印出来。然后地图嘞,不就是一圈东西围着的嘛,那么我们想一想我们围一圈,从0行开始画,然后多少列,最好多少行多少列,然后画左右的,那是不是我们就简单理解为画上下左右的图形就可以了。我们用循环嘛,就是利用改变光标位置来打印就可以了。那么大家来看看如何打印地图的&