最新消息:380元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十)

乐高 少儿编程 5203浏览 0评论
简易贪吃蛇

友情提示:380元/半年,儿童学编程,就上码丁实验室

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十)

 


今天我们要解决的问题是——gameover的问题。

 

我们会发现,这跟吃苹果,其实本质上是相同的一件事。

 

Apple的坐标和蛇头重合,判断为吃掉苹果

那么蛇身的坐标和蛇头重合,就判断为gameover。

 

道理其实蛮简单的,但这里就有蛇身坐标的读取要求了。

 


我们会发现,蛇身和苹果本质的不同是。

苹果是一个点,而蛇身是很多个点并且会不断增长。

 

这就对我们的数据读取方式,产生了1个必要条件:

 

蛇身有多长,就要读取多少个数据进行对比。

 

扩展开来要解决的问题就是:

1、知道蛇身的长度

2、要知道阵列中哪些数据是蛇身的数据

 

蛇身的长度很简单,根据知我之前课程设定的变量,其实就是Eat times,就是吃了多少次,就是多长,初始值是1。

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十) 

而阵列数据调取就稍微有点小麻烦了。

因为我们的自动索引,是正向数数的。即,1,2,3,4……这样。

 

而蛇身的有效数据是反向的,比如最新蛇头是阵列中500的索引对应的值,那么蛇身长度为6时,就要调取,500,499,498,497,496,495这些数据。

怎么办?

 

很简单咯,让自动索引倒过来呗。用减法。

我们需要在“控制部分”里面,新增加一个循环。独立判断是否gameover。

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十)


动手做!明确这里有两个重要数据。

 

1、times,这个数据代表了蛇头的数据索引位置。

2、Eat times,这个代表了蛇的身体长度。

 

接下来就简单了,

调取times减去这个循环的索引,做出蛇身数据的阵列读取方法

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十)

设定蛇身长度,当其等于Eat times时,循环结束的第一个逻辑

 

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十)

然后进一步做出蛇头碰到蛇身的判断,写入gameover逻辑变量。

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十)

当两个逻辑任意一个被达成时,循环均结束。

于此同时,我们还获得了一个gameover逻辑变量

整体如下:

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十)

 


Gameover变量和吃到苹果的判断逻辑,两者都要让程序跳出“控制部分”。

 

所以,两个逻辑也要结合一下,任一达成则跳出这个循环,进入“生成苹果”的大循环。

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十) 

再在大循环里面,设定出gameover逻辑的功能,即,停止整个程序,然后报一个声音表示游戏结束。

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十) 

这样一来,整个简易版贪吃蛇程序就完成了!

恭喜你,经过2个月的更新,这个课题几乎就完成了!

 


 

但,运营之后,报错了……

 

为什么一运行就会报错?

这是因为我们忽略了很关键的一点,

 

当蛇的单位为1时,蛇头和蛇身本身就是重叠的……

所以,刚开始,就gameover了……

 

我们回到今天做的程序部分进行一些小优化即可。

 

设定times2变量,因为自动索引是从0开始进行的,所以第一个读取的数据会是0,即蛇头……

Times2,可以理解为,我们手工制作的一个从1开始的索引。

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十)

每次的索引用times减去times2,即可解决这个问题。

而同时,eattimes那边也要改成,长度为,eattimes减1,这样问题就全部解决了!

【EV3进阶】制作小游戏:设定Gameover的游戏结束条件(十)

下次我们正式结束这个课题,也把完整的各个部分重新整理出来给各位参考,程序其实不难。但要充分理解,要花一些精力去整理。

 

完成后,你就可以自己优化啦!

可以增加一下第几关,第几关之类的。很好玩哦。

您必须 登录 才能发表评论!