设想一间书房:书桌上有一盏台灯,灯罩内侧用铅笔写着一行很小的“三月,看灯”;墙上挂着一本撕到七月的日历,被撕掉的纸页塞在抽屉最里面的信封里;保险箱是四位数字锁。玩家小陈在这间房里站了四分钟,没有新的操作。系统能看到的只有一个事实:四分钟没有输入。

如果小陈根本没打开过抽屉,他缺的是信息,最好的帮助是把他的注意力轻轻推向书桌一带。如果他已经翻出了那沓纸页,并且把日历和纸页摆在一起端详了半天,缺的是关联,此时再提醒“去看看抽屉”不但没用,还会让他觉得系统没在关注自己。同样的沉默,对应完全相反的处理。这是玩家状态估计最基本的出发点,也是 提示阶梯 能不能被用对的前提。

两种卡关,两种缺口

把“卡住”拆开来看,至少有两类缺口。第一类是信息缺失:关键线索没有进入玩家的认知,要么没找到,要么找到了没读懂它的存在意义(比如看见了台灯,却没有掀开灯罩)。第二类是推理受阻:线索已经在手,缺的是把它们组合成一步推断的那一下。

区分它们的价值在于提示的“方向”不同。信息缺失对应“引导观察”,只需要缩小搜索范围;推理受阻对应“引导关联”,需要点出两个已知对象之间存在关系。PA真人游戏世界智能研究组把这条分界线放在状态估计的第一步,而不是让提示模块自己去猜。

玩家背影面前分出两条岔路,左路通向被布幔遮住的线索,右路通向一团缠绕的乱线,上方的天平代表对玩家状态的判断。
这张图想说明:AI要区分玩家是真的不会解,还是只是没发现线索,再决定是否给出提示。

系统真正能看到什么:两个集合

状态估计并不需要读懂玩家的心。它只需要两份账:已发现线索集合和已尝试动作集合。前者记录每条关键线索是否被“有效接触”,后者记录玩家尝试过哪些组合与操作。

discovered = {
  "lamp_shade_note": {touched: true,  read_seconds: 6},
  "calendar":        {touched: true,  read_seconds: 14},
  "torn_pages":      {touched: false}
}
attempted = [
  {target: "safe", input: "0307", result: "fail", t: 118},
  {target: "safe", input: "0703", result: "fail", t: 131},
  {target: "safe", input: "0307", result: "fail", t: 240}
]

“有效接触”不等于点击过,更不等于视线扫过。示例中给灯罩笔记设的读取门槛是停留6秒以上(示例参数),低于门槛的接触只算“路过”。

两份账能直接读出几条判断。关键线索集合里有条目从未接触,说明信息缺失的概率高;同一组数字两分钟内输入两次,而且没有新线索进入集合,说明玩家在原地打转,是典型的推理受阻。

信号的权重,以及为什么要谨慎

单个信号很不可靠。停顿时间长,可能是在思考,也可能是在看手机;反复点击同一个物件,可能是不会,也可能是在确认。下面是一张示例的信号对照表,用来说明各类信号倾向于指向哪一种状态,数值均为示例参数。

观察到的信号 倾向的状态 示例权重 主要干扰因素
关键区域从未检查 信息缺失 玩家已在心里排除该区域
同一答案重复输入推理受阻 只是手误后的重试
队友间的对话内容 视对话而定 语音识别错误、闲聊
长时间无操作 不确定 思考、离开、被打断

最值得留意的是最后一行:单靠“停顿”得不出任何结论,它只是触发器,提醒系统去核对那两个集合。

采集操作更新线索集合判断卡关类型计算置信度选择提示层级
本文讨论的状态估计流程:先看玩家碰过什么,再决定他缺的是信息还是关联。

置信度、滞后与误判成本

判断必须带着置信度输出,而不是给一个非黑即白的标签。比如“信息缺失 0.7,推理受阻 0.2,其他 0.1”。当最高项低于某个门槛(示例参数:0.6)时,系统不应该开口,而应该继续观察或只做无损的环境暗示,例如让灯光稍微聚向书桌。

另一个容易被忽略的点是滞后。玩家的状态在变,而数据总是慢一拍。他刚刚拉开抽屉,集合还没更新,这时如果提示恰好触发,就变成“你怎么还没看抽屉”。所以提示触发前要做一次快速复核。

误判的成本并不对称。把推理受阻误判成信息缺失,会得到一句“再找找看”,玩家会感到被小看,甚至因此失去信任;把信息缺失误判成推理受阻,则会得到一句关于关系的提点,而玩家连关系的两端都没见过,只会更困惑。前者更伤体验,所以拿不准时宁可晚一点、含蓄一点。这一点也和 恐怖游戏里“知道什么时候不出手” 是同一类判断:沉默本身就是一种设计。

多人场景:信息在人与人之间流动

多人密室里,线索集合不再属于某一个人。一名玩家读过灯罩笔记,不代表他的队友也知道。系统需要区分“队伍已发现”与“每个人各自发现”,并观察信息有没有被说出口。如果发现者三分钟内没有对外分享,而其他人正在反复尝试错误答案,问题很可能不在推理,而在信息没有共享。此时该做的是让发现者有开口的理由,而不是给答案。这份队伍级的状态,也正是 多人难度调节 的输入。

估计出来以后,提示策略怎样分叉

状态一旦有了倾向,提示就有了分岔。对信息缺失,第一层只谈“方向”:这间房里有没有一个你只看了一半的地方。对推理受阻,第一层谈“关系”:你手里已经有两样东西,它们的时间对得上吗。两者都不直接说出答案,也都需要参照谜题依赖图,避免在上游未解时去提示下游。

示例:同一段沉默的两种脚本

若 torn_pages 未接触:“这间书房里,有些东西被人藏得很仔细。”;若三样线索均已接触且答案重复:“灯罩上写的是一个月份,日历撕到的也是一个月份,它们各自指向哪个数字?”(示例)

坦白说,这套估计只是概率意义上的近似:有人靠直觉跳过整条推理链,有人故意不按顺序玩。谜题本身的结构可以参考 谜题生成与可解性验证 中对谜题结构的拆解,或回到 PA真人AI密室游戏 栏目查看更多设计文章。