第 14 章是本章批次里设计最「工程化」的一章。它把解谜游戏抽象成有限状态机:每个谜题是一个独立 FSM,多个 FSM 之间通过事件与 Guard 条件互相约束,组成一张场景级超图——电源接通解锁配电面板,面板驱动激光镜阵,镜阵再打开双开关门。玩家要做的,是在有限时间内并行推进这张图。难点不在谜题本身,而在于多人同时按同一个开关、抢占同一个旋钮时,谁的动作算数、谁要回滚、两人必须在 500 毫秒内同步按下的判定窗口如何公平。
本章定位
- 难度梯度:高阶。单个机制都不新鲜,但可组合性与并发仲裁的组合让它成为前十五章里设计密度最高的一章。
- 前置章节:本章依赖面很宽——第 2 章 石头剪刀布(回合与提交时序基元)、第 7 章 贪吃蛇大作战(房间与网关骨架)、第 9 章 协作扫雷(协作与同步基线)、第 10 章 城格建造 mini-SLG(一致性结算思路)。
- 能力跃迁:从「单一规则」跃迁到「规则的可组合」。系统不再实现具体谜题,而是提供一套能拼出任意谜题链的状态机框架。
- 阅读时长:单篇 PRD 约 600 行,建议重点读 Puzzle FSM 的 Node 与 Guard 与 Effect 三要素、场景级依赖图、并发仲裁与回滚三节。
核心验证目标
- Puzzle FSM 可组合性:单个谜题以 Node、Edge、Guard、Effect 四要素建模,多个 FSM 通过跨 FSM 事件组成场景超图。
- 跨客户端同步一致性:动作常需多人同步,如双开关需两人在 500 毫秒窗口内同时按下,判定必须唯一且公平。
- 并发冲突仲裁与回滚:重复按、抢占旋钮、互斥操作需要仲裁、锁、乐观校验与回滚,且事件流可重放。
- 时序与延迟补偿:软同步(客户端预测加伪装延迟)配合硬落点(服务端权威判定),兼顾手感与公平。
- 房间生命周期:Idle 到 Matching 到 Preparing 到 Active 到 Success 或 Fail 到 Review 到 Closed 的七态机,以及断线重连的 seat 保持。
- 重进与旁观:中途加入、退出后重进、旁观者视角的状态重建,均需从 Snapshot 与事件流中恢复。
- Event Log 与复盘:现场事件日志支撑完整复盘,超时与失败分支也要留下可追溯的记录。
技术栈建议
- 语言:服务端以 Go 或 Java 为主,客户端以 TypeScript 或 Unity 任一即可。
- 协议栈:HTTP 承担配对、开房与复盘拉取;WebSocket 承担帧内事件与状态推送;Cron 或 DelayQueue 承担超时与回退。
- 存储:初始世界快照(Snapshot_0)加事件流构成完整的可重建状态,两者必须一同持久化。
- 关键设计:逻辑帧固定在 20 或 30 fps,E_TICK 驱动计时器与 FSM 事件轮询。场景级依赖图的拓扑结构建议配置化,这样新增谜题只需改数据不改代码。
本章文章
| 文章标题 | 核心内容 |
|---|---|
| 在线联机原型全集:第 14 章 房间逃脱(Room Escape — Synchronous Puzzle) | 完整 PRD:Puzzle FSM 设计、场景级依赖图、房间七态生命周期与关键事件、并发仲裁与回滚、软同步与硬落点、Event Log 与复盘实现 |
本章只有一篇 PRD;状态机的通用建模方法在游戏设计专题与「others」专题的状态机设计一文中有更抽象的讨论。
与相邻章节的关系
- 上一章:第 13 章 小队生存系统 处理离线世界演化,本章回到在线同步协作,并把它做成可组合的框架。
- 下一章:第 15 章 微型赛车系统 从状态机驱动的离散事件转向物理驱动的连续模拟,引入客户端预测与服务端回滚。