关卡制作流程复盘

这一轮做 50 关的过程里,最有用的结论是一个否定结论:原计划的「agent 打分 → 拟合权重 → 重选关卡」这个闭环合不上,而且不是样本量的问题。下面是它为什么合不上,以及流程该改成什么样。

交付批次 R2 · 实测轮次 R1 / R2 / R3 · 生成于 2026-09-14 17:25

交付这一版实测到了什么

通关
100/100
无死局
空点 / 关
0.00
目标 0
盲转 / 关
0.12
目标 0
转错 / 关
0.12
目标 0
难度评分
84/100
都是 2 分 — 不区分

机械面干净,说明生成期的闸门是有效的:「动了很多次没结果」这类结构缺陷已经被挡在关卡集之外。难度评分那一格是这两轮真正的发现:机械上差着三倍的关卡,它一律给 2 分。更早的记录里这项的复测可信度是 0.93,那是个更小的样本——在这一批 99 对复测上实测是 0.46,所以它既不区分、也不像以为的那么稳。

两轮之间改了什么,效果如何

第一轮唯一可用的读数是「整批偏易」,加上抱怨里反复出现的「转了没反应」。据此只改了两件事:给连续空转设闸门(最多一次转动没反应,此前有 11 关能连着两次),以及把难度曲线写成旋转深度的配额而不是指望它从排序里自己长出来。第三轮又只改了一件:桶内改按反差取。每轮一个变量,才看得出是哪个变量起的作用。

同一个规则机器人,三套关卡集第一版第二版第三版
盲转 / 关0.240.120.14
最长连续盲转411
空点 / 关0.000.000.00
决策 / 关(要做的事)10.310.39.8

要做的事一样多,浪费掉的动作少了一半,而且第三版保住了这个成绩。这是同一个玩家的对照,所以变的是关卡不是模型的心情——一次 50 关的全量验收 1 秒跑完,这也是为什么全量验收该交给它而不是 agent。

grok 实测,按档(每关计一次,与它自己玩的那一版对齐)R1R2R3
难度无解感难度无解感难度无解感
前档 L1–L122.001.332.001.212.001.17
中档 L13–L322.101.352.051.152.051.20
后档 L33–L502.171.612.391.722.191.64
后档的关卡参数3.5 转反差 21.74.1 转反差 27.94.0 转反差 28.5

第一轮三档几乎是一条平线。第二轮把后档的旋转深度从 3.5 提到 4.1 转,后档评分随之升到 2.39——评分第一次表现出梯度,但只在按档平均之后。

第三轮是一个被自己的数据否掉的假设,已经回退。第二轮显示打 3 分的关比打 2 分的关反差高 59%,于是第三轮改成按反差选关——只动这一个变量,后档反差从 27.9 提到 28.5,旋转深度不变。

结果是后档更简单了:2.39 ± 0.10 对 2.19 ± 0.08,约两个标准误;平均分到 2.5 以上的关从 11 关掉到 8 关。评分复测只有 0.46,但那限制的是逐关排序,不妨碍组间均值——两轮各 100 与 100 局,这个差距站得住。

所以交付的是第二版。反差仍然是策划点名的好玩机制,也确实和「被评得更难」相关,但按它选关并不能造出更难的关——相关不等于可操纵。这条写进规则 4:每个新做法都要能在数据里看到它挡掉/换来了什么,看不到就撤回。

哪些信号复测得住

下面的 r 是在这一批关卡上现算的:同一个 agent 把每关玩了两次,99 对。不是引用更早、更小的样本。

信号复测 rn怎么用
盲转次数1.0099可用:驱动了真实修复
转错方向次数1.0099可用
实际旋转数1.0099可用
步数1.0099可用
决策数0.9399可用
无解感评分0.4799只按档看
难度评分0.4699只按档看,约 20 局起
好玩评分0.1099不可用
清晰度评分0.2899不可用

机械指标全部 r ≈ 1.00,但那多半是因为 agent 88% 的情况下重放了完全相同的动作序列——这本身才是有用的那条结论:重复跑同一关买不到新信息。评分则相反:同一条轨迹,12 对给出了不同的难度分。

五条规则,各自的证据

1难度评分只能按档看,不能逐关看

证据
100 局里有 84 局打的是 2 分,而这些关卡的决策数从 3 到 15。逐关复测 r = 0.46,而且 13 对分歧里有 12 对<b>走的是同一条轨迹</b>——同样的动作、同样的结果,模型给自己打了不同的分。但按档平均约 20 局后,曲线第一次显形了(见上表)。
为什么
文字盘面把每颗棋子的路线、挡路者、紧贴者列成清单,agent 不必用眼睛顺线走一遍——而那正是这游戏的难点。agent 自己写过:「挡路名单已经写全,不用顺着格子数」。剩下的评分噪声,只有靠聚合才压得下去。
现在怎么做
逐关排序改为机械假设(旋转深度、棋子数、互锁),由人工审核裁定;评分只用来读整档的高低。

2先用规则机器人扫,再花 agent 时间;同一关不要跑两遍

证据
第二轮意外把每关跑了两次,得到 99 对复测:其中 87 对(88%)重放了<b>完全相同</b>的动作序列,机械指标复测 r = 1.00。规则机器人跑完 50 关只要 1 秒。
为什么
agent 近乎确定性,重复同一关几乎不产生新信息。为「提高可信度」而重复跑,是把预算花在已经知道的答案上。
现在怎么做
全量验收交给规则机器人;agent 每关只跑一次,省下的预算用来多覆盖关卡。

3门槛写在生成期,不写在筛选期

证据
把开局门槛提到「可点≥3 枚、演出≥0.8s」后筛选写出了 0 关——池子的中位数是 2 枚 / 0.57s。
为什么
筛选只能从池子里挑,挑不出池子里没有的东西。分布不对时,要改的是构造。
现在怎么做
开局问题由构造里的展示位插入解决,不是靠筛。

4每加一个门槛,先证明它挡掉了东西

证据
两次结构性猜测被实测推翻:「插入端多朝向出口」过滤器对漏斗零效果;为解释难度评分而建的 legibility 指标与评分相关 -0.02。
为什么
一个不改变漏斗的门槛,只会让人以为问题已经解决了。
现在怎么做
两者都已撤回/降级为纯测量。漏斗每一级的剩余数量都打印出来。

5抱怨要对照基线,不要直接当缺陷

证据
agent 33 条抱怨里最集中的是「路线太长读不完」。但已上线的 v0.5 最长路线 74 格,比这批新关卡的 74 格还长。
为什么
那是这个游戏本来的性格。把它当缺陷修掉,改的是游戏而不是关卡。
现在怎么做
只在审核页标出,交给人裁定。

agent 能测什么,不能测什么

指标可用依据
盲转 / 多余转 / 转错方向可用本批复测 r = 1.00;驱动了真实修复(盲转 1.17 → 0.12)
是否通关、空点次数可用直接观察,无主观成分
自由文本抱怨可用33 条里两个主题高度重复,指标抓不到;但须对照基线(规则 5)
难度评分只按档看逐关复测 r = 0.46,且同一条轨迹会打出不同分;按档平均约 20 局才显出梯度
无解感评分只按档看复测 r = 0.47;按档看时与难度同向抬升,可当挫败感的代理
好玩 / 清晰度评分不可用复测 r = 0.10 / 0.28,是模型噪声

要做 1000 关的话

  1. 先把判据写成可执行的闸门,再开始生成。这一轮的闸门链是:长成 → 首转双向 → 锁住 ≤90% → 无不可解态 → 终局朝向 ≥2 → 每转释放 ≥2 → 反差 ≥12 → 开局可点 ≥3 → 开局演出 ≥0.9s → 长巡游 ≥3。每一级剩多少必须打印出来。
  2. 用规则机器人做全量验收(12 秒 / 全池),不用 agent。机械旋转指标已证明测的是关卡不是玩家。
  3. agent 只抽样跑,而且只看两样东西:机械缺陷指标,和自由文本抱怨。不要为难度标定花 agent 时间——那条路这一轮已经证明走不通。
  4. 难度曲线靠机械假设铺,靠人眼裁定。用 select-50.mjs 按特征打分并均匀铺开,家族上限防止一套模板占满(上一版 1000 关实际只有 30 套模板)。
  5. 每一轮只动一个变量,并且必须能在漏斗里看到它挡掉了什么,否则撤回。
  6. 人工审核要准备好材料:开局盘面从求解器取(不是示意图)、标明哪些数字可信、每关一个试玩直达链接。

被实测否掉的做法

试过什么结果
拟合 difficulty ~ 机械特征,用来重选关卡响应几乎无方差(84/100 同分),回归的是常数
legibility(一眼看穿的成本)解释难度评分相关 -0.02,无效;降级为纯测量
路线交叠度当难度轴中位已达 89%,没有上升空间
换开局朝向来提高判断成本127 个候选里只有 7 个变好
「插入端多朝向出口」过滤器对漏斗零效果,已删除
把锁住比例当难度主轴排序方向反了:它奖励「开局什么都做不了」