[Scratch] 摧毀潛艦遊戲 (Destroy the Submarines)
最近用 Scratch 寫了「摧毀潛艦遊戲 (Destroy the Submarines)」,
自己覺得應該是我的 Scratch 裡最好玩的遊戲吧~
其實它就是以前掌上型遊戲機很常見的類型,
可以操控海面上的船,用炸彈去丟敵人潛艦,
以前玩的敵人還有飛機會來攻擊,
不過考慮到畫面大小以及操控性的問題,
就不做飛機的部分了~
先來看一下完成的遊戲畫面:
簡述一下程式幾個重點:
1. 左右方向鍵移動船艦
用方向鍵移動角色,有至少兩種作法。
一種是在「當方向鍵被按下」時,改變 X 坐標。
但這種的缺點是卡頓感很明顯,
因為事件的觸發似乎不是那麼快…
因此我這邊用的是第二種作法,
那就是在迴圈中持續檢測是否方向鍵被按下,是的話就改變 X 坐標。
這種做法船隻移動起來比較順暢:
2. 決定敵人潛艦數量
遊戲一開始有難度的選擇,
但隨著遊戲的進行,增加挑戰難度也是必須的~
因此會讓敵人潛艦的數量隨著分數提昇而增加:
3. 決定敵人潛艦方向與速度
潛艦要嘛就是從畫面的左邊出現、要嘛就是從右邊出現,
不過如果每艘速度都一樣的話,就有點千篇一律。
因此先從一段負數到正數間的值,取得一個值代表速度,
正的話表示往右 (X 坐標變大),負的話表示往左 (X 坐標變小)。
方向就是用 +1 表示往右,-1 表示往左:
4. 按空白鍵丟下炸彈
這裡不需要太過快速的對空白鍵事件連續反應,
因此只要在空白鍵被按下時,再做處理就行了。
為了避免太快速的丟炸彈,
我這邊用了 timer (計時器),
如果上次丟炸彈的時間離現在已經超過 0.3 秒,
才允許產生炸彈的分身:
炸彈的動作很簡單,
就是在迴圈裡持續的往下移動,並偵測是否接觸到了潛艦。
接觸到的話,會希望在接觸到的點產生一個爆炸的角色。
這個接觸點,應該是可以在「炸彈」與「潛艦」的中央,
但潛艦同時有好幾艘,炸彈怎麼知道打到哪個潛艦呢?
我的做法是發送一個訊息 CheckIfHit,並等待回應
(也就是要所有接收到訊息的人都處理完),
當潛艦收到訊息時,它就檢查自己是否有接觸到炸彈,
有的話就設定變數 ExplodeEnemyY,
這樣炸彈待會就知道爆炸點的 Y 坐標應該在哪了:
5. 敵人潛艦發射飛彈
敵人潛艦也是會發射飛彈來攻擊玩家的~
在隨機的時間,潛艦就會在它所在的地方,
產生一個飛彈的分身,
這個飛彈一開始會朝向指定的方向。
指定的方向,以隨機的方式,決定是要亂打,
或是朝玩家船艦的方向附近打。
飛彈移動時,時時偵測自己是否打中了玩家,
或是已經到畫面邊緣該消失了:
這個 Scratch 遊戲其實並不複雜,
但遊戲效果挺不錯的,
有興趣的人可以到 摧毀潛艦遊戲 (Destroy the Submarines) 來玩玩看喔~^^