同志們,雄安新區(qū)都成立了,你們說,中國的變化快不快?!
在這樣一個蘊含無數(shù)機會的變化面前,我們常常誤以為自己可以抓住其中一些機會,然后卻忘了努力。
孩子們也是如此。
不要讓孩子們錯失機會,那就趕緊跟上步伐,學習編程吧!
在未來幾次教程里,我們學習如何利用“直到”(until)來完成一些不知道要循環(huán)多少次的循環(huán)指令。
知識點
until是“直到”的意思。舉個例子,“I will not wake up until 7 a.m.” 就是我直到早上7點才會起床。
在CodeMonkey里,我們可以用“until near match”來表示“直到接近火柴”。
完整的用法是:
until near match
? ? ? ? step 1
表示“直到接近火柴之前,我們要(不停地)走1步?!?/p>
也就是說,在沒有達到火柴之前,我們不能停下,每次都要走1步。當然,這里的火柴(match)也可以是別的對象。
下面跟著我一起闖關(guān)吧!今天我們一起來玩玩第86-90關(guān),看看怎么用until玩得更有意思。
第86關(guān)

我們看看界面。

在左側(cè)的畫面里,小老鼠需要撿起火柴,放在火柴堆里。
右側(cè)是代碼框,代碼如下:

我先解釋一下代碼:
第1,2行:直到靠近火柴之前,走1步;
第3行:撿起火柴;
第4,5行:直到靠近火柴堆之前,走1步;
很明顯,小老鼠走到火柴堆之后,需要把火柴放下,于是代碼可以像這樣補充:

第6行:放下火柴。
點擊看看效果吧!

三星通關(guān)!

第87關(guān)

上圖中猴博士的意思是,near這個代碼可以返回一個結(jié)果,如果小老鼠靠近目標,返回yes,否則返回no。這個返回的結(jié)果需要用say來表示出來。

在左側(cè)的畫面里,依然是和上一關(guān)一樣的畫面,小老鼠依然需要撿起火柴放在火柴堆上。
在右側(cè)的代碼框里,我們看到如下代碼:

在上述的第3行代碼里,near match會一直返回no,直到小老鼠接近火柴之后。
第4,5行明顯有問題,撿起來直接就放下的,那是深蹲。所以我們要把第5行代碼放在第8行。
更改后的代碼如下:

點擊運行,看看效果吧!

三星通關(guān)!

第88關(guān)

until指令是在不知道要循環(huán)多少次的情況下使用的,只有當until后面的條件得到滿足的情況下,循環(huán)才會終止。

在左側(cè)的畫面里,小老鼠,火柴,火柴堆不再在同一條水平線上,所以小老鼠再撿起火柴之后需要轉(zhuǎn)向火柴堆,然后再走到火柴堆那放下火柴。
代碼如下:

我們需要在第3行寫上grab()指令,讓小老鼠撿起火柴。
在第4行寫上turnTo pile指令,讓小老鼠轉(zhuǎn)向火柴堆。
在第7行寫入drop()指令,讓小老鼠放下火柴。
我給出的代碼如下:

點擊運行,看看效果吧!

三星通關(guān)!

第89關(guān)

在這一關(guān)里,內(nèi)容基本和前三關(guān)一致。

故事內(nèi)容依然是:小老鼠需要把火柴放在火柴堆上。
我們看看代碼:

看完代碼,我們就發(fā)現(xiàn)問題了:第4行的指令是面向火柴堆,但是小老鼠在面向火柴堆之后,居然只走了4步。
難道小老鼠會大跨步向前進?難道火柴堆會自動漂移?
所以我們可以這樣改:

點擊運行,看效果:

可惜,最后只得到兩顆星!

提示是:用6行代碼解決問題。
好吧,我們可以不用until,直接把step 4改成step distanceTo pile即可。
代碼如下:

點擊運行,看效果!

三星通關(guān)!

第90關(guān)

猴博士是不是夸錯了,我覺得應(yīng)該夸我們聰明的孩子們啊~
原來,這一關(guān),螞蟻會拖著火柴走,讓小老鼠和火柴之間的距離時刻變化。

在左側(cè)的界面里,我們看到老鼠沒有直接面向火柴。右側(cè)的代碼框里的代碼如下:

我們需要把turn left放在最前面,把step 1 放在until 下面,原因是,在接近火柴之前不停左轉(zhuǎn)是沒有用的。
之后的代碼和前幾關(guān)一樣,在小老鼠從螞蟻手里搶到火柴之后,就要讓小老鼠面向火柴堆,然后走向火柴堆,放下火柴。這些動作可以用如下的第5-7行代碼實現(xiàn)。

點擊運行,看看效果吧!

三星通關(guān)!

后記:
今天你學會使用until了嗎?
下一次,我們會在新的關(guān)卡中繼續(xù)學習和使用until!