← 開發手記
《攻城投石》遊戲畫面

攻城投石的設計手記:用真物理做出斷柱塌頂

PiuPiu Games 團隊 · 2026 年 10 月 28 日 · 物理攻城 · 重壓 · 關卡驗證

▶立即免費玩

《攻城投石》是 PiuPiu Games 唯一一款「真的在算物理」的攻城遊戲:你拉動投石車發射石彈,碉堡的柱子會斷、屋頂會塌、哥布林會被壓扁或撞飛出場。遊戲裡沒有任何一張攻擊力數值表,每一下傷害都是撞擊當下現場算出來的。這篇手記說明我們怎麼把「物理」變成「可以玩的關卡」,以及中間修過的一個大問題。

為什麼要用真物理

拋射攻城遊戲最迷人的地方,是那種「我只是打斷一根柱子,整座塔就自己垮了」的連鎖反應。如果用傳統的血量表來做,石彈打中木頭扣 30、打中石頭扣 10,結構不會因為少了一根柱子而倒下,那種因果感就不見了。

所以我們讓所有建材都是有重量、有摩擦力的實體。柱子撐著平台,平台上站著哨兵;柱子斷了,平台失去支撐自然往下掉,哨兵跟著摔下來。這些都不是事先寫好的動畫,而是物理模擬一步一步算出來的結果,所以同一關每一次打出來的樣子都略有不同。

平台上其他遊戲都是我們自己寫的程式,但要穩定地模擬「一堆剛體疊在一起、再被打倒」非常困難,自己從零寫,品質風險太高。這一款我們破例使用了一套成熟的開源物理引擎,並且把它放在自己的網站上提供,不依賴外部服務。這是平台上唯一的例外。

傷害公式:動能就是傷害

每次兩個物體相撞,我們用撞擊的動能來算傷害:

這個公式自然帶出很多直覺:全力平射比輕輕一拋痛得多;從高處摔下來的哨兵,落地那一下就足以致命;石牆很難正面打穿,因為它只吃不到一半的傷害。

我們也設了一個門檻:相對速度太低的輕碰完全不扣血。否則一座靜靜疊著的木塔,光是木板之間互相靠著,就會慢慢把自己「磨」壞。這個門檻讓結構在沒被攻擊時是安全的,只有真正的撞擊才算數。

三種材質,三種拆法

關卡裡的建材有三種,各自對應不同的解法:

另外還有一種完全不會壞的「岩台」,用來當吊橋的橋墩或地形。它讓我們可以設計出「只能從某個角度進攻」的關卡。

火藥桶的爆炸也是照距離算的:離爆心越近,被推得越遠、傷得越重,到 132 單位的邊緣就降為零。算一下就知道,一般哥布林只有 60 點血、受傷倍率是 2,爆風本身大約在 90 單位內就足以致命;隊長有 120 點血,光靠爆風得貼到大約 40 單位內才炸得死。這就是為什麼有隊長的關卡,火藥桶常常只是開路:爆炸把隊長震飛之後,真正收尾的往往是他撞上牆或摔落地面的那一下。

我們修過的大問題:被蓋住的哥布林死不了

遊戲剛上線時有一個很惱人的狀況:哥布林被倒下的木板蓋住之後,只吃到木板落下那一瞬間的傷害,接著就躺在木板底下「不痛不癢」,你的石彈也打不到他。整關就這樣卡死,只能重來。

原因出在當時的「重壓」規則:只有壓在哥布林身上的東西超過他自身重量的 4 倍,才會持續扣血。石板夠重,可以壓死人;但一塊木板只有哥布林大約 2.2 倍重,壓住了完全沒傷害。結果就出現一個無敵的僵局。

我們把規則改成「荷重比例」:

改完之後,「被蓋住」變成一種倒數計時:你看著血條一點一點往下掉,不用再補一發。這也讓「斷柱塌頂」從偶爾成功的花招,變成可靠的主要戰術。

改了一條規則,就要重新檢查所有關卡

重壓變強之後,馬上出現新的問題:推倒一大面牆變成萬能鑰匙。第 10 關原本要好幾發才能攻下,改版後一發就過;第 12 關最終決戰也只要兩發。

於是我們跟著調整關卡:第 10 關把原本放在牆倒下路徑上的火藥桶移開,石彈從 7 顆減為 6 顆;第 12 關的外牆從三層疊改成兩層,石彈從 9 顆減為 6 顆。改完再重新驗證全部 12 關。

這是物理遊戲最需要小心的地方:所有規則都會互相影響。在傳統遊戲裡改一個數值,影響範圍大致可以預估;在物理遊戲裡,改一條重壓規則,可能讓某一關的牆倒下的方向完全不同。所以我們建立了一套每次都要跑的驗證流程。

每一關都要通過的兩道驗證

遊戲的物理規則與關卡資料,和我們的關卡驗證程式共用同一份來源。每次修改任何數值或關卡,都必須讓 12 關全部通過兩道檢查才能上線:

在驗證開始前,我們也會先讓整個結構靜置一段時間。如果某座塔還沒被打就自己塌了,那是關卡設計有問題,不能算玩家的功勞。

這兩道檢查讓我們可以很有底氣地在攻略頁寫下:每一關都過得了,而且不需要神準。卡關的時候,通常是還沒找到那根該打斷的柱子。

寫這篇手記時,我們用現在線上的物理規則把驗證程式重新跑了一遍,12 關全部通過。手抖測試的亂數是固定的,所以每次跑出來的數字都一樣,可以拿來比對改版前後的差異:

關卡石彈手作解用了幾發手抖 30 輪過關率
1 哨站初戰5397%
2 木造望樓52100%
3 石牆之後5297%
4 屋簷之下51100%
5 火藥運補4180%
6 雙子哨塔62100%
7 石殿崩塌5183%
8 空中吊橋5187%
9 藥庫連環52100%
10 前線堡壘6277%
11 天守斷柱73100%
12 哥布林王城6390%

這張表可以這樣讀:「手作解用了幾發」是理想打法的發數,代表剩彈加分的天花板,第 4、5、7、8 關都存在一發清場的解;過關率最低的是第 10 關的 77%,那正是石牆、木樓、火藥第一次全部混在一起的一關。第 5 關只給 4 顆石彈,是石彈最少的一關,但只要第一發把火藥桶引爆,後面幾乎不用再打。

其他踩過的坑:屋頂凍在半空中

重壓之外,上線那天我們還連續修了幾個物理問題,每一個都是「規則沒錯,但結果怪怪的」:

12 關是一套由淺入深的教學

12 關的順序是刻意安排的,每一關教一件事:

每一關給的石彈在 4 到 7 顆之間。數量不多,是因為我們希望每一發都經過思考,而不是亂槍打鳥。

計分:省彈就是高分

擊倒一個哥布林得 500 分,隊長 1200 分;拆掉木板 40 分、石塊 90 分、引爆火藥桶 150 分。過關有 800 分基礎獎勵,每剩一顆石彈再加 300 分。

剩彈加分是整個計分設計的核心。它讓「能兩發過的關不要打三發」成為上榜的關鍵,也鼓勵玩家去找更聰明的解法,而不是用石彈硬拆。排行榜則比攻陷的關數,同關再比累計分數。

分數是以「一輪」為單位累計的:每次出征扣 1 顆平台共用的愛心,之後連續攻下的關卡都算同一輪。失守時有三條路:看一次廣告補 2 顆石彈繼續打這一關(每關限一次)、扣 1 顆愛心重新進攻本關,或收兵回營結算。過關畫面的 1~3 顆星只是演出,剩 2 顆以上 3 星、剩 1 顆 2 星,看廣告補過石彈的那關最多 1 星,星數不影響分數。

這套流程上線後修過兩次帳。2026 年 10 月,我們發現過關後撤退,以及打完第 12 關時,這一關的分數會被重複加一次;改成過關當下就標記「已入帳」。2026 年 11 月則是反過來的問題:失守後直接按「重新進攻本關」,上一輪的累計分數沒有上傳就被新的一輪蓋掉。現在不論按收兵、右上角的關閉,還是重新進攻,都會先把這一輪的成績結算上傳。

讓物理變得「看得懂」

真物理有一個缺點:玩家不知道為什麼結果是這樣。所以我們在介面上花了不少力氣:瞄準時有即時的彈道虛線預覽;畫面下方有 0.5 度一格的角度、力道微調鈕,讓精算派可以一點一點修正;受損的建材和哥布林頭上會出現血條,而且傷害在一關內會累積,這一發沒拆完的牆,下一發可以接著拆。

被打出戰場邊界的哥布林也算擊倒,會顯示「潰逃!」。這條規則一開始是為了避免哥布林被打到畫面外、再也打不到而卡關,後來反而變成一種爽快的玩法:大力出奇蹟,也是合法戰術。

這條規則是在第 6 關被發現的。戰場的地面比畫面寬,好讓石彈可以一路滾出去,但第 6 關兩座望樓分居兩端,哨兵常被撞飛到畫面之外,人還活著、石彈卻再也瞄不到,整關就變成無解。現在除了石彈以外,任何東西飛出戰場都直接結算:哥布林算擊倒,建材算拆除並計分,飛出去的火藥桶則不會在畫面外留下一場看不見的爆炸。

操作上,手機可以按住拖曳瞄準,也可以用下方面板的按鈕每次調 0.5,長按連續調整;電腦則可以用方向鍵的上下調角度、左右調力道,空白鍵發射。2026 年 8 月,我們也把遊戲畫面的高度改成跟著瀏覽器實際可視範圍走,修掉平板上工具列還沒收起時,下方瞄準面板被截掉一截的問題。

讀完幕後,實際玩一局

免下載、免安裝,手機與電腦瀏覽器直接玩

▶立即免費玩攻城投石

看《攻城投石》完整攻略 →

相關開發手記

更多內容:開發手記總覽 · 攻略總覽 · 關於我們 · 回首頁