老鼠走迷宮
教學原文參考:老鼠走迷宮
這篇文章會介紹如何使用「創建角色」、「角色是否碰到其他角色」、「陣列」、「變數」、「邏輯判斷」、「計次迴圈」、「當按鈕按下」等積木,實作一個老鼠走迷宮的 LED 燈小遊戲。
相關文章參考:創建角色、角色是否碰到其他角色、當按鈕按下、陣列、變數、邏輯判斷。
遊戲方式
老鼠走迷宮是一個簡單的小遊戲,遊戲開始後,下方會有一個「老鼠」的 LED 燈亮起,上方會有「牆壁」不斷往下移動 ( 就像老鼠不斷往上爬 ),使用者需要操縱「老鼠」左右移動閃躲牆壁,如果老鼠撞到牆壁就輸了。使用 micro:bit 的遊戲操作步驟如下:
- AB 按鈕同時按下,開始遊戲。
- 遊戲開始後,下方出現「老鼠」角色 LED,上方出現「牆壁」往下移動 ( 亮度較暗 )。
- 按下 A 按鈕,老鼠角色往左移動。
- 按下 B 按鈕,老鼠角色往右移動。
- 老鼠從道路穿過牆壁就得分。
- 牆壁撞到老鼠,遊戲結束,顯示最後得分。
積木程式原理
首先設定啟動時的變數:
- 變數 mouse 為老鼠角色,座標設定為 (2,4)。
- 變數 list 為一個「二維陣列」,表示不斷降下的「牆壁」
- 二維陣列裡每個陣列,用數字表示表示哪三顆燈要亮起。
- 例如 (1,2,3) 表示亮起第二顆、第三顆和第四顆燈。
- 變數 run 作為遊戲開始的判斷,預設 0。
設定 A、B 按鈕控制老鼠移動的程式,按下 A 按鈕時角色 x 改變 -1 ( 老鼠往左移 ),按下 B 按鈕時角色 x 改變 1 ( 老鼠往右移 )。
設定 AB 按鈕同時按下,遊戲開始的程式:
- 設定分數的變數 score,預設 0。
- 將變數 run 改為 1,表示開始遊戲。
- 新增變數 run2,預設 0,如果後續程式裡變成 1,就會出現第二層牆壁。
- 新增變數 run3,預設 0,如果後續程式裡變成 1,就會出現第三層牆壁。
- 新增變數 time,預設 1000,表示牆壁往下移動的速度 ( 單位毫秒 )。
接著設計「第一層」牆壁往下移動的程式:
- 新增一個「重複無限次」積木。
- 放入邏輯判斷積木,判斷如果 run 等於 1 就執行程式。
- 新增 wall 變數,從 list 陣列中取出隨機項目,作為點亮牆壁燈號的位置。
-
新增三個變數 w0、w1、w2,分別代表三個牆壁燈號角色,依據 wall 變數內容設定座標。
- 建立角色後,將亮度調整為 50 ( 比老鼠的亮度暗 )
- 放入「計次迴圈」:
- 將牆壁角色的 y 設為 index,每次迴圈執行時會往下移動。
- 每次迴圈執行暫停 time 毫秒。
-
如果 index 等於 2 ( 移動到第三次時 ),將 run2 設定為 1,讓第二層牆壁出現。
- 計次迴圈結束後,刪除三個牆壁角色 ( 表示沒有撞到老鼠 )。
- 得分 score 增加 1。
- 暫停 time 毫秒後再次重複。
接著設計「第二層」牆壁往下移動的程式:
- 複製第一層的重複無限次積木 ( 不需要從新開始,複製剛剛的積木再去進行修改 )。
-
將邏輯判斷的 run1 改成 run2。
- 再重複一開始時,將變數 run2 改為 0 ( 避免重複執行 )。
- 將下方所有 w0、w1、w2 變數改成 w3、w4、w5。
-
將計次迴圈裡的變數 run2 改成 run3,讓第三層牆壁出現。
接著設計「第三層」牆壁往下移動的程式:
- 複製第二層的重複無限次積木 ( 不需要從新開始,複製剛剛的積木再去進行修改 )。
-
將邏輯判斷的 run2 改成 run3。
- 將下方所有 w3、w4、w5 變數改成 w6、w7、w8。
- 計次迴圈結束後,讓 time 減少 20 ( 讓牆壁移動的速度變快 )。
在來設計「老鼠碰到牆壁」的程式:
- 新增一個重複無限次積木。
- 放入邏輯判斷積木,判斷如果 run 等於 1,就開始進行碰撞偵測。
- 再放入三組邏輯判斷積木:
- 如果第一層牆壁存在 ( w0 存在 ),老鼠如果碰到 w0 或 w1 或 w2 就暫停遊戲。
- 如果第二層牆壁存在 ( w3 存在 ),老鼠如果碰到 w3 或 w4 或 w5 就暫停遊戲。
- 如果第三層牆壁存在 ( w6 存在 ),老鼠如果碰到 w6 或 w7 或 w8 就暫停遊戲。
- 在判斷 run 等於 1 的邏輯積木之後,新增另外一個邏輯積木
-
判斷「如果遊戲暫停」( 表示遊戲結束 )。
- 將變數 run 設為 0 ( 表示遊戲準備重新開始 )。
- 顯示最後得分。
最後,在按下 A+B 按鈕的積木裡,加入邏輯判斷程式:
-
判斷如果 w0 存在 ( 第一層三個燈還存在 ),就刪除第一層三個燈。
-
判斷如果 w3 存在 ( 第二層三個燈還存在 ),就刪除第二層三個燈。
-
判斷如果 w6 存在 ( 第三層三個燈還存在 ),就刪除第三層三個燈。
- 清空畫面 ( 將顯示分數清除 )。
- 繼續遊戲。
完成後,啟動 micro:Bit,按下 AB 按鈕,就可以開始進行老鼠走迷宮的遊戲。
範例修正
在遊戲的過程中,發現遊戲停止後,分數在某些情形下還會繼續累加,原因在於「計次迴圈」並沒有因為遊戲暫停而停止迴圈,這時只要透過簡單的邏輯判斷修正,判斷如果遊戲正在進行,才進行分數的累計。
範例解答
範例解答:老鼠走迷宮
實作「老鼠走迷宮」的小技巧
-
為什麼要使用這麼多個「角色」呢?
其實更好的做法是使用「陣列」判斷,但因為是透過「積木」來操作,使用陣列會造成積木排列的較為複雜,所以透過 MakeCode 內建的遊戲積木,建立角色,判斷角色碰撞,對於入門者來說較容易理解。
-
為什麼要「判斷角色是否存在」呢?
因為如果在「角色不存在」的狀況下「刪除角色」,會造成程式發生錯誤,所以在刪除角色之前,必須先判斷角色是否存在,如果角色存在,才能刪除角色。
-
為什麼要使用「遊戲繼續」和「遊戲暫停」呢?
因為 MakeCode 遊戲積木裡的「遊戲結束」功能,會讓整塊 micro:bit 功能停止運作,必須重新啟動才能繼續遊戲,且創立角色後,角色會影響 LED 所有的顯示畫面,使用了遊戲暫停就能避免這種情況發生。
關於我
大家好,我是 OXXO,是個即將邁入中年的斜槓青年,如果對我有點興趣(笑,可以與我聯繫,一起來做點有玩又有創意的東西吧!