ARCADE ▶ GUAVA CANNON
芭樂砲手
Max 扛起芭樂砲,把躲在木頭塔上的蟲兵炸飛!拖曳瞄準、看著虛線抓拋物線,炸掉地形讓蟲兵掉下去,或是推動巨石把牠們壓扁。共 8 關,砲彈無限,但用越少發拿越多星星。
玩法說明
蟲兵占領了木頭塔!Max 扛著芭樂砲站在左邊的石台上,要用芭樂砲把每一隻蟲兵都打倒。砲彈打不完,只要愛心還在,就可以一直打。
怎麼打
- 手機/滑鼠:按住畫面,往想打的方向拖。手指在 Max 的哪個方向,砲管就轉向哪裡;手指離 Max 越遠,力道越大。放開就發射。
- 可以發射的時候,畫面上會一直有一條虛線,就是芭樂砲彈的飛行路線。拖曳時虛線會變亮,Max 頭上會顯示角度和力道,旁邊的直條也是力道。
- 鍵盤:← → 轉動砲管、↑ ↓ 調整力道、空白鍵發射,按 R 可以重來。點一下方向鍵只會轉 1 度(力道 1%),方便微調;按住會先慢慢轉,一秒後才加速。
- 每次只能有一顆砲彈在空中,落地爆炸後才能打下一發。
三種打倒蟲兵的方法
| 方法 | 說明 |
|---|---|
| 直接命中 | 砲彈打到蟲兵身上或旁邊,直接把牠炸飛 |
| 壓扁 | 炸掉巨石旁邊或下面的木頭,讓巨石滾下去壓扁蟲兵 |
| 掉下去 | 把蟲兵腳下的木頭炸掉,讓牠掉出畫面,或從高處摔下來 |
很多關卡用巨石或炸地形,一發就能解決好幾隻,比一隻一隻打更容易拿到三星。
地形
- 木頭(橘色):炸得壞,每次爆炸都會挖出一個圓形的洞。
- 石頭(灰色):炸不壞,蟲兵常常躲在石頭屋頂下面。
會反擊的蟲兵
頭上有紅色「!」的蟲兵會丟蟲蛋。牠舉起蟲蛋的時候就是要丟了,蟲蛋砸到 Max 附近會扣一顆愛心,三顆都沒了就失敗。用芭樂砲彈打中飛過來的蟲蛋可以攔截。
星星與關卡
上方的「芭樂 3/2」代表這一關已經打了 3 發、2 發內過關可以拿三星,超過門檻數字會變紅。打倒所有蟲兵就過關,用的砲彈越少星星越多:在門檻內三星、多 1 發兩星,再多就是一星。過關後會解鎖下一關,星星和進度會記在這台裝置的瀏覽器裡。
全螢幕
遊戲下方的「全螢幕」按鈕可以讓遊戲鋪滿螢幕,再按一次或點右上角的 ✕ 就能退出。這款是直式遊戲,手機直拿就能玩。
開發筆記
靈感
這款的靈感來自最近在 IG 上常看到的火箭筒物理解謎小遊戲廣告:主角站在一邊,對面的高塔上有敵人和一顆大石頭,畫面上有一條虛線告訴你砲彈會飛去哪。最好玩的瞬間,是炸掉石頭下面的木頭,看石頭滾下去把敵人壓扁。
我把它改成 GUAVAMAX 的風格:主角換成遊戲廳裡的 Max(芭樂可頌大對決的那位),火箭筒換成會發射芭樂的「芭樂砲」,敵人則是戴著鋼盔的紅色蟲兵。
可以炸壞的地形
地形不是一塊一塊的方塊,而是一張 160 × 256 的「點陣圖」,每一格記一個數字:
const AIR = 0, WOOD = 1, ROCK = 2;
const T = new Uint8Array(W * H); // 每個像素一格
爆炸的時候,把半徑內所有 WOOD 的格子改成 AIR,地形就被挖出一個圓洞,石頭則保持原樣。挖完之後把整張點陣圖重新畫一次,木頭的紋路、邊框和頂面的亮色都是依照「這一格的上下左右是不是空氣」即時算出來的,所以炸出來的洞邊緣也會有描邊。
會滾的巨石
巨石是一個圓。每一個小步驟,我在圓周上取 24 個點,看哪些點卡進地形裡,把這些點的方向加起來,就是地面推巨石的方向(法線):
for (const [cx, cy] of RING) {
if (solidAt(w, b.x + cx * b.r, b.y + cy * b.r)) { nx -= cx; ny -= cy; }
}
接著把巨石沿著法線推出地形,再把「往地面裡面撞」的那部分速度抵銷掉。剩下沿著地面的速度加上重力,巨石在斜坡上就會自己往下滾;在平地上重力和地面互相抵消,就會乖乖停住。速度夠快的巨石碰到蟲兵,就會把牠壓扁。
用電腦幫我驗證每一關
關卡是我用長方形、圓形和多邊形拼出來的,但畫好之後很難靠自己玩去確認「這關一定破得了」。所以我把物理的部分寫成可以獨立執行的模擬器,再寫一個小程式,用暴力搜尋把每一種角度(每 2 度)和力道(每 5%)都試射一次,看哪一發打倒最多蟲兵;沒有一發能打倒的時候,就挑「炸掉蟲兵附近最多木頭、或讓巨石移動最多」的那一發當作準備動作。
第一次跑的時候就抓到問題:第 3 關「滾石坡」的巨石被炸飛到畫面外,根本壓不到坡上的蟲兵。調低爆炸推巨石的力道、在右邊加一道石牆,再把平台和斜坡接成一整片之後,模擬器確認一發就能把三隻蟲兵一起壓扁。最後依照模擬結果,決定每一關的三星門檻。
改版:砲彈改成無限
第一版每關的砲彈有限,用完就判定失敗。實際玩之後發現一個問題:沒有會丟蟲蛋的關卡,砲彈用完之後玩家什麼都不能做,對方也打不到你,畫面就卡在那裡。後來改成砲彈無限,只有愛心用完才會失敗;想挑戰的人可以追求三星,想輕鬆玩的人也一定能破關。
如果你卡在某一關,或想要更多關卡,歡迎寫信告訴我。