
我一開始也是這樣。
想做 Roguelike 卡牌遊戲時,很容易一下子想到 100 張卡牌、5 個職業、隨機生成地圖。然後坑越開越大,做到第三週可能就放棄。
所以今天不講怎麼增加功能,而是講一件更重要的事:
怎麼把想法砍掉八成,還能留下可以玩的遊戲。
Day 02 提過,我跟 Gemini 的第一句話是:
「想開發自己的 Roguelike 卡片文字遊戲,你有什麼建議,最簡單的遊戲會是什麼」
沒有規格、沒有玩法設計,就是一句:
「我想做這個,最簡單怎麼做?」
接下來的討論裡,我一路問:
完全沒有遊戲開發經驗該用什麼引擎?
只有 HP、護甲、攻擊力夠不夠?
能不能簡化成只有一個敵人?
這個階段可以隨便講,也可以隨時推翻自己的想法。
因為還沒有程式碼,改想法幾乎沒有成本。
Roguelike 常見的元素是隨機地圖和角色走位。
但如果要做這些,就會多出:
所以我最後直接拿掉地圖。
改成:
Boss Rush。
不走地圖,只做一連串關卡。
這一刀砍掉的是一整套系統,只保留最終的戰鬥。
多職業聽起來很有趣,但每增加一個職業,就代表要增加:
第一版如果做三個職業,工作量不只是多三倍,平衡也會變得更複雜。
所以第一版:
只做一套牌組。
最後,我連角色數值也砍了。
參考我玩過的《Obsidian Knight: Roguelike RPG》,角色只留下三個核心數值:
| 數值 | 作用 |
|---|---|
| HP(生命) | 歸零就結束 |
| Armor(護甲) | 優先吸收傷害 |
| Attack(攻擊力) | 影響輸出 |
沒有魔力、沒有速度、沒有暴擊率,也沒有元素抗性。
因為我想先確認:
只靠這三個數值,能不能做出有趣的玩法?
前面砍掉這麼多東西之後,最後我跟 Gemini 收斂成一句很簡單的描述:
「那最簡單的是不是,一場只有一個敵人,就是魔王,然後我會撿 10 個寶箱拿到卡片,然後最後決戰大魔王」
《異世界救援》的基本結構,就這樣定下來了:
第 1~9 關:開寶箱,三選一,把卡加進牌組
第 10 關:用構築好的牌組打魔王
前 9 關負責構築。
第 10 關負責驗收。
沒有第三種關卡。
這個設計還有一個很實際的好處:
前 9 關可以共用同一套程式邏輯。
所以看起來是 10 關,實際上核心工作量可能只有 2 套系統。
這時候問題來了。
三個數值會不會太少?
我的答案是:
數值的數量不重要,重要的是它們會不會互相影響。
遊戲最核心的一條規則是:
受到傷害時,先扣護甲,護甲不夠才扣生命。
也就是:
func take_damage(incoming_damage: int):
if armor >= incoming_damage:
armor -= incoming_damage
else:
var remaining_damage = incoming_damage - armor
armor = 0
hp -= remaining_damage
hp = max(hp, 0)
有了這條規則,卡牌就可以開始產生不同玩法。
| 卡牌 | 效果 |
|---|---|
| 斬擊 | 造成攻擊力的傷害 |
| 招架 | 獲得護甲 |
| 盾牌衝鋒 | 造成等同當前護甲值的傷害 |
| 破甲打擊 | 造成傷害並清空敵方護甲 |
| 賣血狂暴 | 扣自己血量換攻擊力 |
後面三張卡才是比較有意思的地方。
因為它們不是單純增加數值,而是讓:
護甲、攻擊力、生命互相產生關係。
所以:
三個數值不是限制,而是設計的支點。
上面的程式碼是規劃階段的版本。
最後真正跑在遊戲裡的寫法不太一樣,會另外記錄「這次擋下了多少傷害」。
當時看起來只是不同寫法。
後來才發現,這個差異真的會出問題。
Day 22,我會講一個因此產生的 bug:
戰鬥日誌顯示「護甲擋下 2 點」,但玩家整場根本沒有護甲。
遊戲規則收斂之後,我還沒有馬上開始做 Godot。
我先問 Gemini:
「那是不是先設計 web 版,你能直接 demo?」
結果 Gemini 直接生成了一個可以互動的網頁版本,我自己點了幾輪。

🎬 實際試玩影片:Gemini 生成的網頁版遊戲原型
這一步我覺得非常值得保留。
因為做一個簡單的網頁原型,只需要幾分鐘。
但它可以先回答一個最重要的問題:
這個玩法本身到底好不好玩?
實際試玩後,我確認:
抽牌 → 出牌 → 觸發連段
這個核心循環可以成立。
所以我決定:
先用文字把玩法跑通,美術之後再換上去。
這也是目前 Godot 裡的狀態。

🎬 實際試玩影片:Godot 裡的灰模戰鬥畫面
到目前為止,它還是純文字灰模,但核心玩法已經可以跑起來。
因為如果純文字狀態下就不好玩,
加上美術也只會變成好看的不好玩。
這次不是單純把遊戲做小而已。
回頭看,我覺得有三個原則值得記下來。
砍掉地圖,省下的是整套 TileMap、碰撞和路徑規劃。
砍掉 20 張卡牌,省下的只是 20 筆內容。
所以如果真的要縮小專案:
先砍掉會帶來大量連鎖工作的系統。
不是把數值砍得越少越好。
而是要留下那些會互相影響的數值。
HP、護甲、攻擊力雖然只有三個,卻可以透過卡牌互相作用,產生不同玩法。
10 關裡有 9 關使用同一套邏輯。
所以看起來是 10 關,實際上核心工作量可能只有** 2 套系統**
也因此,整個設計可以簡化很多。
這次企劃收斂:
砍掉地圖。
砍掉職業。
砍掉複雜數值。
留下:
3 個核心數值 + 10 關流程 + 一套核心戰鬥。
然後先做網頁原型,確認玩法可以成立,再正式開工。
在過程中很容易感覺到:
做遊戲不一定是一直增加東西,有時候真正困難的是知道什麼該拿掉。
最後企劃收斂完成,規格也寫進了 README.md。
明天 Day 04,正式開工。
建資料夾、開 VS Code、安裝 Godot,然後讓 Claude Code 開始建立第一個真正的遊戲專案。
💬 你有沒有做到一半就放棄的 side project?現在回頭看,當初最該砍掉的是什麼?