简易贪吃蛇代码

关于贪吃蛇的代码 在编写之前了解一些关于控制台程序的控制方法 

:1如何调控控制台的大小改写控制台的标题 2如何使控制台的光标 3如何在控制台上固定的位置打印内容 4如何使控制台程序适应

1.通过system函数实现控制台大小和改写控制台的标题

在使用syetem函数之前要引用#include<windows.h>的数据库

    system("mode con cols=100 lines=30");
    system("title 贪吃蛇");通过这两行代码实现

2.需要通过代码调节第一行得到控制台权柄

第二三获取当前位置控制台光标信息

第四行修改关闭光标显示

第五行设置完成控制台光标信息

3.想要在固定位置打印内容 需要通过2问题中的获取控制体权柄

由于这个功能在之后会多次使用 所以写成函数形式方便使用

4.要是控制台程序上实现贪吃蛇游戏要在弹出控制台程序时终端设置由windows控制终端并保存

在默认未修改的情况下是让windows决定 需要修改成windows控制台主机

在解决这几个问题之后就开始编写贪吃蛇代码

这个代码我们需要三个文件 一个.h头文件 两个.c源文件其中一个用于测试的test文件和用于实现snake具体功能的snake文件

首先在头文件引用这几个数据库 再分别给snake.c和test.c文件中引用snake.h文件

在test.c文件写入main函数 将其本地化 setlocale函数需要引用#include<locale.h>数据库 之后调用test函数 并将结束时的语句固定在合适的为位置打印

在test函数用于实现贪吃蛇功能 在其内部调用

并将三个函数声明写在头文件中 同时在头文件中创建贪吃蛇的结构体类型和蛇身的链表结构体类型

在蛇身类型中需要包括坐标x y 和next域

在贪吃蛇类型中需要蛇头结点snakehead食物结点snakefood 睡眠时间sleeptime 食物分数foodweight 得分总数score 游戏当前状态status 蛇的移动方向dir

在snake.c文件中实现snakestart函数在该函数中需要隐藏光标 修改控制台程序大小和标题 打印欢迎内容 打印地图 初始化蛇身 和创建食物

dir和status都是通过枚举创建的

在头文件中实现枚举

隐藏光标 修改控制台程序大小和标题在上述内容中已经实现 接下来实现打印欢迎内容 需要setpos函数固定位置 并通过printf来打印内容 同时还需要system函数来清除屏幕欢迎内容和用于暂停代码运行

创建地图 在整个控制台程序上可以看做一个坐标系有x轴和y轴这是具体的x和y轴方向

打印地图是可根据自己的想法在相应的位置打印地图不是固定的 

我的地图坐标是从(0 0 )(0 26)(56  0)(56 26)这四个角组成的地图

这时可以发现地图明明是正方形可坐标却不是 应为打印墙体 蛇身体和食物的都是特殊符号 这种特殊符号都是宽字符 x占2个数而y占1个数 所以x的坐标会比y坐标长打印特殊字符是也需要用到wprintf来打印

由于在之后也会频繁使用特殊符号所以在snake.h的头文件中将他们定义宏

实现蛇的初始化 

需要malloc函数创建空间结点 并通过cur结点使这5个结点头插法相连  并在每个结点中输入x y坐标·之后setpos和wprintf打印出蛇的身体 

同时对其他的贪吃蛇成员进行初始化

关于食物结点的坐标需要满足三个要求 1.其坐标位置要在墙内 2.由于打印是宽字符的原因其x坐标应该为偶数 与坐标和蛇头对齐 3.不能生成在蛇身体所在的位置内 

首先创建空间结点坐标 之后开始随机值产生x y值 若x y满足以上三个条件就赋值给新创建的空间结点坐标 若不满则通过goto 语句重新随机生成 x y值 直到满足要求 之后通过在生成的x y位置上打印食物

 在sankestart函数中 需要打印提示游戏的信息 之后需要实现能够不断的实时更新得分情况和更新蛇的移动方向dir   以及移动一步和休眠一次

打印提示信息需要setpos固定位置 和printf打印信息

通过do while 循环来不停的更新和移动 通过检测按键来改变蛇的移动方向 这个需要函数GetAsyncKeyState()来检测若是成功检测按键 则会返回的之中的最后一位会是1通过这个可以检测是否按下某个按键 这个函数需要频繁使用 所以将其定义为宏 在snake.h的头文件中

并通过if else语句 来对相应按键进行检测

其中的f3加速时 会提高食物分数和减少休眠一次的时间间隔 f4减速时则会减少食物分数 和提高休眠一下的时间间隔  空格键是则会暂停游戏 通过pause函数来实现 当再次按到空格时则会停止暂停继续进行游戏 这里通过定义宏和if语句实现

休眠一次则是通过SLeep函数来实现的 休眠时间的间隔在()中写入

蛇的移动函数有snakemove函数来实现 

这里需要开创一个新的空间结点pnext 走在蛇预定的下一步

同时使用Switch语句 来给pnext结点的x y进行确定 

这是就要判断下一个结点的位置是否是食物的位置 通过if语句判断食物的x y和pnext

的x y是否相同 相同就吃食物 不同就移动一步

实现吃食物功能 需要通过头插法将食物结点插入蛇的链表中 然后将整个新的蛇身再次打印 这是创建一个cur结点 cur开始在蛇头结点位置通过while循环和setpos wprintf函数依次打印 之后删除free旧的食物结点 通过 createfood函数再次创建一个新的食物结点 之后 将食物的分数加入到所得的游戏总分上面 

实现不是食物 正常移动的功能 首先要进行头插法将pnext结点插入蛇身 之后创建cur结点 开始在蛇头的位置 通过while 循环依次打印直到cur=蛇的倒数第二个结点时停止 

这是将cur->next的尾结点位置打印覆盖为空白 之后free掉尾结点 同时 使cur-next=NULL 

到这是我们的蛇就可以在控制台程序上进行移动  

在这之后我们还需要在snakemove函数中实现检测是否撞墙和是否咬到自己这两个功能

通过killbywall和killbyself实现 都是利用if语句和墙的坐标和蛇自身的坐标与蛇头进行比较看是否相同 通过改变蛇的status的状态来结束dowhile 循环来结束游戏 

在snakeend函数中首先要根据蛇的结束状态通过Switch语句来选择不同的结束语 写出不同的结束游戏的原因 之后将创建的贪吃蛇的空间全部free掉 并置为空

这就是贪吃蛇游戏的主要代码 之后我们可以在test函数中设置一个可以不停游玩的菜单 通过dowhile实现 

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值