Lex Universalis 项目企划书(Godot)
这份企划书是我作为 Lex Universalis 项目提出者,对这款 PvE 优先、未来可推导 PvP 的卡牌肉鸽游戏做出的初版规划。它不是外部资料整理,也不是单纯的技术备忘,而是我希望团队后续可以直接围绕它讨论分工、确定 Demo 边界、拆开发任务的项目说明书。
Lex Universalis 的当前项目地址是:https://github.com/emptyinkpot/Lex-Universalis。我把它规划为一款基于 Godot 4.x 开发的卡牌肉鸽。玩法主骨架参考《杀戮尖塔》,但战斗内核会更接近“玩家 vs AI 玩家”:双方都拥有卡组、手牌、能量和出牌流程。我的优先级不是一开始做完整 PvP,而是先做出一套能跑通、能扩展、能验证乐趣的“双方同规则打牌”的 PvE Demo。
一句话定位:
我想先做出一套干净的 Actor 统一抽象 + 状态机 + 数据驱动 + 可扩展效果系统,让 PvP 将来可以从 PvE 自然推导出来。
目录
- 人员分配与项目组织
- 项目概述
- 玩法定位与融合策略
- 核心系统设计
- 技术路线与工程结构
- 版本边界与 MVP
- 按完成度推进的开发计划
- 协作机制与验收节点
- 参考源码与拆解方向
- 风险控制与避坑清单
- 结论与后续文档
一、人员分配与项目组织
1.1 组织原则
我不打算把 Lex Universalis 按大厂式重型流程来组织。它更适合做成一个高密度小团队项目:人数不多,但每个人都有明确的负责范围。团队成员可以一人多职,但不能所有人都只参与一点边角工作。制作决策、技术架构、战斗系统和视觉方向必须有稳定 owner。
我会按下面几条原则组织团队:
- 项目主文档以职位为主,不先写死具体人名。
- 每个人都要有主职责和副职责。
- 每人约
70%时间投入主职责,30%时间承担副职责。 - 每个阶段必须有可试玩版本,不能只停留在讨论和材料整理。
在 GDD / TDD / 企划书里,我会写 Producer / Game Director、Tech Lead、Combat Systems Engineer、UI Designer 这类职位。真实成员对应哪个职位,可以在下面的人员姓名列或内部映射表里填写。这样后续如果人员调整,项目结构本身不用跟着重写。
1.2 计划团队结构(8 人)
| 职务 | 负责人员 | 人数 | 主职责 | 关键产出 |
|---|---|---|---|---|
| Producer / Game Director / Final Owner | 刘高朋 | 1 | 项目方向、功能优先级、版本决策、节奏控制、最终拍板 | 版本目标、功能取舍、里程碑验收 |
| Tech Lead / Core Architect | 万林炜 | 1 | 技术架构、系统拆分、风险控制、代码主链把关 | 架构骨架、核心接口、技术规范 |
| Art Director / Visual Owner | 王元 | 1 | 视觉方向、风格统一、关键资源把关 | UI 风格、关键卡面、视觉基调 |
| Combat Systems Engineer | 申林昊 | 1 | 卡牌系统、战斗流程、效果结算 | 战斗主循环、目标选择、结算链路 |
| Systems / Framework Engineer | 殷丹阳 | 1 | 数据驱动、事件系统、存档、工具链 | 资源读取、事件系统、存档和调试工具 |
| UI / Gameplay Engineer | 周桐宇 | 1 | 手牌交互、目标选择、战斗 UI | 卡牌交互、HUD、基础反馈 |
| Map / Flow Engineer | 刘高朋 | 1 | 地图节点、场景切换、奖励流程 | 地图推进、战后奖励、状态流转 |
| Systems / Balance Designer | 秦硕 | 1 | 战斗机制、数值模型、敌人行为、Buff 逻辑 | 数值表、敌人模板、机制说明 |
| Narrative / Content / UI Visual Designer | 任元丰 | 1 | 世界观、卡牌描述、事件文本、界面视觉执行 | 事件文本、卡牌描述、卡牌模板、图标集 |
如果实际团队严格只有 8 人,我会让 Producer / Game Director 兼任 Art Director / Visual Owner,或者让 Narrative / Content Designer 兼任一部分 UI 视觉执行。我的重点不是把职位数凑得很完整,而是保证每个核心模块都有人真正负责。
程序组我倾向于拆成:
1 个核心战斗
+ 1 个框架架构
+ 2 个功能实现1.3 按职务拆解的 ownership
Producer / Game Director
这个角色负责项目方向和最终体验。我会让它承担版本边界、优先级、阶段试玩验收和功能取舍,尤其要负责决定哪些内容暂时不做。
Tech Lead
这个角色负责主架构和技术边界。我会让它守住数据驱动、逻辑/UI 解耦、核心模块接口和系统耦合风险。
Combat Systems Engineer
这个角色负责战斗主链路,包括卡牌播放、目标选择、结算顺序,以及伤害、防御、抽牌、召唤等效果调用链。
Systems / Framework Engineer
这个角色负责底层支撑,包括事件系统、数据读取、存档、调试工具和资源组织。
UI / Gameplay Engineer
这个角色负责战斗界面的可用性,包括手牌展示、hover / 拖拽 / 点击交互、目标反馈和基础表现。
Map / Flow Engineer
这个角色负责战斗外流程,包括地图生成、节点跳转、战后奖励、场景切换和状态保存。
Systems / Balance Designer
这个角色负责卡牌数值表、敌人模板、状态效果规则和难度曲线。
Narrative / Content / UI Visual Designer
这个角色负责卡牌描述、事件文本、世界观设定、UI 文案、卡牌排版和玩家反馈语气。
二、项目概述
2.1 项目目标
我希望 Lex Universalis 的第一目标是做出一个 3 个月内可展示、可试玩的完整 Demo。这个 Demo 不追求商业版内容量,而是要证明三件事:
- 双方都能按同一套规则抽牌、获得能量、出牌和结算。
- 敌人不只是脚本怪,而是 AI 控制的规则玩家。
- 技术骨架足够干净,后续可以扩展到卡组构筑、肉鸽外壳,甚至 PvP,而不是 Demo 做完就推倒重来。
2.2 项目类型
我把项目类型定为:
- 游戏名称:
Lex Universalis - 项目仓库:https://github.com/emptyinkpot/Lex-Universalis
- 类型:PvE 优先的卡牌肉鸽,后期保留 PvP 推导空间
- 战斗形式:回合制
- 核心循环:玩家回合出牌、敌人 AI 回合出牌、双方结算、胜负判定
- 目标体验:先验证“玩家 vs AI 玩家”的双方打牌是否好玩,再扩展卡组构筑、地图推进和特色机制
2.3 技术选择
我计划优先使用 Godot 4.x。
选择 Godot 的原因是:
- GDScript 2.0 适合快速写系统原型。
Resource很适合描述卡牌、效果、敌人和遗物。ControlUI 系统足够支撑手牌、HUD、目标选择和战斗界面。- 项目规模适合中小团队,不需要一开始引入更重的商业引擎工作流。
三、玩法定位与融合策略
3.1 基础玩法定位
我会把 Lex Universalis 的第一阶段定位成:
- PvE 优先。
- 回合制战斗。
- 玩家和敌人都拥有卡组、手牌、能量和出牌流程。
- 敌人由 AI 控制,但底层结构和玩家一致。
- 后续再加入卡组构筑、地图推进、Boss 和特色机制。
这里的关键不是“一开始做 PvP”,而是先做“双方都按同一套规则打牌的 PvE”。换句话说,我现在要做的不是完整玩家对战,而是让敌人也打牌。
3.2 PvP 的正确位置
我会把 PvP 设计成从 PvE 推导出来的后期形态,而不是和 PvE 同时开工。
项目会按三层推进:
-
层 1:玩家 vs 规则驱动敌人
敌人先有卡组、手牌和基础 AI,但决策可以很简单。 -
层 2:玩家 vs 完整规则玩家
敌人拥有和玩家一样的卡组结构、能量、抽牌、打牌逻辑,本质是“AI 控制的另一个玩家”。 -
层 3:真正 PvP
等前两层稳定后,再考虑联机、异步对战、匹配、同步、回放等问题。
这个顺序能把复杂度控制住。PvP 的本质会变成控制权切换:Player = Actor(人操作),Enemy = Actor(AI 操作),未来的 RemotePlayer = Actor(远端玩家操作)。
3.3 融合方式
我不会把《杀戮尖塔》《炉石》《邪恶铭刻》平均混在一起。我的融合顺序是:
- 主骨架:
杀戮尖塔 - 战斗扩展:双方同规则打牌 + 目标选择
- 风味增强:
邪恶铭刻的献祭、卡牌进化、叙事感
具体执行上,我会先保留《杀戮尖塔》的战斗节奏,但把敌人从“写死行为”升级为“AI 控制的规则玩家”。单位、献祭、进化这些差异化机制后置,等双方打牌的基础战斗成立后再加。
3.4 我会保留和后置的元素
《杀戮尖塔》侧,我会保留:
- 能量系统。
- 抽牌 / 弃牌 / 牌库循环。
- 回合制节奏。
- 战后奖励和地图推进,但不进入最小 MVP。
对战结构侧,我会先保留:
Actor统一抽象。- 双方卡组、手牌、能量、出牌。
- 极简敌人 AI。
- 目标选择。
这些内容后置:
- 单位系统。
- 献祭机制。
- 卡牌进化。
- 元叙事事件。
- 永久性卡牌变化。
后置不代表不做,而是不能压过当前第一目标:验证“双方都能打牌”的战斗是否好玩。
四、核心系统设计
4.1 Actor 统一抽象
我会把 Actor 作为战斗系统最核心的抽象。玩家和敌人都不是两套系统,而是同一种规则实体,只是控制方式不同。
class_name Actor
var deck: Array[CardData]
var hand: Array[CardData]
var discard_pile: Array[CardData]
var energy: int
var hp: int
var max_hp: int
func draw(amount: int) -> void:
pass
func can_play(card: CardData) -> bool:
return energy >= card.cost
func play_card(card: CardData, target: Actor, context) -> void:
pass在这个模型下:
Player = Actor(人操作)
Enemy = Actor(AI 操作)
Future PvP Player = Actor(远端玩家操作)这一步决定 Lex Universalis 后续能不能自然扩展到 PvP、回放、AI 调参和多种对战模式。如果我一开始把 Player 和 Enemy 写成两套逻辑,后面做 PvP 会变成重写战斗系统。
4.2 卡牌数据
我会把卡牌做成资源对象,而不是把卡牌数值和效果写死在代码里。
extends Resource
class_name CardData
@export var id: String
@export var name: String
@export var cost: int
@export var description: String
@export var effects: Array[EffectData]
@export var target_type: int每张卡牌至少要描述:
costeffecttarget- 关键词 / 标签
- 稀有度、升级态等扩展字段
4.3 效果系统
效果系统是我最优先保证干净的部分。我不打算把卡牌逻辑写成大量 if/else,而是让不同效果各自实现 apply。
extends Resource
class_name EffectData
func apply(source, target, context):
pass例如:
class_name DamageEffect
extends EffectData
@export var amount: int
func apply(source, target, context):
target.take_damage(amount)以后无论是伤害、护甲、抽牌、上毒、多段攻击、召唤单位还是献祭触发,都可以沿这个方向继续扩展。
4.4 实体系统
Actor 负责“谁在打牌”,Entity 负责“谁能承受伤害或拥有生命”。第一版里玩家和敌人可以直接作为 Actor 参与战斗;如果后面加入单位系统,单位也可以共享实体能力。
class_name Entity
var hp: int
var max_hp: int
func take_damage(amount: int) -> void:
hp -= amount在此基础上再分:
PlayerEnemyUnit
第一版不会优先做复杂 Unit,但我会保留这个方向,避免后续引入单位时和当前战斗模型冲突。
4.5 战斗状态机
我会尽早建立 BattleManager,不把战斗流程散落在 UI 或卡牌脚本里。
enum BattleState {
START,
PLAYER_TURN,
ENEMY_TURN,
RESOLVE,
END
}BattleManager 负责:
- 双方开局抽牌。
- 当前 Actor 回合控制。
- 出牌校验。
- 结束回合。
- 敌人 AI 行动。
- 持续效果结算。
- 胜负判定。
基础循环先定为:
Start Battle
→ Player Actor Draw
→ Player Turn: play cards
→ End Player Turn
→ Enemy Actor Draw
→ Enemy AI Turn: play cards
→ Resolve Status / Buff
→ Next Round这套循环看起来仍是 PvE,但底层已经是“两个 Actor 轮流按同一规则打牌”。这就是后续 PvP 的基础。
4.6 敌人 AI
第一版敌人 AI 不做复杂。它只需要证明“敌人也能用卡组打牌”。
MVP AI 规则:
按手牌顺序扫描
→ 找到第一张当前能量足够的牌
→ 选择合法目标
→ 打出
→ 重复,直到没有可打牌或选择结束后续 AI 再逐步增加:
- 低血量优先防御。
- 玩家低血量优先攻击。
- 能量利用率更高的出牌顺序。
- 毒、抽牌、多段攻击等策略权重。
4.7 事件系统
我会预留事件系统,因为后续 buff、触发技、连锁效果、抽牌触发、单位死亡触发都会依赖它。
signal card_played(actor, card)
signal turn_started(actor)
signal damage_taken(target, amount)
signal actor_defeated(actor)事件系统的目的,是把卡牌、Buff、Relic 和角色特性解耦开。
4.8 后置系统:单位与 Roguelike 循环
单位系统、地图、奖励和 Boss 都是重要内容,但不进入最小 MVP。等双方打牌成立后,地图第一版只做够用的结构:
Start
├─ 战斗
├─ 商店
├─ 随机事件
└─ 精英我先解决三个问题:
- 节点怎么生成。
- 节点怎么跳转。
- 战后奖励怎么发。
复杂单位规则、复杂分支图、大量事件文本和超长 meta progression 都不进入第一版 Demo。
五、技术路线与工程结构
5.1 项目结构
我会从一开始拆开逻辑层和表现层。
res://
├── core/ # 核心逻辑,不放 UI
│ ├── battle/
│ ├── card/
│ ├── entity/
│ ├── effect/
│ └── relic/
│
├── data/ # .tres / .res 等数据资源
│ ├── cards/
│ ├── enemies/
│ └── relics/
│
├── scenes/
│ ├── battle/
│ ├── map/
│ └── ui/
│
├── ui/ # 纯 UI 逻辑
└── utils/我会遵守这几个边界:
core/只负责规则。ui/和scenes/只负责表现。- 卡牌和敌人尽量用资源描述,不把数值写死在场景里。
- 不把规则逻辑写进 UI,避免后续改规则、测试和扩卡都变困难。
5.2 项目主文档体系
我会先维护三类文档,不做过重的文档矩阵。
GDD(Game Design Document)
GDD 面向全员,写规则和体验,不写代码实现:
- 游戏概述。
- 核心玩法。
- 卡牌系统。
- 战斗系统。
- Roguelike 结构。
- 敌人与 AI。
- 项目职务与 owner。
- 开发路线图。
TDD(Technical Design Document)
TDD 面向程序组,写技术结构和边界:
- 核心模块划分。
- 关键类与数据流。
- 状态机。
- 资源组织方式。
- 事件系统。
- 存档与配置边界。
Art Guide / UI Guide
视觉和 UI 规范面向美术与 UI 执行:
- 卡牌尺寸与版式。
- HUD 结构。
- 字体与颜色方向。
- 图标风格。
- 角色、敌人、卡牌视觉关系。
六、版本边界与 MVP
6.1 第一验收 MVP 目标
我会把第一验收 MVP 锁定为“双方都能打牌的一场战斗”,不把它做成完整商业化版本,也不在第一阶段做完整 PvP。后续 Demo 可以继续向卡组构筑和 Roguelike 外壳扩展,但只有这个 MVP 先成立,后面的地图、Boss 和差异化机制才有意义。
开始战斗
→ 玩家抽牌、获得能量、出牌
→ 敌人抽牌、获得能量、AI 出牌
→ 双方循环结算
→ 胜负判定MVP 必须包含:
- 双方都有卡组。
- 双方都有手牌、抽牌、能量和出牌。
- 玩家初始牌组约 10 张。
- 敌人卡组约 5 到 8 张。
- 极简敌人 AI:优先打出第一张能打的牌。
- 5 到 8 张基础卡牌:攻击、防御、抽牌、毒、多段攻击。
- 一场完整的玩家回合 -> 敌人回合 -> 胜负判定流程。
MVP 暂不包含:
- 完整 PvP。
- 联机、匹配、同步、回放。
- 地图。
- relic。
- 单位系统。
- 献祭。
- UI 美术打磨。
- 多敌人战斗。
- 多角色开局。
- 长剧情分支。
- 复杂 Meta 成长。
- 大量可收集外围系统。
我判断 Demo 成功与否,不看内容是否很多,而看“双方同规则打牌”这件事是否成立、是否有基础乐趣。
6.2 MVP 分级
V1
我先做一场最小“双方打牌”战斗:
- 玩家和敌人各一个 Actor。
- 玩家 10 张卡组。
- 敌人 5 到 8 张卡组。
- 双方都有手牌、能量、抽牌、出牌。
- 敌人 AI:优先打出第一张能打的牌。
- 胜负判定。
V2
我再把战斗变得可读、可玩,并开始形成构筑感:
- 10 张左右基础卡牌。
- Buff / Debuff。
- 敌人卡组模板。
- 简单敌人 AI 权重。
- 简单奖励选择。
V3
我最后补肉鸽外壳:
- 3 到 5 场连续战斗。
- 简单地图。
- 1 个 Boss。
- 战后加卡。
只要 V1 做扎实,我就能判断 Lex Universalis 的核心方向是否值得继续推进。单位、献祭、进化都放在 V3 之后再评估。
6.3 开发顺序
我的开发顺序是:
- 玩家能打牌:出牌、扣血、回合切换、3 到 5 张基础卡牌。
- 敌人也能打牌:Enemy 变成 Actor,拥有 deck / hand / energy / AI 出牌。
- 战斗可玩化:卡牌扩展、Buff / Debuff、敌人卡组模板。
- 卡组构筑:战后加卡、简单卡池、初步平衡。
- Roguelike 外壳:3 到 5 场战斗、简单节点地图、一个 Boss。
- 差异化机制:单位、献祭、进化。
- 未来 PvP:联机或异步对战。
七、按完成度推进的开发计划
我不按日期或周数安排 Lex Universalis 的项目目标。这个项目更适合按“系统完成程度”推进:前一个系统没有达到可试玩标准,就不进入下一个系统。这样可以避免表面上排期推进了,但核心玩法其实没有成立。
每个阶段都必须满足三类条件:
- 可运行:不是文档完成,而是游戏里能跑。
- 可试玩:不是只在调试台通过,而是玩家可以实际操作。
- 可判断:完成后能判断这个方向是否值得继续投入。
7.1 完成度 1:玩家能打牌
这一阶段只追一个目标:玩家作为 Actor 可以完成一轮基础出牌。
核心实现
- 建立 Godot 项目基础结构。
- 确定
CardData / EffectData / Actor / BattleManager四个核心入口。 - 玩家拥有
deck / hand / discard_pile / energy / hp。 - 实现抽牌、出牌、扣血、弃牌、结束回合。
- 做出 3 张最基础卡牌:攻击、防御、抽牌。
- 放入 1 个临时敌人,先作为可被攻击的目标。
完成标准
- 玩家进入战斗后能抽牌。
- 玩家能看到手牌和能量。
- 玩家能打出至少 3 类卡牌。
- 出牌能正确消耗能量。
- 攻击牌能造成伤害,防御牌能产生防御,抽牌牌能改变手牌。
- 战斗能判断胜利或失败。
阶段产出
- 最小战斗场景。
- 首版
Actor。 - 首版
BattleManager。 - 3 张基础卡牌资源。
- 一份最小卡牌数据表。
暂不处理
- 敌人卡组。
- 敌人 AI。
- 地图。
- 战后奖励。
- 美术风格。
7.2 完成度 2:敌人也能打牌
这是整个项目最关键的阶段。完成这一阶段后,敌人不再是脚本怪,而是 AI 控制的规则玩家。
核心实现
- 玩家和敌人都统一成
Actor。 - 敌人拥有自己的
deck / hand / discard_pile / energy / hp。 - 敌人回合开始时抽牌并获得能量。
- 敌人能调用同一套
play_card()。 - 敌人使用和玩家同一套
CardData与EffectData。 - AI 先只做最小规则:按手牌顺序打出第一张能打的牌。
完成标准
- 敌人不是固定攻击脚本。
- 敌人可以从自己的卡组抽牌。
- 敌人可以消耗能量打牌。
- 敌人能打攻击、防御、抽牌类卡牌。
- 玩家回合和敌人回合能循环。
- 一场战斗能以双方同规则出牌的方式结束。
阶段产出
EnemyActor或等价的 AI 控制 Actor。- 极简 AI 决策器。
- 1 套敌人基础卡组。
- 敌人出牌日志或战斗内反馈。
- 一场完整“玩家 vs AI 玩家”战斗。
暂不处理
- 聪明 AI。
- 多敌人。
- PvP。
- 单位系统。
- 复杂状态连锁。
7.3 完成度 3:基础卡池成立
这一阶段的目标是让双方打牌不只是能跑,而是开始有选择和差异。
核心实现
- 把基础卡扩到 8 到 10 张。
- 覆盖攻击、防御、抽牌、毒、多段攻击、增益或减益。
- 为每张卡补齐名称、费用、效果、目标类型和描述。
- 初步建立卡牌稀有度或类型标签。
- 让玩家卡组和敌人卡组共享同一套卡牌效果系统。
完成标准
- 玩家不再只是在重复打同一种攻击牌。
- 敌人可以通过卡组表现出不同倾向。
- 卡牌效果能通过
EffectData组合,而不是写死在单张卡里。 - 玩家能从战斗中感受到“出牌顺序”和“能量分配”的差异。
阶段产出
- 8 到 10 张基础卡。
- 首版卡牌平衡表。
- 2 到 3 套敌人卡组模板。
- 首版关键词说明。
暂不处理
- 大量卡池。
- 稀有卡复杂机制。
- 卡牌升级系统。
- 献祭、进化等特色机制。
7.4 完成度 4:构筑感出现
这一阶段的目标是让玩家不只是在打一场固定战斗,而是开始对卡组产生管理感。
核心实现
- 战斗胜利后出现卡牌奖励。
- 奖励采用三选一或类似的简单选择。
- 选择的卡能加入玩家卡组。
- 下一场战斗使用更新后的卡组。
- 保留玩家血量或其他基础状态。
完成标准
- 玩家能在战斗后改变自己的卡组。
- 卡组变化会影响下一场战斗。
- 奖励选择不是纯装饰,而是能改变打法。
- 至少能连续完成多场战斗。
阶段产出
- 战后奖励界面。
- 卡组增删逻辑。
- 简单卡池抽取规则。
- 连续战斗流程。
暂不处理
- 商店。
- 遗物。
- 复杂事件。
- 长线 Meta 成长。
7.5 完成度 5:Roguelike 外壳成立
这一阶段才开始做地图和一局流程。它不是 MVP 的前置条件,而是 MVP 成立后的外壳。
核心实现
- 3 到 5 场连续战斗。
- 简单节点地图。
- 普通战斗节点。
- 奖励节点。
- 1 个 Boss 节点。
- Boss 拥有独立卡组和更明确的战斗节奏。
完成标准
- 玩家能从起点推进到 Boss。
- 每场战斗之间的卡组状态能保留。
- Boss 战和普通战斗有明显差异。
- 一局可以完整结束,而不是只停在单场战斗。
阶段产出
- 首版地图流。
- 首版 Boss。
- 3 到 5 个敌人或敌人卡组模板。
- 一局 Demo 闭环。
暂不处理
- 大地图分支。
- 商店经济。
- 大量剧情事件。
- 复杂 Meta progression。
7.6 完成度 6:差异化机制选择
只有当双方打牌、基础卡池、构筑和一局外壳都成立后,我才会考虑差异化机制。这里不能贪多,只能先选一个方向验证。
候选方向:
- 单位系统:让部分卡牌召唤单位,形成场上持续压力。
- 献祭机制:通过消耗单位、卡牌或资源换取更强效果。
- 卡牌进化:让卡牌在一局中发生永久或半永久变化。
选择标准:
- 是否能增强“双方打牌”的核心,而不是抢走核心。
- 是否能用现有
Actor / CardData / EffectData / BattleManager承载。 - 是否会让敌人 AI 复杂度失控。
- 是否能用少量内容验证玩法价值。
阶段完成标准:
- 只加入一个差异化机制。
- 该机制至少有 2 到 3 张卡能体现。
- 玩家和敌人都能在规则上使用或应对该机制。
- 如果机制破坏基础战斗节奏,就回退到上一阶段。
7.7 完成度 7:体验打磨
这一阶段不扩功能,只把已经成立的 Demo 打磨到能给别人试玩。
核心实现
- 出牌反馈。
- 受击反馈。
- 抽牌、弃牌、能量变化反馈。
- 敌人出牌可读性。
- 基础音效。
- 错误提示和不可出牌提示。
- 战斗结束结算。
完成标准
- 不看代码的人也能理解当前轮到谁、能做什么、发生了什么。
- 敌人出牌不是“突然扣血”,而是能看到卡牌和效果。
- 玩家能独立完成一局 Demo。
- 试玩反馈能集中在玩法问题,而不是“看不懂怎么操作”。
7.8 完成度 8:未来 PvP 预留
PvP 不进入当前 Demo 的目标范围。只有当 Actor、BattleManager、卡牌效果、AI 玩家和一局流程都稳定后,我才会考虑 PvP。
PvP 预留方向:
- 异步对战。
- 联机对战。
- 匹配。
- 同步 / 回放。
- 远端玩家控制的
Actor。
我不会为了未来 PvP 现在就做网络层。当前只需要保证战斗内核不是写死的单机脚本,而是能从 Actor 控制权自然扩展。
八、协作机制与验收节点
8.1 阶段推进节奏
阶段开始
每进入一个阶段前,我会明确当前唯一目标、负责 owner、完成标准和明确不做项。没有完成标准的阶段不启动。
阶段推进中
同步时只讲三件事:当前阶段完成了什么、下一步要补什么、卡在哪里。讨论不能跳到后续阶段抢跑。
阶段验收
每个阶段结束必须产出一个可试玩版本。全员试玩后,只记录真实问题,不开散会式脑暴。
8.2 完成度验收点
验收点 1:玩家必须能打一局
如果玩家抽牌、出牌、扣血、回合切换、胜负判定这条链路还没有完成,就不能进入敌人打牌阶段。
验收点 2:敌人必须能打牌
如果敌人还只是写死行为,而不是拥有卡组、手牌、能量和 AI 出牌,我会暂停外围内容,优先补齐 Actor 统一结构。
验收点 3:构筑必须影响下一场战斗
如果战后加卡不能影响后续战斗,说明卡组构筑还只是界面装饰,不能进入 Roguelike 外壳阶段。
验收点 4:必须有一局流程
如果还不能完成连续战斗、战后加卡、Boss 结算,就不继续扩差异化机制。
验收点 5:Demo 必须可被外部试玩
最终 Demo 的完整标准是“双方同规则打牌”成立,并且玩家能看懂、能操作、能完成一局。它不是 PvP、单位、献祭或复杂地图都完成。
九、参考源码与拆解方向
我会把参考源码当作拆解对象,而不是寻找一个可以直接照搬的完整成品。Lex Universalis 自己的代码仓库是主项目真源,其他仓库只用于学习结构、交互和工程拆法。
9.1 Lex Universalis 仓库
Lex Universalis
- GitHub:https://github.com/emptyinkpot/Lex-Universalis
- 用途:团队实际开发仓库。
- 当前定位:Godot 4.x 桌面游戏项目。
我会把这个仓库作为唯一项目源码主线。参考源码里的结构、交互和实现方式,只能在理解后吸收进 Lex Universalis,不能直接让参考代码反过来主导项目结构。
9.2 核心逻辑 / 架构参考
Slay the Web
我主要看它的:
- 卡牌肉鸽核心结构。
- 地图、战斗、卡组的拆分方式。
- 逻辑层和 UI 的解耦。
- 数据驱动组织方式。
重点价值:
GameFlowManager这类流程控制思路。Card / Player / Enemy分离建模。- 事件系统与可复现 RNG。
Slay the Spire C++ 复刻 / 同类高校项目
我主要看它的:
- 面向对象建模方式。
- Buff / 状态系统。
- 工厂模式、事件系统、对象生成。
我不会照搬 C++ 实现,而是借它理解卡牌对象怎么抽象、Actor 怎么统一建模、状态叠加怎么避免写成一堆 if/else。
Godot 官方 Demo 项目
我主要看它的:
- Godot 4.x 项目组织方式。
- 场景、输入、UI、资源加载的官方写法。
ControlUI 和 gameplay 场景之间的拆分方式。
这个仓库不是卡牌肉鸽源码,但可以作为 Godot 工程习惯和基础写法的参考,避免 Lex Universalis 一开始就写出不符合引擎习惯的结构。
9.3 卡牌 UI / 交互层参考
Card Framework(Godot)
- GitHub:https://github.com/chun92/card-framework
- Godot Asset Library:https://godotengine.org/asset-library/asset/3616
我主要看它的:
- 手牌展示。
- 卡牌 hover / 拖拽 / 排列。
- 目标选择和交互反馈。
这类项目更偏表现层,不是核心玩法框架。我会把它当作 Lex Universalis 的卡牌 UI 与交互反馈参考,而不是战斗规则参考。
9.4 参考方式
我不会期待找到一个完整成品来改,而是分模块学习:
- 用一个项目学战斗主循环。
- 用一个项目学 Godot 资源驱动。
- 用一个项目学卡牌 UI 交互。
- 用一个项目学 Buff / 事件系统。
最终我要做的是系统拼装 + 自己的玩法选择,不是简单 clone。
十、风险控制与避坑清单
10.1 项目管理风险
没有唯一拍板人
如果没有唯一拍板人,项目会持续讨论但无法收口。所以我会把 Final Owner 写进团队结构。
没有技术 owner
如果没有技术 owner,后期系统很容易越做越乱。所以我会让 Tech Lead 对架构和系统边界负责。
设计和程序脱节
卡牌系统做出来不等于游戏好玩。我会把阶段试玩作为验收方式,避免设计和实现长期分离。
人人都做一点
如果所有人都只做一点边角,核心模块就没人真正负责。所以我会按 owner 拆任务。
一直加功能,不关版本边界
Lex Universalis 最大的风险不是做不出来,而是做太多。我会用 3 个月 Demo 边界限制功能扩张。
10.2 技术风险
把逻辑写进 UI
如果规则逻辑写进 UI,后续改规则、测试和扩卡都会变困难。所以我会从目录结构上先拆开 core/ 和 ui/。
卡牌逻辑写死成 if/else
前几张牌写 if/else 能跑,但二十张以后会失控。所以我会优先建立 EffectData 和效果派生结构。
没有事件系统
如果没有事件系统,relic、被动、状态触发和连锁效果都会变得难维护。所以我会在早期就预留事件机制。
太早做复杂地图
地图过重会拖慢战斗验证。所以我会先做简单节点推进,复杂地图和大量事件文本后置。
一开始就做完整 PvP
完整 PvP 会立刻引入联机、同步、匹配、回放和公平性问题,复杂度会把 Demo 压垮。所以当前阶段我只做“AI 控制的规则玩家”,让 PvP 以后从 Actor 控制权切换自然长出来。
一开始就完整炉石化
完整炉石化会让站位、单位交换和复杂场面效果同时爆炸。所以我只先做双方卡组、手牌、能量、目标选择和基础出牌,不在 MVP 做单位系统。
十一、结论与后续文档
11.1 决策摘要
我对 Lex Universalis 的当前决策是:
- 引擎:Godot 4.x
- 类型:PvE 优先、未来可推导 PvP 的卡牌肉鸽
- 主骨架:杀戮尖塔
- 核心战斗:玩家 vs AI 玩家,双方都按同一规则打牌
- 架构重点:Actor 统一抽象、资源驱动、效果系统、事件系统、战斗状态机
- 开发顺序:玩家能打牌 -> 敌人也能打牌 -> 卡组构筑 -> Roguelike 外壳 -> 差异化机制 -> 未来 PvP
一句话版本:
我现在要做的不是完整 PvP,而是先做出“双方都按同一规则打牌”的 PvE;未来 PvP 只是 Actor 控制权从 AI 切换到玩家。
11.2 后续文档优先级
接下来我会优先补这些文档:
- 内部职位到真实成员的映射表。
- GDD:双方打牌规则、胜利条件、卡牌类型、敌人卡组模板。
- TDD:
Actor、BattleManager、AI 决策、数据结构、事件协议。 - Art Guide / UI Guide:卡牌模板、HUD、字体、颜色、图标风格。