《逃離永明島》是劇情驅動的點擊式文字冒險遊戲,但四位主角的互動機制(玩法)有所不同。我今天想分享一下主角團中,小女孩顧西西的「關卡」玩法:解謎卡牌遊戲《百獸鬥》,以及我如何與Claude在一週內從零開始設計並實現出這個小遊戲的原型。
開發過程涉及了與AI討論機制設計、寫模擬測試代碼、寫Godot代碼、添加UI/美術部件等。《百獸鬥》作爲內嵌小遊戲非常「短平快」,所以本文可以算是一個AI輔助開發的極簡案例記錄,供開發者朋友們參考批評。
(注:一年半前我還是遊戲開發零經驗,《逃》是我單人開發的第一款遊戲,所以本文是新手向。內容不涉及劇透和具體謎題,不影響實際遊戲體驗。另外,這個小遊戲的明快風格和主線故事有較大區別。)
爲了忠實記錄從無到有的過程,文章儘量囊括了關鍵細節和步驟,其中包含了我和Claude的對話截圖,所以整體有點長。內容分爲三個部分:
核心機制策劃
對戰邏輯模擬代碼和平衡性調試
Godot實現,包括添加UI和美術
這三個部分所含細節的全流程總結如下圖:
核心機制設計
《逃》中,西西是一個喜歡玩電子遊戲的十歲小女孩。所以最初立項時,我就打算把她的「關卡」做成一個內嵌小遊戲,與其他三位以分支劇情選擇互動爲主的成年角色區別開來。
作爲玩家,我自己玩劇情類遊戲時,不喜歡空降下來的「爲了互動而互動」的小遊戲。所以這個內嵌卡牌遊戲在兩個方向上和主線緊密綁定:
每張卡都是主線中出現過的角色,且牌面數值和能力符合角色性格背景
西西玩卡牌遊戲的原因、集卡流程、戰鬥對象、勝利獎勵,都和故事直接相關
除以上兩點外,《百獸鬥》卡牌遊戲的規則和玩法是獨立的。由於最終需要無縫內嵌進《逃》這個輕解謎文字冒險遊戲裏,在設計之初,我有如下前提限制:
一共只能有26張卡(因爲《逃》有26名角色)
這應是個確定性的解謎類遊戲,不能出現隨機元素。這樣不會打破解謎冒險類玩家的預期
遊戲節奏需短平快,必須能快速上手,不能搶佔太多注意力而喧賓奪主
遊戲風格卡通明亮,策略不能太複雜,從而符合西西的關卡風格
我個人想讓它有攻防對戰元素,這樣可以配些和主線劇情BGM風格迥異的戰鬥音樂
在這些條條款款之下,我決定做一個類《聖獸之王》放置戰鬥的卡通版《邪惡冥刻》。
《聖獸之王》是香草社的戰略遊戲,主要玩法在於組隊佈陣搭配人物裝備詞條,一旦戰鬥開始,角色行動都是自動的,直到一方全滅。
我將組隊佈陣簡化爲「選卡排序」,把5人隊伍簡化爲選3張卡出陣
爲了讓戰鬥迅速結束,我設置了3回合的限制。若3回合結束而敵方(E;守擂方)沒有全滅,就算玩家(P;挑戰方)敗
《邪惡冥刻》是2021最火的卡牌類獨立遊戲之一,我就不介紹了……Roguelike牌組構築。
我喜歡它的數值簡單(只有個位數攻/血;牌面能力相對單純),可以減輕上手和腦內計算負擔
採用PVE非對稱戰鬥。我打算設計6個主線關卡
從密林邪教動物改用明亮卡通動物形象,符合西西喜好
確定大方向後,我就去和Claude聊天了。我的遊戲設計能力尚淺,需要它幫忙審覈一下這個想法有什麼問題。以下是第一輪對話,Claude就已經提出了很多不錯的意見:
它首先批評了用陣型代替速度的做法(邪惡冥刻),我同意。最終,我讓陣型決定了誰會被對方優先攻擊(最前排)。
更可貴的是它建議的20張卡牌列表 - 因爲我玩的卡牌對戰遊戲很少,所以牌面數值和能力設計屬於未知領域。它建議的這些來自其他卡牌遊戲的典型能力,很多被我修改後採用,例如這裏「劍士」的連擊能力最後被「獨角獸」的卡牌使用。
接下來,我讓它設計一些敵方的卡牌組合作爲關卡。它考慮到了初學者的學習曲線,把前幾關敵人的組合風格設計爲引導玩家發現明顯策略。此類關卡設計邏輯(包括下面提到的「疾速猛攻隊」之類的主題),我也在最終遊戲中沿用了。
幾個來回的討論後,我留下了26張卡牌設計(以A-Z命名),6個關卡草案(即敵方的3卡陣型配置),重新把規則梳理了一遍。然後,我讓Claude大致模擬對戰一下,看看遊戲玩起來是什麼樣的。
Claude老老實實地開始腦內模擬。以下模擬完後的總結:
卡牌遊戲設計分析與建議 我分析了你的卡牌遊戲設計,並通過模擬每一關的對戰,發現了一些需要調整的地方。總體來說,這是一個有趣的確定性解謎遊戲,但平衡性需要改進。 關卡平衡性分析 第一關 (疾速猛攻隊) 問題:過於簡單,多種組合都能輕鬆獲勝 敵方卡牌雖然速度高,但防禦值都只有2點,極易被擊破 Y卡牌的特殊能力在實戰中效果有限 G卡雖然首回合傷害高,但無法持續威脅 模擬測試: 使用 E(前), B(中), F(後) 組合: 首回合Y攻擊B,被反傷擊破 G攻擊E造成10點傷害,擊破E A攻擊B,擊破B F攻擊A,擊破A,然後攻擊G,擊破G P方首回合勝利 <------下略------>
在它的描述性模擬中,我主要是想看看這個遊戲玩起來的「感覺」,也就是總體「好不好玩」,所以它的腦內模擬戰報不用準確,大致不差就行。
這個「假想試玩」的過程又反覆了很多次,很多規則和能力的毛邊在其中被打磨得更光滑。這也讓我大致確定了26張卡牌的數值範圍和能力方向,以及對應關卡的風格和樣式。這些玩耍性質的模擬,對我理解遊戲的大致平衡性和策略範圍很重要。同時,我也把卡牌和《逃》的人物,按性格背景做了一一對應。
在這一步,AI扮演了遊戲策劃助手/頭腦風暴小黃鴨的角色。
對戰模擬和平衡性調試
當我確定最初的想法具有一定可玩性後,就讓Claude去着手實現核心邏輯代碼了。有了代碼,我們可以更加精確的測試玩法和設計,並真正着手調整遊戲平衡性。
我讓它寫python。因爲比起Godot的gdscript,python是熱門語言,所以出錯的概率要低不少。(讓它寫gdscript時,經常就會寫成python……)
下面的對話發生在VScode + Cline中(我還沒試過Claude Code,聽說更好用)。其中提到的文件是我總結了上一步機制設計的文本描述。
在經過2.5美元的API開銷之後,它寫好了`card_game.py`。
當然了,第一輪的代碼一般都是錯的。像下面這樣我追加要求它繼續檢查和測試自己的代碼,並解決它自己或者我旁觀時拋出的問題的對話,一共7次,大概花了20美元吧。
當我和它自己從戰報裏都看不出任何問題之後,我就讓Claude展開平衡性測試員的工作了:扮作玩家來攻克之前的關卡草案,並根據結果提出修改意見。一共6輪。這裏,我主要想看它如何從玩家角度思考對策,瞭解策略思考的大致深度。
同時我又讓它寫了一份窮舉測試代碼,將所有可能的玩家卡牌組合都跑一遍。這樣我就知道,每一關有多少種玩家組合可以通過。(當然,窮舉只在這類複雜度很低的小遊戲裏可行。)
可通關組合的比例,加上它的思考過程,讓我最終確定了遊戲平衡性基準線,和從易到難的關卡順序。至此,所有卡牌的數值能力設計,以及6個關卡配置,基本算是成形了。
在這一步,AI扮演了程序員和遊戲測試員的角色。當然,這裏的測試因爲僅僅涉及文本/字符串,所以非常適合原生語言模型,無需額外的控制器工具和視覺能力(讀取遊戲畫面)。
Godot具體實現
遊戲在邏輯層面成形後,我開始往Godot遊戲引擎裏搬運。我先大致構思出一個實現框架,然後讓Claude把python代碼的邏輯遷移進去:
下面是它做完後的總結:
同上,初次實現肯定是有很多問題的。問題明顯的地方,我就自己上手改了。不明顯的,會讓它自己先檢查澄清。
和之前的步驟可以自動測試不同,Godot的ui編輯、運行、測試部分需要我手動,所以這一步是真正的工作量所在。(最近注意到有Godot MCP還有Godot-Gemini這類AI-引擎項目。我沒試過,不知道好用不。)
UI部件是我自己在編輯器裏手拼,再和上述腳本整合。UI的動畫設計、視覺節奏、信號處理、音效觸發等等影響「遊戲手感」的地方也大都是手調,其中模塊化的部分函數讓Claude實現。不贅述。
《百獸鬥》的戰鬥背景要麼就是主遊戲場景,要麼是着色器視效,所以現在只缺卡牌美術了。我用PS設計瞭如下模板:
由於每張卡牌都是對應一位角色的動物化卡通形象,我直接在Spine裏把每個現有角色擺了若干姿勢,然後讓Midjourney根據這個「精靈圖」轉卡通形象:
最後裝配進UI,《百獸鬥》原型完成!(做個可玩的原型只花了一週,但後期打磨還是挺久的。)
很多內測人員表示非常好玩,應該做成一個單獨的遊戲……呃……下次吧……這次我主要還是來好好講個故事的。
《逃離永明島》正式版將於7月31日上線,遊戲時長約9小時。新試玩版存檔兼容。
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com