今天我们一起玩until循环的最后5关:第96-100关。
这几关增加了猫咪抓老鼠的环节,游戏更加有趣,也让小孩子们更加理解为什么要使用until循环:直到猫睡觉之前,小老鼠是不能轻举妄动的!这也是until循环与for循环的最大区别:在for循环里,我们知道循环次数;但是在until循环里,我们不知道循环次数。这在实际中是真实存在的,比如,我们不知道性情难以捉摸的猫咪什么时候睡觉,因为只有当猫咪睡觉之后,小老鼠才能活动起来!
Until the cat is sleeping, the mouse can go to the match and grab it!
So, let's begin!
哎呀,我的英文水平暴露了。。。
第96关

我们已经提出,这几关里,小老鼠需要等待猫咪睡着之后,才可以动身去捡火柴。
我们先看看这一关的画面:

小老鼠啊,你趴在火柴堆上干什么啊。。。
你这样貌似也不能隐身啊。。。
不管如何,还是先看看右边的代码吧:

在这个代码里,第1-3行定义了goto函数,第4-8行定义了collect函数。
第11-14行是正式的操作指令:小老鼠在猫咪睡着之前保持等待状态,在猫咪睡着后走15步。其中wait()指令表示等待!
很明显,问题出在这个step 15上,走15步与上面定义的两个函数没有任何关系,也无法让小老鼠捡起火柴放回火柴堆。
下面是我修改后的代码:

只需要把step 15改成collect match就可以啦!
点击运行看效果!

满分通关!

第97关

用wait指令等待猫咪睡觉,这个我们在上一关就看到了。

看左边的画面框,我们发现,其实这一关比上一关多了2根火柴而已。不过小老鼠携带能力有限,一次只能捡起一根火柴。要让小老鼠依次收集这三根火柴,我们需要使用for循环。
看看右边的代码框:

第1-3行仍然是定义goto函数,第4-8行定义collect函数。
下面是我给出的一个解决方案:

第9-12行,让小老鼠每次收集一个火柴,注意要用until循环让小老鼠在猫咪睡着时去收集火柴。
如果在小猫咪醒着的时候去捡火柴,小老鼠会被猫咪追赶,并被吓得落荒而逃。
点击运行看效果!

这是小老鼠收集第一根火柴的过程。

这是小老鼠收集第三根火柴的过程。
满分通关!

第98关

其实,前两关里的until代码可以放在函数里面,比如放在collect函数里,也就是在小老鼠在去收集火柴之前等待猫咪睡着。
先看看这一关的界面:

在左边的画面框里,小老鼠需要过一座木桥,再去收集火柴。这没有什么难度,多一行goto bridge代码就可以解决。
我们看看右边的代码框:

第1-3行仍然定义goto函数。
第6-11行定义safeCollect函数,在这个函数里,我们需要在goto t之前加入until循环,也就是在去收集之前等待猫咪睡着。
我给出的修改方案如下:

点击运行看效果,这里我只给出小老鼠收集第一根火柴时的过程。

满分通关!

第99关

这一关与前几关的不同之处在于,在这一关里,火柴是被蚂蚁拖着不停运动着的。所以我们需要把前几关的goto函数改成chase函数。

在左侧的画面框里,我们可以看到火柴是被蚂蚁拖着不停运动着的。
在右侧的代码框里,系统把前几关的goto函数改成chase函数。

我们需要定义chase函数,chase是追逐的意思,也就是小老鼠要不断面向火柴,并走向火柴,直到从蚂蚁手里抢到火柴。
另外,在safeCollect函数里,我们依然需要像在第98关里一样,加入until循环,让小老鼠不被猫咪抓到!

点击运行看看效果!

还不错,满分通关!

第100关
今天的最后一关!

猴博士好大的口气,再来三个。。。什么?
是再来三个运动着的火柴!

左边的画面框是我们熟悉的界面,小老鼠在每次出去从蚂蚁手里抢火柴之前,需要等待猫咪睡着。
右边的代码框里什么都没有。
我根据前几关的经验,写出的代码如下:

第1-4行,定义chase函数。
第5-9行,定义collect函数。
第11-14行,让小老鼠收集每一根火柴。
当然,我们也可以把until代码放在collect函数里,然后把collect函数改写成safeCollect函数,代码如下,我就不解释了:

我们按照第一个版本的代码运行,看看效果如何!

这是小老鼠追逐第一根火柴的过程。

这是小老鼠追逐第三根火柴的过程。
满分通关!

结语:
until函数对于循环次数不定的情况,比for循环更加灵活!
----------------------------------------------------------------------华丽的分割线----------------------------------------------------------------------
下一次教程,我们将学习if判断语句,期待if语句可以让我们写出更加强大而灵活的代码!

网友评论