切后台后的对局恢复
玩家回来后能认出离开时的局面,并自己决定什么时候继续。对局时间采用模拟时间,系统时钟变化、切后台与暂停等待都不推进战斗。
状态转换
| 当前状态 | 输入 | 动作与新状态 |
|---|---|---|
| 引导中或进行中 | 收到切后台信号 | 停止推进时钟与接收棋盘输入,取消未提交的拖动,保存最近已提交局面 |
| 后台冻结 | 回到前台或冷启动读取有效快照 | 显示棋盘和「继续对局」,保持冻结 |
| 等待继续 | 点击继续 | 原子消耗本次恢复动作,回到原引导步骤或下一模拟 tick |
| 等待继续 | 再次切后台或重复进入 | 保持冻结,仍只有一个继续入口 |
| 已结算 | 切后台、返回或冷启动 | 恢复结算视图,读取已保存结果和奖励状态 |
| 任何恢复入口 | 无快照、读失败、版本不支持或数据不合法 | 给出「此对局无法继续」和重新开局入口,已提交的进度与奖励保留 |
保存合同
每次提交合法棋盘操作、引导动作、模拟 tick 和结算时,把对应的可恢复状态一并提交。切后台时尝试再保存一次。进程被回收时读取最后一次成功写入的数据,界面只展示已提交局面。
- 标识。快照结构版本、关卡配置版本、关卡 ID、runId、递增修订号和玩家标识。
- 局面。引导或对局阶段、已完成的 tick、棋盘、后备炮、基地 HP、存活敌人的路线、剩余 HP 和截止 tick。波次生成位置从已完成的 tick 与配置重建。
- 结算。快照存结果引用,实际进度和奖励从已提交的结算或账本读取。结算引用失效时返回最近有效的持久化结果。
- 写入。按 runId 保护更新顺序,旧修订拒绝覆盖新修订。保存失败时保留最后一次有效提交,提示可恢复点可能略早。新开局切换当前 runId,旧局异步写入不能覆盖新局。
- 版本。恢复绑定原配置版本。若应用无法读该版本,进入无法继续分支。持续记录失败原因,便于定位升级后的恢复问题。
进行中第 22 tick 代表已经处理过 22 秒那一轮攻击。继续后从第 23 tick 推进,未提交的拖动取消,距离下一个 tick 重新计一秒。前台回调本身只更新界面状态。
可直接交给 AI 的需求
将本页的规则和验收表与下面的指令一起发给 AI。
给合成防守增加暂停与恢复。以已提交 tick、棋盘和配置版本为快照核心,
绑定 runId 与递增修订号。切后台冻结,返回后等待玩家点击继续。
进程回收时使用最后一次有效快照。已结算状态只读取既有结果和账本。
请实现可注入的生命周期、时钟和持久化测试入口,并用验收表重放。
验收用例
| 编号 | 给定 | 当 | 则 |
|---|---|---|---|
| R01 | A2 二级,第 22 tick 后 A 路敌人剩 3 HP | 切后台 30 秒,再回来 | 仍显示 tick 22、敌人 3 HP。点击继续并推进一秒,tick 23 击破敌人,基地血量不变 |
| R02 | 最后一次持久化成功的是 tick 48 | 切后台被回收后冷启动 | 恢复 tick 48 棋盘、B 路敌人已移除,等待继续 |
| R03 | 玩家拖动 A2 但尚未落下 | 切后台再回来 | 预览消失,A2 仍在原格 |
| R04 | 同一局同时收到两次前台事件 | 对继续按钮双击 | 只恢复一次,时钟只启动一份 |
| R05 | 旧配置已经不可读,历史奖励已入账 | 尝试恢复 | 展示重新开局入口,历史奖励余额不变 |
| R06 | 先提交修订 7,修订 6 较晚返回 | 冷启动 | 读取修订 7,不退回旧局面 |