今天我們一起玩until循環(huán)的最后5關(guān):第96-100關(guān)。
這幾關(guān)增加了貓咪抓老鼠的環(huán)節(jié),游戲更加有趣,也讓小孩子們更加理解為什么要使用until循環(huán):直到貓睡覺之前,小老鼠是不能輕舉妄動(dòng)的!這也是until循環(huán)與for循環(huán)的最大區(qū)別:在for循環(huán)里,我們知道循環(huán)次數(shù);但是在until循環(huán)里,我們不知道循環(huán)次數(shù)。這在實(shí)際中是真實(shí)存在的,比如,我們不知道性情難以捉摸的貓咪什么時(shí)候睡覺,因?yàn)橹挥挟?dāng)貓咪睡覺之后,小老鼠才能活動(dòng)起來!
Until the cat is sleeping, the mouse can go to the match and grab it!
So, let's begin!
哎呀,我的英文水平暴露了。。。
第96關(guān)
我們已經(jīng)提出,這幾關(guān)里,小老鼠需要等待貓咪睡著之后,才可以動(dòng)身去撿火柴。
我們先看看這一關(guān)的畫面:
小老鼠啊,你趴在火柴堆上干什么啊。。。
你這樣貌似也不能隱身啊。。。
不管如何,還是先看看右邊的代碼吧:
在這個(gè)代碼里,第1-3行定義了goto函數(shù),第4-8行定義了collect函數(shù)。
第11-14行是正式的操作指令:小老鼠在貓咪睡著之前保持等待狀態(tài),在貓咪睡著后走15步。其中wait()指令表示等待!
很明顯,問題出在這個(gè)step 15上,走15步與上面定義的兩個(gè)函數(shù)沒有任何關(guān)系,也無法讓小老鼠撿起火柴放回火柴堆。
下面是我修改后的代碼:
只需要把step 15改成collect match就可以啦!
點(diǎn)擊運(yùn)行看效果!
滿分通關(guān)!
第97關(guān)
用wait指令等待貓咪睡覺,這個(gè)我們?cè)谏弦魂P(guān)就看到了。
看左邊的畫面框,我們發(fā)現(xiàn),其實(shí)這一關(guān)比上一關(guān)多了2根火柴而已。不過小老鼠攜帶能力有限,一次只能撿起一根火柴。要讓小老鼠依次收集這三根火柴,我們需要使用for循環(huán)。
看看右邊的代碼框:
第1-3行仍然是定義goto函數(shù),第4-8行定義collect函數(shù)。
下面是我給出的一個(gè)解決方案:
第9-12行,讓小老鼠每次收集一個(gè)火柴,注意要用until循環(huán)讓小老鼠在貓咪睡著時(shí)去收集火柴。
如果在小貓咪醒著的時(shí)候去撿火柴,小老鼠會(huì)被貓咪追趕,并被嚇得落荒而逃。
點(diǎn)擊運(yùn)行看效果!
這是小老鼠收集第一根火柴的過程。
這是小老鼠收集第三根火柴的過程。
滿分通關(guān)!
第98關(guān)
其實(shí),前兩關(guān)里的until代碼可以放在函數(shù)里面,比如放在collect函數(shù)里,也就是在小老鼠在去收集火柴之前等待貓咪睡著。
先看看這一關(guān)的界面:
在左邊的畫面框里,小老鼠需要過一座木橋,再去收集火柴。這沒有什么難度,多一行g(shù)oto bridge代碼就可以解決。
我們看看右邊的代碼框:
第1-3行仍然定義goto函數(shù)。
第6-11行定義safeCollect函數(shù),在這個(gè)函數(shù)里,我們需要在goto t之前加入until循環(huán),也就是在去收集之前等待貓咪睡著。
我給出的修改方案如下:
點(diǎn)擊運(yùn)行看效果,這里我只給出小老鼠收集第一根火柴時(shí)的過程。
滿分通關(guān)!
第99關(guān)
這一關(guān)與前幾關(guān)的不同之處在于,在這一關(guān)里,火柴是被螞蟻拖著不停運(yùn)動(dòng)著的。所以我們需要把前幾關(guān)的goto函數(shù)改成chase函數(shù)。
在左側(cè)的畫面框里,我們可以看到火柴是被螞蟻拖著不停運(yùn)動(dòng)著的。
在右側(cè)的代碼框里,系統(tǒng)把前幾關(guān)的goto函數(shù)改成chase函數(shù)。
我們需要定義chase函數(shù),chase是追逐的意思,也就是小老鼠要不斷面向火柴,并走向火柴,直到從螞蟻手里搶到火柴。
另外,在safeCollect函數(shù)里,我們依然需要像在第98關(guān)里一樣,加入until循環(huán),讓小老鼠不被貓咪抓到!
點(diǎn)擊運(yùn)行看看效果!
還不錯(cuò),滿分通關(guān)!
第100關(guān)
今天的最后一關(guān)!
猴博士好大的口氣,再來三個(gè)。。。什么?
是再來三個(gè)運(yùn)動(dòng)著的火柴!
左邊的畫面框是我們熟悉的界面,小老鼠在每次出去從螞蟻手里搶火柴之前,需要等待貓咪睡著。
右邊的代碼框里什么都沒有。
我根據(jù)前幾關(guān)的經(jīng)驗(yàn),寫出的代碼如下:
第1-4行,定義chase函數(shù)。
第5-9行,定義collect函數(shù)。
第11-14行,讓小老鼠收集每一根火柴。
當(dāng)然,我們也可以把until代碼放在collect函數(shù)里,然后把collect函數(shù)改寫成safeCollect函數(shù),代碼如下,我就不解釋了:
我們按照第一個(gè)版本的代碼運(yùn)行,看看效果如何!
這是小老鼠追逐第一根火柴的過程。
這是小老鼠追逐第三根火柴的過程。
滿分通關(guān)!
結(jié)語:
until函數(shù)對(duì)于循環(huán)次數(shù)不定的情況,比for循環(huán)更加靈活!
----------------------------------------------------------------------華麗的分割線----------------------------------------------------------------------
下一次教程,我們將學(xué)習(xí)if判斷語句,期待if語句可以讓我們寫出更加強(qiáng)大而靈活的代碼!