docs: 添加项目文档和图表文件

添加游戏设计文档、技术架构文档、数值经济文档等内容
新增Mermaid图表文件描述系统架构和流程
包含README说明文档结构和阅读顺序
This commit is contained in:
2026-04-28 19:19:20 +08:00
commit 2e1b58bada
21 changed files with 2087 additions and 0 deletions
+331
View File
@@ -0,0 +1,331 @@
# 03 系统设计
本文档以“可实现、可平衡、可扩展”为目标,对核心系统做可落地的规格定义。所有系统尽量以统一的“条件/消耗/产出/冷却/概率/标记”表达,便于数据驱动与复用。
## 3.1 时间系统
### 3.1.1 时间推进来源
- 被动流逝:玩家停留在地点、整理背包、阅读日志
- 行为推进:制作、采集、移动、休息、治疗、战斗
- 加速推进:长行为可在 UI 显示进度条并快速推进
### 3.1.2 时间推进的副作用(统一执行顺序)
一次时间推进 `advanceTime(Δt)` 必须按固定顺序执行,避免“先后顺序导致结果不可解释”:
1. 计算状态消耗(饥饿/口渴/精力/理智/辐射等)
2. 计算 Buff/Debuff 结算(按 interval 或按时间累计)
3. 地点资源刷新与生长
4. 敌人刷新窗口推进(遭遇表/权重)
5. 灾害计时与效果更新
6. 触发“基于时间”的任务/事件检查
7. 写入日志与可视化提示
```mermaid
flowchart TD
A[advanceTime Δt] --> B[状态消耗]
B --> C[Buff结算]
C --> D[资源生长]
D --> E[遭遇/敌人刷新]
E --> F[灾害结算]
F --> G[任务/事件检查]
G --> H[日志与提示]
```
对应源文件:[time-pipeline.mmd](./diagrams/time-pipeline.mmd)
### 3.1.3 可测试性要求
- `advanceTime(Δt)` 必须是纯逻辑可重放:输入(状态/地点/随机种子)确定,输出确定
- 所有随机必须可注入 seed,避免线上“无法复现”的 bug
## 3.2 状态系统(生存/精神/污染)
### 3.2.1 核心状态列表(建议)
- 生命(HP):硬失败边界
- 饥饿:低饥饿降低恢复、降低命中/逃跑等
- 口渴:比饥饿更急迫,强约束出行时长
- 精力:约束连续行动;低精力叠加负面 Buff
- 理智:驱动叙事与事件;低理智引发幻觉/误判/不可控选择(可选)
- 辐射/污染:长期压力;影响上限、引发变异与负面状态
### 3.2.2 状态表示与阈值
每个状态至少包含:
- `value` 当前值
- `min/max` 上下限(或软上限)
- `regen/decay` 每分钟变化或由公式计算
- `thresholds` 阈值效果表(进入阈值时添加/移除 Buff)
阈值效果建议优先“软惩罚”,例如:
- 饥饿过低:移动耗时增加、制作速度降低、战斗命中降低
- 口渴过低:理智下降加快、出行事件风险上升
- 辐射过高:最大生命/精力上限下降,物品治疗效率降低
### 3.2.3 Buff/Debuff 设计
Buff 必须具备可解释来源与可清除/可缓解路径:
- 来源:事件、食物、药物、环境、灾害、装备、技能
- 结算:按时间间隔(interval)或按行动(onAction)触发
- 堆叠:定义 stack 规则(叠加、刷新时长、取最大/取和)
## 3.3 物品、背包与容器
### 3.3.1 物品分类
- 食物:恢复饥饿/精力,可能增加辐射或降低理智
- 饮水:恢复口渴,可能增加辐射
- 材料:用于制作、交易、修理
- 工具:提高采集/制作效率,通常有耐久
- 武器/护甲:战斗相关
- 药品:治疗/解毒/抗辐射
- 任务物品:推动剧情,通常不可丢弃或有提示
### 3.3.2 容量模型(推荐:体积)
- `volume`:物品占用体积
- `stackLimit`:最大堆叠
- 背包容量 `bagCapacity`:体积上限
- 容器(箱子/仓库)容量 `storageCapacity`:体积上限
设计理由:
- 体积比“格子”更适合废土资源管理的“取舍”表达
- 体积比“重量”更少涉及物理与移动速度耦合,平衡更稳定
### 3.3.3 耐久与损耗
- 工具/装备耐久下降来源:使用、战斗、环境事件
- 耐久影响方式:
- 低耐久降低效率/命中/防护
- 耐久为 0 时失效或损坏
- 修理策略:
- 基地可修理(消耗材料 + 时间)
- 野外可应急修理(更高成本/更低效率)
## 3.4 制作、烹饪、锻造与科研
### 3.4.1 配方数据结构(通用)
每条配方至少包含:
- `id/name`
- `workbenchType`(手工/工坊/锻造/烹饪/过滤/医疗/科研)
- `requirements`:科技/设施/属性阈值/工具条件
- `inputs`:消耗物品与数量
- `outputs`:产出物品与数量(支持概率)
- `timeCost`:时间消耗(分钟)
- `energyCost`:精力消耗(可选)
- `byproducts`:副产物(垃圾、污染等)
### 3.4.2 科技树(能力导向)
科技树节点建议分为三类:
- 解锁类:解锁制作台/地点能力/新区域
- 优化类:降低时间成本、降低材料损耗、提高成功率
- 风险类:引入强力收益同时引入副作用(辐射、灾害触发概率等)
### 3.4.3 制作失败与变体(提升可玩性)
可选机制:
- 失败:按成功率产生损耗/产出降低/副产物增加
- 变体:同一配方可因材料替代产生不同品质/副作用
- 品质:普通/良好/精良(品质影响耐久/效果/价值)
## 3.5 地图、地点与移动
### 3.5.1 地点图(Graph)结构
- 节点:地点(基地、路口、资源点、剧情点)
- 边:路径(时间成本、风险等级、交通方式)
### 3.5.2 移动消耗
移动的成本由三部分组成:
- 时间成本(基础时间 * 路径系数)
- 状态消耗(按时间推进的消耗 + 额外精力消耗)
- 风险成本(途中遭遇概率、受伤概率、资源损耗)
### 3.5.3 地点模板(用于内容生产)
每个地点应配置:
- `tags`:地洞/村庄/废墟/丛林/避难所等
- `dangerLevel`:风险等级(用于 UI 提示与遭遇权重)
- `resourceNodes`:可采集资源与刷新规则
- `trashNodes`:随机垃圾池与刷新规则
- `encounterTable`:敌人/事件权重表
- `services`:交易/休息/制作/治疗/情报
- `questHooks`:进入/停留/条件触发的任务节点
## 3.6 采集、垃圾与资源刷新
### 3.6.1 资源节点(可预测收益)
资源节点用于提供“可规划收益”:
- 刷新规则:按时间增长(线性/分段)、上限、特殊条件(肥料/净水)
- 采集成本:工具、时间、精力
- 产出:固定 + 少量随机波动
### 3.6.2 垃圾节点(高随机收益)
垃圾节点用于提供“惊喜与赌博”:
- 产出:低价值材料为主,少量稀有掉落
- 风险:可能触发负面事件(感染/辐射/敌人)
### 3.6.3 风险收益标注(UI 需求)
每个采集/垃圾行为都要显示:
- 预估耗时(分钟)
- 预估消耗(口渴/精力)
- 风险提示(可能战斗/可能辐射/可能受伤)
## 3.7 事件系统(详细)
### 3.7.1 事件结构
事件由三部分构成:
- `trigger`:触发条件(地点/时间/状态/物品/任务进度)
- `content`:文本与选项(可插入变量)
- `effects`:结果链(消耗/获得/状态变化/标记/战斗/跳转)
### 3.7.2 选项与概率
选项结果支持:
- 固定结果
- 概率结果(权重表)
- 属性检定(属性→成功率→不同结果)
- 资源检定(消耗某物品才可选)
### 3.7.3 事件结果链(可组合)
结果链建议采用“原子效果”组合:
- `addItem/removeItem`
- `addStatus`
- `addBuff/removeBuff`
- `setFlag`(任务标记、世界标记)
- `startCombat`
- `teleport`(移动到新地点)
- `unlockRecipe/unlockPlace`
- `log`(统一日志格式)
## 3.8 战斗系统(详细)
### 3.8.1 战斗定位
战斗用于表达风险,避免成为主玩法;战斗时间应可控,且“逃跑始终可行但有代价”。
### 3.8.2 战斗模型(距离 + 回合)
关键变量:
- `distance`:双方距离(离散或连续)
- `range`:武器有效射程
- `hitRate`:命中率(基于距离、状态、装备、掩体)
- `damage`:伤害(基础值 * 修正)
- `armor`:减伤/免伤机制
- `stamina/energy`:战斗行动消耗
玩家动作:
- 进攻:消耗弹药/耐久,可能造成伤害
- 防御:降低被命中或降低伤害
- 前进/后退:改变距离,影响下一回合命中率与逃跑
- 逃跑:成功则结束战斗并触发“撤离成本”(掉落/受伤/时间损失)
```mermaid
stateDiagram-v2
[*] --> Init
Init --> PlayerTurn
PlayerTurn --> Resolve
Resolve --> EnemyTurn
EnemyTurn --> Resolve
Resolve --> CheckEnd
CheckEnd --> PlayerTurn: 未结束
CheckEnd --> Escape: 逃跑成功
CheckEnd --> Win: 敌人死亡
CheckEnd --> Lose: 玩家死亡/崩溃
Escape --> [*]
Win --> [*]
Lose --> [*]
```
对应源文件:[combat-state.mmd](./diagrams/combat-state.mmd)
### 3.8.3 战斗掉落与后果
- 掉落不只是奖励,也是内容容器(任务物品、线索、稀有材料)
- 战斗后果必须可见:
- 伤口/感染(持续性 debuff
- 辐射暴露
- 装备耐久下降
- 弹药消耗与补给压力
## 3.9 任务系统(详细)
### 3.9.1 任务状态机
任务建议包含:
- `NotStarted` 未触发
- `Active` 进行中
- `Completed` 完成(领取奖励)
- `Failed` 失败(可选)
- `Locked` 锁定(条件不足)
### 3.9.2 任务目标类型
- 拥有/交付物品
- 到达地点/探索次数
- 击败敌人
- 制作某物
- 触发某事件/做出某选择
- 生存到某天/某时间窗口
### 3.9.3 奖励设计
奖励优先给“能力”而非单纯资源:
- 解锁新配方、新地点服务、新设施槽位
- 给关键工具/装备(降低后续成本)
- 给叙事线索与地图标记
## 3.10 灾害系统(详细)
灾害由三段组成:
- 预警期:给玩家准备窗口(提示与倒计时)
- 爆发期:改变规则(消耗曲线、遭遇权重、资源刷新)
- 残留期:提供短期机会(灾后掉落、特殊事件)
灾害必须满足:
- 可配置开始条件(天数区间、概率、任务触发)
- 可配置影响范围(全局/特定区域)
- 对 UI 有清晰展示(倒计时、当前影响)
## 3.11 交易与经济系统(简化版)
交易系统建议为“基于稀缺度的动态标价”:
- 基础价:物品配置中的 `baseValue`
- 地点修正:不同地点对物品类别有偏好(倍率)
- 供需修正:根据玩家近期交易记录做轻微浮动,避免刷钱
- 风险定价:高风险区域的补给更贵、材料更便宜
经济更完整设计见:[05-数值与经济.md](./05-%E6%95%B0%E5%80%BC%E4%B8%8E%E7%BB%8F%E6%B5%8E.md)