feat: version campaigns and document original puzzle design
Restore v0.1 and v0.2 archives with separate progress, publish the curved v0.3 campaign, and document the original 24-level design with reproducible evidence. Refine board presentation and movement, and keep video lab tooling within its own directory.
This commit is contained in:
@@ -66,10 +66,34 @@ minimumActions = N + R // 最少交互数:消除 + 旋转
|
||||
|
||||
基础生成器在碰撞规则下逆向放入可离场棋子,主线编排在候选基础上进行独立筛选与回放。主线制作规模为 48 关、8 章,每章 6 拍:进入、换路、展开、小挑战、释放、长局回报。顺序不按认知难度非递减排序,也不再要求每一关都必须旋转。
|
||||
|
||||
9 月 9 日版的全部布局由 `levels/campaign-seeds.json` 中的种子及 `options` 明确指定;`scripts/generate-levels.mjs` 据此生成关卡、共享模块和验收数据。修改种子或参数后运行 `npm run levels`,不要直接编辑派生的关卡文件。参考成功路径统计保存在 `levels/campaign-analysis.json` 的逐关 `pathUsage` 中。
|
||||
|
||||
`minBaseTurns` / `maxBaseTurns` 限制逆向放置时的基准朝向,`startRotation` 在此之后施加。发布门槛另按最终朝向的真实参考解答统计,不能把基准朝向的参数当成旋转后的路径保证。
|
||||
|
||||
大棋盘用于增加熟悉规则下的工作量:早期就可使用 37 格,后期舒缓关采用 61 格,19 格也可承载较难的局部关系。小挑战后必须有认知负担回落,长局回报不能仅靠更复杂的路线或反复空转延长时间。
|
||||
|
||||
当前清单单关最多 25 枚棋子,长局的工作量来自更多实际弯轨消除,不以直出棋子数量或空白格上的弯线充数。每关参考解答至少 65% 的成功离场棋子经过弯道,且至少 3 枚;直线只作少量调剂,主线不安排纯直出关。
|
||||
|
||||
第 1 关为 37 格、8 枚棋子,开局全部可离场,参考解答每枚恰好经过 1 处弯道,无需旋转或强制先后顺序;这不意味着转到任意朝向后仍全部可出。前 7 关通过 `lesson` 字段依次明确:箭头起步与弯轨转向、旋转换路而棋子箭头不动、交叉不换轨、阻挡先后、一两弯的舒缓消除、大盘连续解路径、完整路线观察。对应制作说明见 [前期学习与章节节奏](gameplay-direction.md)。
|
||||
|
||||
发布要求包括:每枚棋子在 6 个朝向下忽略占用的独立路线均无闭环;参考解答全程排除路线格外擦碰阻挡;换路和小挑战关在参考解答中最多连续旋转 1 次就打开下一次消除进展。它们是候选发布门槛,不能用来代替实际生成结果或玩家验收。完整制作方向见 [玩法方向](gameplay-direction.md),生成后逐关核对 [主线审阅报告](campaign-review.md)。
|
||||
|
||||
## 实际参考路径使用量
|
||||
|
||||
`solutionPathUsage(level, actions)` 按参考动作回放旋转和成功移除,在每次移除时调用同一 `trace()` 读取实际离场路径。它忽略没有成功离场的尝试,不统计棋盘上未使用的装饰曲线;正式通过验收的完整解答还必须满足 `pathUsage.removals === N`。
|
||||
|
||||
| `pathUsage` 字段 | 含义 |
|
||||
| --- | --- |
|
||||
| `removals` | 参考解答中的成功移除数量 |
|
||||
| `curvedRemovals` / `straightRemovals` | 经过至少 1 处弯道 / 没有经过弯道的成功棋子数 |
|
||||
| `curvedRatio` | `curvedRemovals / removals`;主线要求至少 0.65 |
|
||||
| `singleBendRemovals` / `multiBendRemovals` | 实际经过恰好 1 处 / 多于 1 处弯道的成功棋子数 |
|
||||
| `totalBends` / `maxBends` | 全部实际成功路径的总转弯数 / 单枚最大转弯数 |
|
||||
| `maxConsecutiveStraight` | 参考解答中连续直出棋子的最长段落 |
|
||||
| `paths` | 逐棋子的 `id`、`bends` 和路线步骤数 `cells` |
|
||||
|
||||
弯轨门槛同时检查 `curvedRatio >= 0.65` 与 `curvedRemovals >= 3`。它约束参考解答中真正发生的消除,不证明所有其他操作顺序具有相同比例。初始独立路线的平均转弯数也不能替代这个指标,尤其是必须先旋转才有出口的关卡。
|
||||
|
||||
## 认知难度(0–100)
|
||||
|
||||
`analyze()` 的分数只估计路线阅读与依赖判断,不直接给棋盘面积、棋子数或试错预算加分。设:
|
||||
@@ -105,4 +129,6 @@ estimatedSeconds = round(3 × N + 0.75 × 总转弯数 + 4 × R)
|
||||
|
||||
总转弯数是初始朝向下、忽略占用的各棋子独立路线转弯数之和。该公式仅为内部制作假设,没有真人用时数据支撑,不能称为平均通关时长或向玩家承诺的完成时间。搜索未确定或关卡不可解时,不应将其作为可发布关卡的估时。
|
||||
|
||||
此处总转弯数与 `pathUsage.totalBends` 口径不同:前者是初始独立路线,后者是逐步旋转后真正成功走过的参考路径。两者应分别保留,不将弯轨覆盖率、增加的路线内容或最多 25 枚棋子的规模直接换算成已验证的真人时长。
|
||||
|
||||
后续测试应观察主动停顿、成功消除间隔、旋转到下一次成功的间隔、失败试路原因、最后一枚棋子阶段,以及提示、撤销和重开的发生位置;明确区分观察停顿、动画占用和离开游戏的时间,再校准认知评分与工作量估计。
|
||||
|
||||
Reference in New Issue
Block a user