工作坊三:两种状态,把重复、逆序与重试做完整
先不造复杂任务系统。用一条小状态链,证明这张地图不会因换个顺序就坏掉。
实线:连接或边界虚线:路线、信息或对应关系(以图中标注为准)绿色:当前重点暖色:限制/风险
默认静止;点击播放后每 7 秒切换阶段,路线运动不代表实际速度。静态原图可直接保存和打印。
01先分清事实与表现
在值守区练习中,事实只有“已看见物品编号”和“已完成核验”。登记台上的文字、出口清单、灯的颜色只是事实的表现。不要分别保存“门开了”“灯变了”“文本换了”三个互不相干的答案,再指望它们永远同时变化。
纸面可以用两张事实卡;进入引擎后再按已有状态课实现。这里没有要求新增数据库、任务编辑器或多周目架构。只要能把同一事实可靠地应用到对象即可。
02两种可见阶段,保留必要事实
可见阶段定为 S0 待核验、S1 已核验。S0 内仍需知道玩家有没有取得编号;这是登记动作能否成立的必要条件,而不是再造一个房间版本。用单个布尔值描述可见阶段,不意味着全游戏所有数据只有一个布尔值。
| 输入事实 | 登记台反馈 | 出口反馈 |
|---|---|---|
| 未见编号;未核验 | 告诉玩家去储放标记核对 | 显示还缺一项核验 |
| 已见编号;未核验 | 允许执行登记,完成后有即时反馈 | 仍未完成 |
| 已核验 | 显示已登记;不重复提交,不撤销成果 | 显示交接完成,可结束 |
本练习不消耗物品。“已核验但没有编号”的不一致存档,应按明确规则修正或报告,不能让玩家猜是哪张地图错了。
03触发、反馈、保留、恢复四件事一起写
触发是调查登记台且拥有编号证据;本地反馈是登记台明确说已核验;远处反馈是出口的缺项标记改变。玩家走出值守室时保留事实,回到屋里重新应用同一状态。不要靠一次性动画是否播放过来判断任务有没有完成。
如果登记需要一段短演出,先禁止重复提交,在演出结束或可恢复的位置记录完成。具体提交时点取决于实现,必须能够解释关闭对话、切场和重试途中发生了什么;不能只测试作者慢慢点按的顺序。
04五种顺序,覆盖不同失败原因
| 路径 | 要证明什么 |
|---|---|
| 先拿编号→再登记→去出口 | 常规路径闭环 |
| 先看出口→反复查登记→再拿编号 | 无效尝试给方向,不消耗不可恢复物品 |
| 拿编号→离场→回来→登记 | 证据事实跨场保留 |
| 登记成功→再次登记→再次看出口 | 重复动作幂等,不重置完成状态 |
| 登记前重试 / 登记后重试 | 恢复边界清楚,反馈与事实一致 |
这些是本练习的测试集合,不是所有状态空间的形式化穷尽证明。以后加入箱子、单向门或追逐,再补它们引入的新状态。
05把重试规则写成一句可预测的话
本轮可选择“重开本练习清空两项事实,普通离场返回保留事实”。这比一半对象复位、一半记忆保留更容易解释。若实现了中途恢复点,则要写清恢复时的房间、落点、证据、登记与交互锁,不只保存最后一句文本。
尝试在出口附近重试,确认不会直接出生在结束触发区里无限结束;尝试在登记对话中退出,确认再次开始能恢复控制。失败演示可以保留,但恢复到必死或不可解状态不是有意义的难度。
06加入一处异常,但别同时改变导航
基础状态稳定后,练习可暂用一张便条朝向改变作为异常。先让玩家见过原方向;便条状态由“已完成核验”派生:核验后改变,普通离场保留,重开恢复,不再增加第三项事实。改变时不挪墙、不改出口、不删除证据。异常用于测试熟悉空间中的差异能否被发现,不增加主线门槛。
保留一份没有异常的对照版。若玩家完成失败,先看是否基础目标就不清楚,而不是把所有迷路都解释成恐怖成功。是否将这种异常移入正式作品,仍是独立创作决定。
07用断言语言描述验收,不冒称已经通过
给定:编号已获得,尚未核验
当:离场后回到值守室并调查登记台
应当:仍允许核验,不要求再次取得同一证据
给定:核验已完成
当:重复调查登记台,然后返回出口
应当:完成事实不回退,出口仍显示完成这些句子可手动执行,也可以以后转为自动测试。写出它们不等于运行过。把实际操作、结果、证据文件和未覆盖边界接在每句后面,才形成有效验收记录。
08到这里应该交出什么
交出两阶段表现表、两项事实的依赖、五种顺序结果以及清楚的重试规则。地图工作页的“状态变化”“门与落点”“状态恢复表”可以保存这些内容;它不是引擎存档,导入工作页不会修改任何游戏文件。
若想马上加入追逐,先问它要验证的新增体验。没有必要的目标时,完成这条小链并进入冷测,比扩大成十几个状态更接近可靠的切片准备。
动手后,再勾选
不是“我看懂了”,而是你在独立练习里做出并检查过。
换一个情景,你会怎么判断?
登记成功后玩家再次调查登记台,最重要的规则是什么?
用自己的话,留一条笔记
可以写“我之前以为……,现在发现……”,或者记录还没解决的问题。
↗回到资料核对
本课是解释与练习,不替代对应版本的官方手册。网页实验不运行 Godot;未标明实机验证的代码,仍需在独立工程中检查。
标记已读不会自动勾选实作,也不代表游戏功能已经完成。