流程控制的練習

在前面的例子中我們使用到的「重複無限次」積木,讓我們想要一直不斷地執行的作業無限期地重覆,直到按下「停止執行按鈕」才會停止這些作業。

在問題的解決步驟中會有許多種不同的變化,在基本上以步驟的流程來看,大概不會脫離以下三種流程執行的結構:

  • 循序執行結構

  • 選擇結構

  • 重複結構

循序執行

循序執行非常直覺,就是當一個事件發生的時候,例如角色被點擊的時候,或是某一個按鍵被按下去的時候,依附於該事件積木下的程式積木依序一個一個地執行下去,這就是循序執行的方式。

而在Scratch中比較特別的是,由於它可以平行地處理所有的事件,因此雖然大家都是循序地在執行每一個積木,但是依附在不同事件中的積木,它們的執行先後次序卻無法判斷,這是在設計程式時要特別留意的地方。

以下是循序執行的例子:

在這個例子中,Scratch舞台上的角色在按下開始執行按鈕之後,會以10點為一步,總共前進了4步。

重複結構

從上面的例子中,同學們應該可以看到有許多的步驟其實是一直不斷地重複出現,每一步都是前進10點、換下一個造型、等待一秒,總共重複了4次,因此在畫面上看起來是前進了4步。如果以此種寫法的話,要前進10步就要使用30個積木,相信應該沒有人會這麼做。對於這些重複的事情,很明顯地就需要使用合適的積木來指定某些積木要重複的次數,以上面這個例子,可以修改為如下:

使用重複程式積木,可以自由地指定要重複的積木內容以及次數,很有效率地解決了前面所提到的問題,而且,因為只要在次數的地方指定一-個想要重複的數字,此時就可以讓舞台上的角色一次走更多步。

選擇結構

當角色在畫面上走了許多步之後,就會遇到一些可能發生的情況,例如角色走著走著就碰到了舞台的邊界。在前面單元中的例子,我們使用了「碰到邊緣就反彈」的程式積木來解決這個問題,如下所示:

而碰到邊緣就反彈這個積木,假設我們只考慮在舞台中進行左右移動的話,其實隱含了以下的邏輯判斷:

碰到邊緣時,如果現在的角度是 90 度,就把面向的角度改為-90度,否則就把面向的角度改為90度。

由於它會牽涉到目前的角度,因此在程式中需要使用到「方向」這個數值,修改角度的積木如下:

再加上偵測碰到邊緣的積木,如下所示:

也就是上面這一段程式積木,「基本上」在水平方向上約略等於「碰到邊緣就反彈」這個程式積木。我們把它整合到原有的程式,就變成如下所示的樣子:

碰到邊緣就反彈這個積木可以處理任何的角度,而上面取代的程式碼只考慮到水平反轉而已,請同學們留意。