猴子接香蕉
這篇文章會介紹如何使用「創建角色」、「角色是否碰到其他角色」、「當按鈕按下」、「變數」、「重複判斷」、「計次迴圈」等積木,實作一個猴子接香蕉的 LED 燈小遊戲。
相關文章參考:創建角色、角色是否碰到其他角色、當按鈕按下、變數、重複判斷。
遊戲方式
猴子接香蕉是一個簡單的小遊戲,遊戲開始後,會有「香蕉」不斷從上方掉落,使用者需要操縱「猴子」在下方左右移動接香蕉,如果香蕉到地面上就輸了。使用 micro:bit 的遊戲操作步驟如下:
- AB 按鈕同時按下,開始遊戲。
- 遊戲開始後,下方出現「猴子」角色 LED,上方出現「香蕉」角色 LED 掉落 ( 亮度較暗 )。
- 按下 A 按鈕,猴子角色往左移動。
- 按下 B 按鈕,猴子角色往右移動。
- 猴子碰到香蕉,就得分。
- 香蕉掉落地面,遊戲結束,出現最後總得分。
積木程式原理
首先設定按鈕控制猴子移動的程式:
- 當啟動時,建立兩個變數
- monkey:座標 (2,4) 的猴子角色。
- run:判斷遊戲是否開始的變數,預設值 0。
- 當按鈕 A 按下時,monkey 的 x 改變 -1 ( 往左移動 )。
- 當按鈕 B 按下時,monkey 的 x 改變 1 ( 往右移動 )。
完成後,啟動 micro:Bit,按下 A 按鈕或 B 按鈕,控制下方猴子燈號移動。
接著設計遊戲開始程式:
- 放入當按鈕 A+B 按下時的積木。
- 得分設定為 0。
- 將變數 run 設定為 1 ( 表示遊戲開始 )。
- 新增變數 time 為 500 ( 香蕉掉落速度,單位為毫秒 )。
香蕉掉落程式:
- 放入重複無限次積木。
- 每次重複時,判斷 run 是否等於 1,等於 1 才讓香蕉開始掉落 ( 開始遊戲 )。
- 建立 banana 遊戲角色,x 位置為 0~4 的隨機數,y 為 0。
- 將 banana 角色亮度設定為 50 ( 比猴子暗 )。
- 放入計次迴圈,次數設定為 4 次,每次重複執行:
- 讓香蕉的位置等於 index 的數值 ( 香蕉往下移動 )。
- 暫停 time 豪秒。
- 計次迴圈結束後:
- 刪除 banana 角色。
- 將 time 減少 20 ( 這樣每次香蕉出現都會掉落得更快 )。
完成後,啟動 micro:Bit,同時按下 AB 按鈕,就會出現香蕉不斷的從上而下掉落。
接著設計「猴子吃到香蕉」的程式:
- 新增另外一個重複無限次積木。
- 判斷如果 run 等於 1,表示遊戲開始。
- 再次判斷如果 monkey 角色碰到 banana 角色:
- 讓得分增加 1。
- 刪除 banana 的角色。
完成後,啟動 micro:Bit,如果 monkey 碰到 banana 就會得分,並且出現得分動畫效果。
修改香蕉掉落的程式,加入沒有吃到香蕉時,就表示遊戲結束的程式:
- 將計次迴圈的次數從 4 改成 5 ( 因為在落地 4 的瞬間,吃到香蕉還是算吃到,但如果超過 4 就表示沒吃到 )。
- 放入第一個邏輯判斷,判斷香蕉如果已經被刪除 ( 被吃掉了 ),就跳出迴圈。
- 放入第二個邏輯判斷,判斷如果 index 等於 5 ( 表示香蕉超過地面,沒吃到香蕉 ):
- 刪除香蕉角色。
- 將變數 run 設為 0 ( 表示遊戲結束 )
- 暫停遊戲。
- 顯示遊戲得分。
最後,在按下 A+B 按鈕的積木裡,新增「清空畫面」以及「遊戲繼續」的積木。
完成後,啟動 micro:Bit,按下 AB 按鈕,就可以開始進行猴子接香蕉的遊戲。
範例解答
範例解答:猴子接香蕉
實作「猴子接香蕉」的小技巧
為什麼要使用兩個「重複無限次」呢?
因為如果把「香蕉掉落」和「接香蕉」的程式放在一起,會被香蕉掉落的「延遲時間」影響,造成程式較為複雜且不容易管理,所以將程式分開,觀念上也比較容易理解。
為什麼要使用「遊戲繼續」和「遊戲暫停」呢?
因為 MakeCode 遊戲積木裡的「遊戲結束」功能,會讓整塊 micro:bit 功能停止運作,必須重新啟動才能繼續遊戲,且創立角色後,角色會影響 LED 所有的顯示畫面,使用了遊戲暫停就能避免這種情況發生。
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~