前言
《夜影傭兵團》是我用 Claude Code 搭 Godot 做的戰棋卡牌遊戲,現在有瀏覽器版可以直接玩:8×8 棋盤、16 種傭兵各有自己的西洋棋走法、35 張技能卡,單人對上一個會預判你下一步的電腦對手。試玩在這裡:夜影傭兵團線上試玩(不用安裝、不用註冊,首次下載約 72MB,建議用電腦的 Chrome 開)。
這篇文章會先講遊戲怎麼玩、跟市面上的戰棋卡牌差在哪,再講用 Claude Code 做遊戲這一路,AI 幫得上忙和幫不上忙的地方,還有遊戲能玩之後離上架還差幾關。想先看畫面的話,遊戲宣傳片在這裡。
《夜影傭兵團》怎麼玩
8×8 棋盤的戰棋,每顆棋子有自己的西洋棋走法,手牌從你帶上場的棋子推算出來,拆掉主堡或殲滅指揮官就贏。
16 種傭兵的西洋棋走法
盤面 8×8,雙方各 16 顆棋子。可以編進隊伍的傭兵有 16 種,每一種的走法都不一樣:皇家護衛第一步能走兩格、之後只能走一格;食人螃蟹是橫三直一;貴族鐵騎能直線衝;鴉翎射手要有友軍擋在它跟目標之間的同一條射線上才射得出去。你認得一顆棋子,靠的就是它怎麼走。
從上場棋子推算出來的 35 張技能卡
牌組不用自己組,是從你帶上場的棋子推算出來的。帶了太刀武士,牌堆裡才會有拔刀斬;那顆棋子死光了,相關的卡片就不會再發到你手上。
水晶格與每回合 8 點行動點
每回合 8 點行動點,移動、攻擊、出牌都從這裡扣。棋盤中央有水晶格,回合開始時佔著幾個就多幾點。多一點行動點聽起來很小,但它是複利:這回合多一點,下回合就多動一次,所以搶中路的風險有具體的報酬。
拆主堡或殲滅指揮官的兩種贏法
拆掉對方的主堡(300 血,不會動也不會還手),或者殲滅對方的指揮官,任一發生就結束。進攻路線有得選,防守的一方兩邊都得顧。
跟市面上的戰棋卡牌差在哪裡
開工前我查過這個品類。戰棋加卡牌的組合早就有人做,而且有幾款在 Steam 上拿到極度好評;中文市場也有作品,只是原創的比較少。
競品棋子的扁平走法
查完之後找到的差異點很具體:多數同類作品的棋子移動是扁平的,任意方向走一格,很少有真正西洋棋變體式的多樣走法。這款遊戲跟市面產品最大的差別在棋子的移動有沒有個性,「戰棋加卡牌」這個概念本身早就有人做了。
綁在棋盤位置上的卡片效果
這是整個專案最重要的一條設計原則,判斷標準只有一句話:這張卡打出去的時候,玩家需不需要真的看棋盤上的相對位置,才能決定要不要打、往哪打?
答案是不用的話,那張卡就只是「卡牌遊戲貼在戰棋上」。所以 35 張卡每一張都標了融合等級,融合度最高的三張:
- 拔刀斬分左、中、右三張,出牌就要承諾砍哪個方向,而且要自傷。對手看得到你要砍哪,有一整回合可以躲
- 衝鋒突擊的撞擊結果,取決於敵人身後有沒有別的棋子
- 靈巧閃避觸發時會瞬移到攻擊者背後,所以你得先想清楚「背後」那格現在是什麼
指揮官的皇后走法
指揮官原本被保護在後排、只負責按技能鈕。後來改成八個方向都能一路移動到底,撞到任何棋子或邊緣才停,跟西洋棋皇后一樣。
這個改動連帶產生三個效果:開局的時候指揮官動不了,因為八條線全被自家陣型鎖死,要等前排推出去才會慢慢打開通道;「封住移動路線」變成一種正式戰術;戰爭建築師這個角色因此變成消防隊員,左翼被打穿時能一步從右翼移過去補防。指揮官死了就直接判負,所以這個走法拿來補防、卡位、封路,很少有人會拿他衝進對方陣線。
用 Claude Code 做遊戲,時間花在哪裡
程式碼幾乎都是 Claude Code 寫的,我花最多時間的地方是把「我到底想要什麼」講到 AI 不會誤解,以及在它交出東西之後判斷那個東西玩起來對不對。
六種工具的分工
整個專案是我一個人做的,不同的環節用不同的 AI 工具:
| 項目 | 用什麼 | 工具做完之後我還要做的事 |
|---|---|---|
| 遊戲引擎 | Godot 4.7,邏輯用 GDScript | 棋盤是真的立體透視不是平面方格,視角參數要自己調 |
| 遊戲程式 | Claude Code | 我描述規則、它實作,我實際玩過再回報哪裡怪 |
| 棋子立繪、部分卡面 | GPT 生圖 | 自己裁切成統一規格 |
| 介面、光影、特效 | 程式產生,沒有手刻場景檔 | 樣式參數自己調到一致 |
| 音樂 | Suno | 挑版本、對戰鬥節奏 |
| 音效 | Python 從波形合成 | 每個音的參數自己試 |
動工前先寫好的兩份文件
跨多次對話開發最大的問題是失憶。今天跟 AI 討論半天決定「卡牌的效果必須跟棋盤位置綁在一起」,明天開新對話它完全不知道,又從頭幫你想一套別的方案。
所以專案裡有兩份文件是動工前就寫好的:一份是給 AI 看的專案守則,講清楚這個專案怎麼運作、哪些檔案是地基資料、跑測試的指令是什麼;另一份是設計筆記,記錄每一個已經定案的設計決策和它背後的理由。開新對話的第一件事就是讓 AI 讀這兩份。
設計筆記最後長到 2900 行,我在裡面立了一條規矩:同一個設計決定不要寫三份全文。長篇理由只放設計筆記一處,資料檔的備註壓成一句話加日期,程式註解只寫「為什麼程式這樣寫」。三個地方各寫一份的那段時間最浪費,改一次就要同步三個地方,而且一定會漏掉一個。
AI 自己決定與停下來問的界線
一開始我什麼都要它問過我,結果每做一件小事就來回三四輪。後來我把界線寫死進專案守則裡:
| 類型 | 處理方式 | 例子 |
|---|---|---|
| 方向性的設計決定 | 停下來問我 | 這張卡要改成什麼機制、要不要新增一種狀態 |
| 小的、可逆的參數 | 自己選一個做完,回報時講一聲 | 傷害數字寫 25 還是 30、零頭那一格給誰 |
差別在「改錯了要付多少代價」。參數改錯,改回來就好;機制方向改錯,後面所有卡片和測試都要跟著重做。界線講清楚之後,來回次數少掉一大半,我真正需要參與的決定一個都沒漏掉。
兩個工作階段的互相覆蓋
有一次我在兩台機器上同時開工,其中一邊的工作區停在比較舊的版本。那次提交把後面三次修改整包覆蓋掉了,一張已經做好的卡片就這樣無聲消失,提交訊息和設計筆記裡都沒有提到這個移除。
過了一天才發現。事後我立了一條判斷方法:這個專案裡刻意的移除一定有紀錄,提交訊息、設計筆記、資料檔備註三處至少會有一處寫到;三處都沒有,那就是事故。另外開工第一件事一律先拉最新版本,提交前掃一眼有沒有「自己沒動過的檔案出現大片刪除」。
同一個問題後來還變形出現過一次:我改到一半撞到編譯錯誤,以為是自己弄壞的,查了半天才發現是另一個同時開著的對話正在改別的檔案,撞上它編輯到一半的暫時狀態。重跑一次就沒事了。
📖 延伸閱讀:2026 Claude Code 新手教學|從安裝到 GitHub 部署,完成第一個 AI 專案
寫成程式邏輯的卡面敘述
有一張燃燒箭的卡片,敘述寫著「火會轉移到目標身上」。我實際玩到那張卡的時候整個愣住,因為我看不懂「轉移」是什麼意思。
回去查才發現,「轉移」從頭到尾都是在描述程式怎麼做的:效果先掛在射手身上,命中之後才搬到目標身上。這個中間狀態玩家根本看不到,卻被寫進了卡面敘述。
這件事變成一條通則:卡面敘述要寫玩家看得到的因果。後來那張卡改成出牌就直接選射手、再選敵人當場射出去,中間狀態消失了,敘述也就變回字面上的「射中誰誰就著火」。AI 很容易把實作邏輯直接翻譯成文案,因為對它來說那就是同一件事,這種東西只有實際玩的人抓得到。
電腦對手為什麼不用語言模型
做到一半我問過 Claude:能不能串一組 API key,讓遊戲裡的電腦對手直接用大型語言模型來下棋?
串 API 下棋的四個問題
它給了四個理由,每一條都站得住:
- 延遲:本地運算一次決策大約 400 毫秒,打 API 要 1 到 3 秒,而電腦對手一個回合會做 2 到 4 個動作
- 架構:整個專案的路線是單機優先、連線是加分,串 API 等於讓遊戲離線就不能玩
- 能力錯配:語言模型不擅長精確的棋盤組合運算,射程、傷害、行動點結算這些事,傳統演算法零失誤
- 可驗證性:專案有八百多項測試釘著傳統演算法的行為,語言模型釘不住
結論那句我印象很深:語言模型的正確位置是離線調參與設計討論,不是遊戲迴圈。寫一篇「用 Claude Code 做遊戲」的心得,結果最核心的技術決定是「這裡不要用 AI」,我自己也覺得有意思。
電腦對手最後用的是預判式搜尋:挑一個動作,讓對手打完他最好的一整輪,再評估結果局面。這直接解掉單層搜尋最大的毛病,也就是貪吃誘餌然後被埋伏的遠程反殺。
用 32 場擂台調權重
電腦對手的強弱來自一張記分表:往前推進一格值幾分、佔住一個資源格值幾分、能打到的目標多一個值幾分。這些數字調對了它就聰明,調錯了它就會做出很蠢的事。
前兩次改這張記分表都出過事。一次是加了「壓迫對手」的分數,結果指揮官自己往前送死;一次是給了增益卡太高的分數,結果它整個回合站在原地丟卡不推進。兩次都是我實際玩才發現的,因為當時沒有任何「這個改動讓它變強還是變弱」的量測方式,改權重等於在猜。
所以後來先做了一個擂台工具:兩組不同設定互相對打,交換先後手排除先手優勢,最後回報勝率。改一個權重就跑一次擂台,沒有提升就退回去。有一項叫「關鍵格引力」的改動就是這樣被收掉的,32 場打出 13 比 19,而且決策時間還多了 29%。
擂台勝率的雜訊範圍
用了一陣子之後,我發現這個擂台本身有問題。
32 場對局裡,只要有兩三場剛好翻盤,勝率就會上下差將近 9 個百分點。也就是說 53% 到 56% 這種數字全部都在正常起伏的範圍內,看起來贏了,其實什麼都沒證明。
更麻煩的是多跑幾次取平均完全沒有用。這個擂台是決定性的,隨機種子寫死、電腦對手不含隨機,同一組設定重跑會得到一模一樣的結果。變異來自「這 32 組固定對局裡剛好有哪兩三場翻盤」,跟權重好壞沒有可靠關聯。
所以判準改成:單點過半不算數,要看曲線形狀。上圖左邊那組能採用,是因為 3、6、8、10 四個點打出漂亮的倒 U,峰值在 6 而且左右對稱下降;右邊那組雖然也有兩個點過半,但高低完全沒有規律,那就是雜訊。最後那個參數維持原值不動,因為什麼都沒證明。沒有證據支持改動的時候,不改比亂改好。
對玩家密令瞎眼的電腦對手
遊戲裡有一個叫「密令」的機制:你可以把一張卡片反過來封在指揮官身上,條件成立才觸發,對手只知道有一道密令、不知道是什麼。
問題是預判式搜尋的預設行為剛好相反。它推演用的沙盤是真實盤面的完整複製,所以不特別處理的話,電腦對手會拿著你的密令內容去完美閃避。玩家會覺得自己被讀心,那是這個機制最糟的失敗模式。
解法是在複製盤面的時候把對手的密令內容抹掉,只留下「有幾道、什麼時候過期」,然後給那幾道未知的密令一個固定的嚇阻分數。這個分數還不能調太大,調大了它會整體變得不敢跟你交換棋子,反而變笨。
AI 幫不上忙的三件事
做完一輪之後,我遇到三件 AI 明確幫不上忙的事,都不在寫程式這一塊。
號角和聲的空五度
遊戲原本整個是無聲的。第一版音效我用了免費授權的素材包,能跑,但我聽了覺得不對:通用電子音跟羊皮紙、封蠟、中古傭兵團的世界觀完全對不上。免費素材沒有法律問題,但它換到任何一款遊戲都能用,聽起來就不像是這款遊戲的聲音。
後來分成兩層:玩家會記得的音自己做,純功能的擬音留素材包。沒有人會因為腳步聲記得一款遊戲,號角和喪鐘不一樣。
招牌音效最後是用 Python 從波形層合成的,設計上有幾個判斷是 AI 給不了的:號角的和聲只用空五度,因為沒有三音才是軍樂;教堂鐘用非諧的泛音列,那個哀愁感是物理自帶的,不用另外加;羊皮紙的聲音用隨機遊走去調變振幅,因為纖維本來就不均勻。這些是「知道那個東西該聽起來像什麼」的判斷,程式只是把判斷寫出來。
靠頻譜驗音效
合成完之後有個現實問題:Claude 聽不到聲音。它可以幫我寫出合成的程式,但它沒辦法告訴我這個號角好不好聽。
替代方案是改用頻譜驗證,確認戰鼓的能量落在 52 赫茲、號角的諧波列落在該落的音上、鐘聲的三個主要成分比例正確。這只能驗「有沒有做出預期的物理特性」,驗不了「好不好聽」。最終聽感只能我自己說了算,覺得鼓不夠沉,就是改參數重跑一次。
Suno 免費方案的商用授權
背景音樂是用 Suno 生成的,當時筆記裡記著「付費方案,附商用授權」。
後來回頭查證才發現這行是錯的,我實際用的是免費方案。Suno 的條款寫得很清楚:免費方案的輸出只能個人非商業使用,而且商用授權只給訂閱期間生成的東西,事後補訂閱不會讓舊檔案回溯取得授權。
也就是說,我當時手上那兩首歌嚴格來說沒有商用授權,而遊戲是要上架的。處理方式是先把所有文件裡「附商用授權」的字樣全部拿掉,一句都不留。主動聲稱自己有授權但其實沒有,比什麼都不寫危險得多。之後訂閱一個月重新生成一批換掉,這件事才算結案。
用 AI 生素材的時候,授權是最容易被漏掉的一塊,因為它不會報錯、不會跳警告,只會在你上架之後才變成問題。
遊戲能玩之後,離上架還差幾關
遊戲本體做完之後我以為快好了。實際上「能玩」跟「能上架」之間還隔著一整段跟遊戲設計無關的事。
橫式鎖死與隱私權政策
直式還是橫式這個問題拖了很久沒定案。最後決定橫式而且在手機上鎖死,理由是成本:頂部對峙橫幅、左右兩欄介面、棋盤的透視取景全部是照橫式設計的,轉直式要把整套介面重做。
隱私權政策則是另一件事。商店審查要的是一個公開網址,遊戲內的頁面不算數,但玩家看的又是遊戲內那一頁。同一份政策放兩個地方,各寫一份遲早會走岔。最後做成一份資料檔當唯一來源,遊戲內畫面讀它,網頁版也從它產生,再加一條測試比對兩邊的日期跟每一段標題,改了資料忘記重新產生網頁就會被擋下來。
政策內容是照實際程式行為逐條寫的。包括「對方會知道你的區網 IP」這種對自己不利的事也照實寫進去,因為那是直連的技術必然。
Android 打包的四個問題
第一次打包 Android 版花了 13 分鐘,但在那之前有四個問題各自能讓匯出直接失敗:
- 安裝建置範本的指令在無介面模式下會卡死,燒 CPU、零輸出、永遠不結束,只能手動解壓縮
- 版本標記檔的位置跟直覺不同,少了它會報「找不到建置範本的版本資訊」
- 材質壓縮的選項必須先打開,否則匯出前就被擋下來
- C 槽空間不足。解壓縮當場斷在半路,錯誤訊息只說沒空間,不會告訴你少了哪些檔案
第四個花掉的時間最多,因為它看起來像別的問題。光是相依套件就要 1.15 GB,最後是把整個建置的家目錄改指到別的磁碟才解決。
📖 延伸閱讀:Godot 遊戲開發教學:結合 Claude Code 從零開始做出能玩的遊戲
Google Play 的 12 人 14 天測試
這是跟技術完全無關的一關。Google Play 現在要求個人開發者的新應用必須先跑封閉測試,至少 12 位測試者、連續 14 天,才能申請轉成正式發布。
其他事項反而都比想像中順:開發者帳號註冊完成、套件名稱定案、內容分級問卷跑完是輔導級、商店截圖和文案定稿、宣傳影片錄好。真正卡住的是找 12 個願意連續兩週打開遊戲的人。如果你也打算上架 Android,這件事建議提早半個月開始準備,它本身就需要時間。
先出網頁版放上 itch.io
等測試者湊齊之前,我先把遊戲匯出成網頁版放上 itch.io,不用裝 APK、開瀏覽器就能玩,前言的試玩連結就是它。要玩得起來的人多,找 12 個測試者也比較容易。
網頁版有兩個限制:連線對戰在網頁版不能用,因為連線層走的是瀏覽器沒有的 UDP,所以網頁版只有單人對電腦;第一次載入要下載約 72MB,一般寬頻十幾秒,之後瀏覽器會快取。手機瀏覽器還沒測過,建議用電腦的 Chrome、Edge 或 Firefox 開。
一個想法要變成能上架的成品,中間的判斷比程式碼難得多。這款遊戲和其他用 AI 做出來的專案都收在作品集裡,有畫面也有實際成果。
常見問題 FAQ
Q1:《夜影傭兵團》是一款什麼樣的遊戲?玩法跟一般戰棋差在哪?
它是 8×8 棋盤上的戰棋卡牌遊戲,16 種傭兵各有自己的西洋棋走法,配上 35 張技能卡,贏法有兩種:拆掉主堡或殲滅指揮官。跟市面上多數戰棋最不一樣的地方在移動和卡片。多數競品的棋子只能往任意方向走一格,這裡每種棋子的走法都不同,指揮官甚至能像皇后一樣直線移動到底。卡片效果也跟棋子站的位置綁在一起,水晶格等於行動點,搶地盤就是搶下回合的資源。
Q2:網頁版跟手機版差在哪?連線對戰能玩嗎?
網頁版只有單人對電腦,連線對戰不能用,因為連線層走的是 UDP,瀏覽器裡沒有這個通道;區網對戰要等 Android 版。網頁版不用安裝、不用註冊,第一次載入要下載約 72MB,之後瀏覽器會快取。建議用電腦的 Chrome、Edge 或 Firefox 玩,手機瀏覽器還沒完整測過,直向會先擋一層提示。遊戲免費、沒有內購、沒有廣告,也不用連伺服器。
Q3:用 Claude Code 做遊戲,最花時間的是哪一段?
時間主要花在三個地方:把設計決策寫成文件讓 AI 每次都讀得到、實際玩過之後回報哪裡怪、以及調整平衡數值。程式碼幾乎是即時產出的,但「這張卡太強要不要削」這種問題,一輪就要玩好幾場才有結論。上架前的行政流程也比想像中久,那段完全跟開發無關。
Q4:遊戲裡的 AI 對手,也是用 ChatGPT 這類模型做的嗎?
我刻意不那樣做。原因有四個:語言模型每次回應要 1 到 3 秒,遊戲節奏撐不住;串 API 表示離線就不能玩;語言模型不擅長精確的棋盤運算,射程跟傷害結算容易出錯;還有測試釘不住它的行為。這款遊戲的電腦對手用的是傳統的預判式搜尋加一張記分表,語言模型的位置是幫我離線分析和討論設計。
Q5:AI 生成的音樂和美術可以直接拿來商用嗎?
要看方案,而且這件事很容易漏掉。以 Suno 為例,免費方案的輸出只能個人非商業使用,商用授權只涵蓋訂閱期間生成的東西,事後補訂閱不會讓之前生成的舊檔案回溯取得授權。我自己就記錯過一次,以為手上的音樂有授權,查證之後發現沒有。如果作品要商業發行,動手前先去讀該服務的條款,別憑印象。
總結
我原本以為瓶頸會在「AI 寫不寫得出來」,實際做完一輪才發現,程式碼幾乎不是問題,卡住的地方全部落在判斷上:這張卡有沒有讓玩家做決定、這個權重的提升是真的還是雜訊、這段敘述玩家看不看得懂、這個素材能不能商用。AI 能把東西做出來,但「做出來的東西對不對」還是得有人扛。想試的話,先把設計決策寫成文件,那會決定後面每一次對話的效率。成品就在前言那個連結,玩過覺得電腦對手太強或太笨,都歡迎跟我說。
如果你想持續收到這類實作紀錄與 AI 應用的觀察,可以訂閱我的電子報,每週一則 AI 新聞精選加上我自己的短評。


