ARCADE ▶ GUAVA SEED RUSH
芭樂吐籽大作戰
移動芭樂、瞄準倍數閘門,讓種子越吐越多!種子會順著水管送到前線,變成芭樂勇者的子彈;打破道具泡泡換武器、冰凍敵人,在四種場地擊退各式各樣的蟲。
玩法說明
畫面分成上下兩半:
- 下半部(地底):芭樂會一直吐籽,你負責左右移動芭樂,讓種子穿過倍數閘門。種子越多越好。
- 上半部(戰場):種子會滑進漏斗、順著水管送到前線,變成芭樂勇者的子彈,自動射擊爬過來的蟲。
閘門
| 閘門 | 效果 |
|---|---|
| 黃綠色 x2、x3 | 種子穿過後變成 2 倍、3 倍 |
| 藍色 x5(會左右移動) | 種子變成 5 倍,要看準時機 |
| 灰色 上鎖閘門 | 這一波累積收集到指定數量的種子後解鎖,變成 x8 或 x10 的超強閘門 |
| 紅色 ÷2(第 3 波開始出現) | 穿過的種子有一半會消失,記得避開 |
同一顆種子在同一個閘門只會倍增一次,但可以連續穿過好幾排閘門,倍數會疊加。
道具泡泡
地底會不定時飄來道具泡泡,泡泡下方的數字是「還要打中幾顆種子」。移動芭樂讓種子打中泡泡,數字歸零就會發動效果。打進泡泡的種子會被吸收、不會變成子彈,所以要自己衡量划不划算。
| 泡泡 | 效果 |
|---|---|
| 藍色「冰」 | 所有蟲速度變慢 6 秒 |
| 橘色「雙」 | 換成雙發槍,一次打兩發,維持 12 秒 |
| 粉色「散」 | 換成散彈槍,一次打三發扇形子彈 |
| 黃色「穿」 | 換成穿透彈,子彈會貫穿一整排蟲 |
| 紅色「爆」 | 炸彈,戰場上所有蟲一起受傷 |
| 綠色「心」 | 回復一顆愛心(少血時才會出現) |
能量砲
子彈每打中一次蟲,地底上方的黃色能量條就會增加。能量集滿時畫面會提示,點一下戰場(電腦按空白鍵或 ↑)就能發射能量砲,橫掃整個戰場。
戰場與怪物
- 蟲頭上的數字是牠的血量。
- 勇者的子彈庫存越多,射速越快、每發威力也越大(一發子彈會一次打包好幾顆種子),子彈會自動瞄準最前面的蟲。
- 蟲碰到勇者會扣一顆愛心,3 顆愛心用完就結束。
- 每 5 波會出現一隻大 Boss,血量很高,要先存好種子。
- 每一波結束後,閘門的位置和倍數都會重新排列。
| 怪物 | 出現 | 特色 |
|---|---|---|
| 毛毛蟲 | 第 1 波起 | 最普通的蟲 |
| 果蠅 | 第 2 波起 | 在空中上下飛、速度快,但血比較少 |
| 硬殼甲蟲 | 第 3 波起 | 走得慢,血量是一般蟲的兩倍多 |
| 跳跳蟲 | 第 4 波起 | 一跳一跳往前衝 |
四種場地
每過 5 波就換一個場地,勇者站的位置和高度都不一樣,射擊角度和距離也會跟著改變:
| 波數 | 場地 | 勇者位置 |
|---|---|---|
| 1–5 | 草原之夜 | 站在地面,距離最遠 |
| 6–10 | 黃昏果園 | 站在高台上,往下斜射 |
| 11–15 | 雪原 | 站得比較前面,蟲走沒幾步就到眼前 |
| 16–20 | 沙漠 | 中等高台,距離也縮短 |
第 21 波之後會從頭輪一次,但蟲的血量會繼續變強。
開發筆記
靈感
這款的靈感來自手機上很常見的「倍數閘門」類小遊戲:東西往下掉,穿過不同倍數的閘門後數量暴增,再拿去打敵人。這類玩法看起來很爽,規則又一看就懂,所以我把它改成芭樂版本:主角是會吐籽的芭樂,子彈就是芭樂籽,敵人則是遊戲廳裡老朋友的「蟲」。
角色和美術全部是自己用像素畫的,玩法也做了調整,例如上鎖閘門要靠「這一波收集到的種子數」解鎖、加入會扣種子的 ÷2 陷阱。
直式畫面
前幾款遊戲都是橫式,這款因為是「由上往下掉」的玩法,改成 160 × 256 的直式畫面。網站的遊戲頁也加了一個 portrait 設定,直式遊戲會自動限制最大寬度,在電腦上不會被放大到超出螢幕。
怎麼判斷「穿過閘門」
每顆種子每一幀都會記錄上一幀的位置。只要「上一幀在閘門上方、這一幀在閘門下方」,而且水平位置落在閘門範圍內,就代表它剛好穿過閘門:
if (s.py < g.y && s.y >= g.y && s.x >= g.x && s.x <= g.x + g.w) {
// 穿過閘門
}
這樣不管種子掉得多快,都不會因為一幀移動太多而「跳過」閘門。
每個閘門只能倍增一次
如果不做限制,種子在閘門附近彈跳時可能重複觸發,數量會失控。所以每顆種子身上有一個 bitmask,每個閘門佔一個位元,穿過時把對應的位元設成 1,下次就不會再觸發。新分裂出來的種子會繼承同一個 bitmask,避免在同一個閘門裡無限複製。
效能:種子太多怎麼辦
倍數疊起來之後,種子數量很容易爆炸。畫面上同時最多只保留 220 顆種子,超過的部分會直接送進水管變成子彈。這樣既不會拖慢手機,玩家的收穫也不會因此減少。
漏斗和水管
漏斗是兩條斜線,種子碰到斜面就被「貼」在斜面上,往中間的開口滑。掉進開口後,種子會沿著一條預先定義好的水管路線(往下、往左、沿左牆往上)移動到勇者手上,才變成子彈。這段小小的延遲,讓玩家能清楚看到「我吐的種子正在送往前線」,畫面也更有連結感。
版本 2:從「太簡單」到「太難」再到剛好
第一版吐籽太快、子彈太猛,蟲常常一進畫面就被秒殺,連長相都看不到。把吐籽和射速調慢之後,又出現反過來的問題:種子明明存了好幾百顆,卻還是打不死只有 20 血的蟲。原因是射速被限制在每秒 12 發、每發只打 1 點,大量的種子只是堆在庫存裡用不出去。
解法是讓一發子彈「打包」好幾顆種子:
const pack = Math.max(1, Math.round(ammo / 30)); // 庫存越多,一發越痛
ammo -= pack;
bullet.dmg = pack;
fireT = 1 / Math.min(10, 3 + ammo / 30); // 射速也跟著變快
這樣子彈數量在畫面上不會多到看不清楚,但種子的總火力完全用得出去。威力比較大的子彈畫面上也會畫得比較大顆。
讓地底和戰場有更多互動
原本玩家只能控制地底的芭樂,戰場是全自動的,有點像在看戲。這一版加了兩個「從地底影響戰場」的設計:
- 道具泡泡飄在地底,要用種子去打。打泡泡的種子會被吸收,所以「要先換武器,還是先存子彈」變成一個取捨。
- 能量砲靠子彈命中累積,滿了要玩家自己決定什麼時候放,最好留給 Boss 或一大群蟲擠在一起的時候。
怪物的移動方式
四種蟲共用同一套資料結構,只是移動方式不同:一般蟲直直往前走;果蠅用 sin 函式在空中上下飄;跳跳蟲用一個 1.2 秒的循環,前 0.45 秒沿著半個 sin 弧線往前跳、剩下時間停在原地。因為有了會飛、會跳的蟲,子彈也從原本的「水平直線」改成朝目標的方向發射(用 Math.atan2 算角度),散彈就是在這個角度左右各偏一點。
場地資料化
四個場地都寫成一筆資料:天空漸層的兩個顏色、地面顏色、背景裝飾、勇者的 x 座標和高台高度。換場地時,連送子彈的水管路線也會跟著勇者的位置重新計算。之後想加新場地,只要多寫一筆資料就好。
數值平衡
- 芭樂每秒吐 2.5 顆種子。
- 射速是「3 + 子彈庫存 ÷ 30」發/秒(最高 10 發),每發威力是「子彈庫存 ÷ 30」(最少 1)。
- 蟲的血量每波成長約 1.22 倍,速度也會慢慢變快;Boss 的血量是一般蟲的十倍左右。
- 我寫了一個只會追著最上排閘門跑的簡單機器人來測試:完全不動大約撐到第 3~6 波,機器人可以打到第 8~11 波;會利用道具和能量砲、懂得疊倍數的真人玩家應該能走得更遠。
如果你覺得太難或太簡單,歡迎留言告訴我。