友情提示:380元/半年,儿童学编程,就上码丁实验室。
今天我们要解决的问题是——gameover的问题。
我们会发现,这跟吃苹果,其实本质上是相同的一件事。
那么蛇身的坐标和蛇头重合,就判断为gameover。
道理其实蛮简单的,但这里就有蛇身坐标的读取要求了。
我们会发现,蛇身和苹果本质的不同是。
苹果是一个点,而蛇身是很多个点并且会不断增长。
这就对我们的数据读取方式,产生了1个必要条件:
蛇身有多长,就要读取多少个数据进行对比。
扩展开来要解决的问题就是:
1、知道蛇身的长度
2、要知道阵列中哪些数据是蛇身的数据
蛇身的长度很简单,根据知我之前课程设定的变量,其实就是Eat times,就是吃了多少次,就是多长,初始值是1。
而阵列数据调取就稍微有点小麻烦了。
因为我们的自动索引,是正向数数的。即,1,2,3,4……这样。
而蛇身的有效数据是反向的,比如最新蛇头是阵列中500的索引对应的值,那么蛇身长度为6时,就要调取,500,499,498,497,496,495这些数据。
怎么办?
很简单咯,让自动索引倒过来呗。用减法。
我们需要在“控制部分”里面,新增加一个循环。独立判断是否gameover。
动手做!明确这里有两个重要数据。
1、times,这个数据代表了蛇头的数据索引位置。
2、Eat times,这个代表了蛇的身体长度。
接下来就简单了,
调取times减去这个循环的索引,做出蛇身数据的阵列读取方法。
设定蛇身长度,当其等于Eat times时,循环结束的第一个逻辑。
然后进一步做出蛇头碰到蛇身的判断,写入gameover逻辑变量。
当两个逻辑任意一个被达成时,循环均结束。
于此同时,我们还获得了一个gameover逻辑变量。
整体如下:
Gameover变量和吃到苹果的判断逻辑,两者都要让程序跳出“控制部分”。
所以,两个逻辑也要结合一下,任一达成则跳出这个循环,进入“生成苹果”的大循环。
再在大循环里面,设定出gameover逻辑的功能,即,停止整个程序,然后报一个声音表示游戏结束。
这样一来,整个简易版贪吃蛇程序就完成了!
恭喜你,经过2个月的更新,这个课题几乎就完成了!
但,运营之后,报错了……
为什么一运行就会报错?
这是因为我们忽略了很关键的一点,
当蛇的单位为1时,蛇头和蛇身本身就是重叠的……
所以,刚开始,就gameover了……
我们回到今天做的程序部分进行一些小优化即可。
设定times2变量,因为自动索引是从0开始进行的,所以第一个读取的数据会是0,即蛇头……
Times2,可以理解为,我们手工制作的一个从1开始的索引。
每次的索引用times减去times2,即可解决这个问题。
而同时,eattimes那边也要改成,长度为,eattimes减1,这样问题就全部解决了!
下次我们正式结束这个课题,也把完整的各个部分重新整理出来给各位参考,程序其实不难。但要充分理解,要花一些精力去整理。
完成后,你就可以自己优化啦!
可以增加一下第几关,第几关之类的。很好玩哦。