C语言学习记录第五天(贪吃蛇半成品)

本来是想昨天更新,但是忙着找bug了(悲)

首先是和扫雷不能说像,只能说完全一样的菜单栏与运行过程。

然后让我们看看下头文件的函数声明和引入的库,

大致就分为以上几步,将这些函数写完代码也就执行完毕了。事先说三点。1是自定义函数相当于拷贝一份新的数,对原来的数不会有印象,但是对于数组是有影响的。看案例

写程序前我忘了这件事,结果导致程序运行整个有问题,后来进行了一点调整,代码整体不变,将涉及到数字的全部用数组代替掉。(还是一点一点比对我才想起来这件事,数组会改数字居然不会改。。。又浪费了大量时间)

2是scanf虽然对于字符串,空格与换行符,但是对于单个字符,情况就不一样了。

瞧瞧我们发现了啥。。。对于单个字符,居然连空格和换行符都可以输入字符中(就是因为这个bug导致我浪费了不少时间,每次输入都会出两张图)。

第三点,写代码的时候一定要保证自己精神状态良好,该吃吃该喝喝,不然一个不小心哪里写错了要检查半天(头秃的感觉),代码不会执行错误,只有自己的程序写出了bug没法救,只能找。

OK,介绍完毕,进入正题,让我们看看游戏具体设计。

在第一张图已经解释过各种函数的作用了,这里不再重复,包括ROWS,COLS都是第一张图中定义过的,因此可以直接放入数组中,如果想加大难度,调整最大长度与边框范围都可以直接对ROWS,COLS和win进行修改。

首先创建好3个数组,第一个是游戏面板,第二个是小蛇身体每一段的坐标位置,第三个数组记录小蛇的长度,方向,与是否活着。

然后对面板进行初始化,生成小蛇,随机生成豆豆,展示一下面板即可进行游玩。(多文件传输第三篇日记提到过,还是同样的做法,就当一个文件直接写也行,就是看起来长了点,多文件看起来短一点)。

由于代码太长了,重复类似的部分我只放上一张图,剩下的稍微修改下数据都是一样的。

展示面板,将面板上的每一位都输出去,输完一行直接换行即可。

初始化,即页面清空,四边放上墙,其余地方为空,如果是豆豆的话则不清除。

小蛇初始化,通过时间函数对随机函数进行调整,保证每次游戏都不相同。小蛇的头位置随机,身子的话就不写随机了,没有必要,如果头的上下左右依次进行如果不是墙就设置为身子。然后通过头和身子之间的关系计算出方向,1234我写的是上下左右。头在身子上方则为上。以此类推。

随机生成豆豆,在边框之内,如果不是蛇身子的一部分就生成豆豆,如果是的话就再次进行随机。

小蛇吃豆变长。首先判断方向,如果输入的方向前方是豆豆则在小蛇末尾加长一截,同时长度加一。新生成的身子坐标是小蛇原本身子最后一节坐标的两倍减去倒数第二节的坐标,感兴趣的可以自己算算看。

最后是定义移动,上方全部的代码都为这段代码提供服务。

由于太长了我只放上一个方向的移动,剩下的类似。

由于之前我在game函数中已经scanf输入过一次,在缓冲区中是存在换行符的,此时如果直接将

对方向进行scanf会发生一件有趣的事,每次都会跳两张图。因此我们需要在while循环中将缓冲区里的换行符进行消除,一个getchar即可。之后每次输入之后的换行符都会被getchar直接请走。将getchar放入循环体的scanf之前即可保证每次只跳一张图(我是前面有过一个scanf所以必须放前面。。一般都是scanf之后再getchar)。先用m备份一份初始长度,对方向进行判断,如果方向不是贪吃蛇朝向的后方即可正常执行,否则不动。先使用变长函数进行判断有没有吃过豆豆要不要加长来保证贪吃蛇是完整。然后将后面的每一位的位置都都改成前一位即可实现贪吃蛇移动。最后到达头的时候需要另外给头设置位置。初始化整张图,如果头移动碰到墙或身子则直接游戏结束。保证贪吃蛇不死后再给贪吃蛇每个位置都打上身子,方向改变为输入方向。移动之后,将长度等等重新赋值(我是写的有点多了懒得改了就直接用length了)。如果长度有变化,说明贪吃蛇吃掉了豆豆,再次随机生成豆豆。跳出循环有两种方式,一种是死掉,一种是长度够了。如果死了life=0,还活着说明life=1,生成赢了之后的面板与文字。

OK,到此结束,难度不大,写出来的bug倒是不少,改了我好久,让我们运行一遍。

非常的好(滑稽)。

但这只是个半成品,因为没法实现小蛇自动行动与随时输入输出,这个我还没学,等以后学过之后再给大家带来完成品贪吃蛇。

好的,记录到此结束,请大家留下免费的赞当作学费(本来就会的大佬也可以留下赞啊,反正不要钱)。下次见,拜拜。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值