iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
自我挑戰組

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

Day23 ( 遊戲設計 ) 射擊幽浮

射擊幽浮

教學原文參考:射擊幽浮

這篇文章會介紹如何使用「建立遊戲角色」、「遊戲角色座標」、「遊戲角色碰撞」、「變數」、「[重複迴圈」、「邏輯判斷」等積木,在 micro:bit 實作一個射擊幽浮的射擊小遊戲。

相關文章參考:建立遊戲角色遊戲角色座標遊戲角色碰撞變數重複迴圈邏輯判斷

遊戲方式

射擊幽浮是一款簡單的射擊小遊戲,遊戲開始後,畫面上方會出現一個逐漸往下移動的 UFO,使用者需要操控下方砲塔發射炮彈阻止幽浮往下移動,當砲彈擊中幽浮,幽浮會消失並重新從上方出現,再次向下移動,若幽浮碰到地面,遊戲結束,顯示得分。

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

  • 同時按下 AB 按鈕,開始遊戲 ( 或重新遊戲 )。
  • 按下 A 按鈕,控制砲塔向左移動。
  • 按下 B 按鈕,控制砲塔向右移動。
  • 遊戲開始後按下 AB 按鈕,可以發射炮彈。
  • 砲彈擊中幽浮,得分加 1,幽浮再度從最上方隨機位置出現。
  • 幽浮抵達地面,遊戲結束,顯示得分。

micro:bit - 射擊幽浮

積木程式原理

當啟動時,先定義遊戲啟動與遊戲角色的變數:

  • 變數 run:數值 0,判斷遊戲是否開始 ( 0 表示遊戲尚未開始,1 表示開始 )。
  • 變數 player:砲塔遊戲角色,創建於 (2,4) 座標。
  • 變數 bullet:砲彈遊戲角色,創建於 (0,4) 座標,亮度 0 ( 不顯示 )。
  • 變數 ufo:幽浮遊戲角色,創建於 (2,0) 座標,亮度 0 ( 不顯示 )。

micro:bit - 射擊幽浮

因為按下 AB 按鈕有兩種動作,一種是啟動遊戲,另一種是發射砲彈,所以程式要加入邏輯判斷:

  • 判斷 run 等於 0 ( 遊戲尚未開始或遊戲結束 ) 時:
    • 設定 run 為 1 ( 遊戲開始 )。
    • 設定 score 分數為 0。
    • 設定 fire 開火狀態為 0。
    • 遊戲繼續 ( 搭配遊戲結束時的遊戲暫停 )
    • 設定 ufo 角色的位置、亮度。
  • 判斷 run 不等於 0 時 ( 表示遊戲開始或遊戲正在進行 ):
    • 設定 fire 開火狀態為 1 ( 開火 )

micro:bit - 射擊幽浮

接著設計按下 A 按鈕和 B 按鈕時,移動砲塔的程式:

  • 按下 A 按鈕時,fire 開火狀態設定 0 ( 不開火 ),砲塔角色往左移動。
  • 按下 B 按鈕時,fire 開火狀態設定 0 ( 不開火 ),砲塔角色往右移動。

micro:bit - 射擊幽浮

新增一個重複無限次積木,製作砲彈移動的程式:

  • 判斷如果 run 等於 1 表示遊戲正在進行。
  • fire 變更為 0,避免重複開火 ( 不然程式會變得較複雜 )。
  • 將砲彈移動到砲塔的位置,改變亮度為 30
  • 使用重複 4 次積木,讓砲彈從下移動到頂端
  • 移動到頂端後,砲彈亮度改為 0 隱藏砲彈,並將砲彈移動到最下方

micro:bit - 射擊幽浮

新增第二個重複無限次積木,製作砲彈打到幽浮的程式:

  • 判斷如果 run 等於 1 表示遊戲正在進行。
  • 判斷如果砲彈 bullet 碰到幽浮 ufo
  • 得分 score 增加 1。
  • 幽浮角色再度移動到頂端 ( x 為 0~4 隨機數,y 為 0 )

micro:bit - 射擊幽浮

最後新增第三個重複無限次積木,製作幽浮往下移動的程式:

  • 判斷如果 run 等於 1 表示遊戲正在進行。
  • 每次重複讓 ufo 的 y 座標改變 1 ( 往下移動 )。
  • 如果 ufo 的 y 等於 4,表示撞到地面,run 改為 0 ( 遊戲結束 )
  • 使用遊戲暫停積木,避免遊戲角色影響畫面顯示
  • 遊戲結束後,使用重複迴圈顯示得分 score ( 使用迴圈是為了不斷顯示兩位數得分 )。
  • 使用暫停積木,設定 ufo 移動速度。

micro:bit - 射擊幽浮

完成後,啟動 micro:bit,就可以開始進行設計幽浮的遊戲。

micro:bit - 射擊幽浮

範例解答

範例解答:射擊幽浮

實作「射擊幽浮」的小技巧

  • 為什麼要使用「遊戲角色」呢?

    因為遊戲角色積木很適合處理「互相碰撞」的狀況,也可以很簡單的讓遊戲角色彼此不會互相干擾,對於同一個畫面裡,具有許多不同方向、不同移動速度的角色說,是相當方便的功能。

  • 為什麼要使用「遊戲暫停」和「遊戲繼續」呢?

    因為使用了「遊戲角色」,如果不將遊戲暫停,角色的 LED 燈會影響畫面顯示,進而造成得分無法順利顯示的狀況 ( 只會顯示一次就消失 )。

  • 為什麼不使用內建的「遊戲得分」呢?

    如果使用了內建的「遊戲得分」,顯示得分後會造成「遊戲結束」,然而內建的「遊戲結束」必須重新啟動 micro:bit 才能再次遊戲,所以在這個範例就不使用「遊戲得分」。

關於我

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


上一篇
Day22 ( 遊戲設計 ) 小瑪莉遊戲機
下一篇
Day24 ( 遊戲設計 ) 記憶大考驗
系列文
micro:bit 從入門到精通46

尚未有邦友留言

立即登入留言