iT邦幫忙

2021 iThome 鐵人賽

DAY 29
0
自我挑戰組

micro:bit 從入門到精通系列 第 29

Day29 ( 遊戲設計 ) 太鼓達人

太鼓達人

教學原文參考:太鼓達人

這篇文章會大量使用「陣列」的操作,搭配「變數」、「邏輯判斷」、「點亮」、「[計次迴圈」、「邏輯判斷」等積木,在 micro:bit 實作一個類似太鼓達人的節奏小遊戲。

相關文章參考:陣列變數計次迴圈點亮邏輯判斷

遊戲方式

太鼓達人是一款用按鈕和 LED 燈互動的節奏小遊戲 ( 如果能搭配蜂鳴器的音效更好 ),遊戲開始後,會有鼓點 ( 光點 ) 按照一定的節奏,從上而下移動,當鼓點移動到指定位置時,按下 A 或 B 按鈕進行「打鼓」的動作,如果有打到則得分。

如果使用 micro:bit 實作,遊戲操作步驟如下:

  • 同時按下 AB 按鈕,開始遊戲 ( 或重新遊戲 )。
  • 按下 A 按鈕,在指定位置打擊左側鼓點。
  • 按下 B 按鈕,在指定位置打擊右側鼓點。
  • 鼓點被打鼓後就會消失,得分加一。
  • 如果有三次沒有打鼓成功,遊戲結束,顯示得分。

micro:bit - 太鼓達人

積木程式原理

首先設計「一串鼓點」的移動,因為有鼓點不會只有一點,所以使用陣列來呈現:

  • 當啟動時,新增一個名為 a 的陣列,陣列長度以「4 的倍數」為單位,本篇文章的範例,建立一個長度為 8 的陣列,1 表示亮燈,0 表示熄燈 ( 通常節拍都會是 4 的倍數,例如 4 拍、8 拍 )。
  • 新增另一個名為 a_length 的變數,紀錄 a 陣列的長度

micro:bit - 太鼓達人

新增一個重複無限次積木,製作燈號從上往下移動的動畫效果:

  • 放入「計次迴圈」,次數為 0 ~ a 陣列的長度 ( a_length )。
  • 放入邏輯判斷,判斷如果 a 的項目值為 1,就點亮 y 為 4-index 的燈 ( 如此一來才能反轉陣列,從上到下的移動 )
  • 如果 a 的項目值不等於 1,就熄滅 y 為 4-index 的燈
  • 計次迴圈結束後,將 a 的第一個項目,移動到最後一個項目
  • 暫停 500 毫秒。

不用擔心 y 如果大於 4 或小於 0,點亮或不點亮的積木,會自動忽略超過範圍的數值

micro:bit - 太鼓達人

完成後啟動 micro:bit,就會看見燈光不斷往下移動。

micro:bit - 太鼓達人

因為遊戲開始時,鼓點會從最上方出現,所以要修改程式:

  • 當啟動時:
    • 使用「重複 5 次」迴圈,在陣列 a 前面加入五個內容為 0 的元素 ( 如此一來,在最初的顯示就完全不會亮燈 )
  • 重複無限次:
    • 增加邏輯判斷,判斷「新的 a 陣列」( 加入五個項目的陣列 ) 長度如果大於原本的 a 陣列,在每次重複時,移除第一個項目
    • 當「新的 a 陣列」( 逐步移除第一個項目的陣列 ) 長度等於原本的 a 陣列,就繼續原本的動畫程式。

micro:bit - 太鼓達人

完成後,啟動 micro:bit 就能看到燈號不是從最下面出發,而是從最上方開始移動

micro:bit - 太鼓達人

了解原理後,將啟動時的陣列,全部搬移到「當按下 A+B 按鈕」積木裡,作為遊戲開始使用:

  • 當啟動時積木裡,加入 run 等於 0 的變數,作為判斷遊戲是否開始的依據。
  • 當按下 A+B 按鈕,判斷 run 等於 0:
    • run 等於 0 表示遊戲尚未開始,讓 run 等於 1。
    • 新增 end 等於 3 的變數,判斷打鼓失誤三次就讓遊戲結束
    • 新增 score 等於 0 的變數,作為計分使用。
    • 新增 time 等於 500 的變數,方便控制鼓點的速度。
    • 加入點亮 (0,3)、(2,3)、(4,3) 的燈,提示使用這在這個位置要打鼓
  • 當按下 A+B 按鈕,判斷 run 等於 1:
    • 遊戲開始後,A+B 按鈕變成打鼓模式。
    • 當鼓點進入 (1,3) 時,將燈號熄滅
    • 因為燈號陣列在進入時,會做陣列位置的變換 ( 第一個項目此時會在 y=4 的位置 ),如果打鼓成功,就將第一個項目的內容改為 2 ( 如此一來,迴圈暫停結束後,該位置就不會亮燈 )

micro:bit - 太鼓達人

將打鼓模式的積木,複製一份到「當按下 A 按鈕」的積木裡。

micro:bit - 太鼓達人

接著修改 a 陣列的重複無限次積木:

  • 加入邏輯判斷,判斷 run 等於 1 的時候才開始
  • 計次迴圈的判斷裡,新增邏輯判斷:
    • 如果第一個項目等於 1,且移動到最下面,表示打鼓失敗,end 減少 1
    • 如果第一個項目等於 2,且移動到最下面,表示打鼓成功,分數增加 1,將第一個項目改回 1
    • 如果第一個項目等於 0 ( 不等於 1 也不等於 2 ),就執行原本的程式。

micro:bit - 太鼓達人

新增一個重複無限次積木,判斷 end 等於 0 的時候,顯示分數,並將 run 設定為 0 ( 表示遊戲結束 )

micro:bit - 太鼓達人

最後,如法泡製,新增另外一個 b 陣列以及按下 B 按鈕的程式 ( 基本上都和 a 相同 ),就能做到同時有兩個鼓點出現的效果。完成後,啟動 micor:bit,就可以開始進行太鼓達人的遊戲。

micro:bit - 太鼓達人

範例解答

範例解答:太鼓達人

實作「太鼓達人」的小技巧

  • 對於「陣列」的應用不熟悉,該如何開始呢?

    可以先參考以下三篇文章,幫助自己釐清陣列操作 LED 的觀念:陣列點燈 ( 顯示圖形 )陣列點燈 ( 動畫 )移動速度不同的燈。

  • 為什麼 A+B 按鈕也要判斷「run 是否等於 1」?

    因為太鼓達人在遊戲過程中,常常會出現 A+B 按鈕一起按下的狀況,為了不讓「啟動」和「遊戲」搞混,所以要多增加「run 是否等於 1」的判斷。

關於我

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,如果對我有點興趣(笑,可以與我聯繫,一起來做點有玩又有創意的東西吧!


上一篇
Day28 ( 遊戲設計 ) 吃角子老虎機
下一篇
Day30 ( 遊戲設計 ) 貪吃蛇
系列文
micro:bit 從入門到精通46

尚未有邦友留言

立即登入留言