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:
cabinw
2026-09-09 13:17:30 +08:00
parent 70b021d4cc
commit e92cccba82
52 changed files with 76449 additions and 15076 deletions
+37 -3
View File
@@ -1,8 +1,10 @@
# HEX TRAILS 玩法方向与主线制作要求
版本:2026-09-08。本文用于关卡制作、生成器筛选与玩法验收,不规定美术样式。
版本:2026-09-09。本文用于关卡制作、生成器筛选与玩法验收,不规定美术样式。
当前方向是让喜欢轻松观察、逐步整理并获得连续反馈的玩家,在越来越丰富的棋盘上保持推进感。玩家偏好以观察行为、试路习惯和体验反馈描述,不按性别推断。48 关已通过生成器结构检查、完整解答回放与替代操作顺序测试;逐关记录见 [主线验收表](campaign-review.md)。这属于规则与结构验收,玩家体验和真实完成时长仍待真人测试。
适用范围:本文记录后续 48 关、尤其 v0.3 的制作方向。最初 24 关的设计理念另见 [v0.1 设计理念](v0.1-design-philosophy.md);本文的弯轨比例、无闭环及六拍门槛不代表原版要求。下一轮优化将对照原版结构讨论,本轮未改关卡。
当前方向是让喜欢轻松观察、逐步整理并获得连续反馈的玩家,在越来越丰富的棋盘上保持推进感。玩家偏好以观察行为、试路习惯和体验反馈描述,不按性别推断。9 月 9 日版通过[种子清单](../levels/campaign-seeds.json)重新编排全部 48 关,将真正经过弯道的成功离场路径作为制作核心;逐关结构记录见 [主线验收表](campaign-review.md)及[完整分析数据](../levels/campaign-analysis.json)。验收结论以当前清单重新生成的报告与测试输出为准,不能沿用旧关卡结果;玩家体验和真实完成时长仍待真人测试。
## 1. 核心循环
@@ -12,6 +14,8 @@
试路是学习规则的一部分。一次没有成功的尝试应帮助玩家理解阻挡原因,不能同时带来隐性的通关成本。主线不靠最后一枚棋子的隐藏闭环、路线之外的擦碰或连续无进展旋转制造困难。
玩家需要顺着实际将要走过的轨道观察出口。每一关都以弯轨消除为主,直线路径只作为少量节奏调剂,不安排纯直出关。空格上画了多少弯线不代表玩家真的需要读这些路线;没有被成功离场棋子使用的装饰性曲线不计入这一目标。
## 2. 免费尝试与计数语义
- 左转、右转免费,不扣步,也不因多转几次而失败。
@@ -39,6 +43,8 @@
增加底格数而没有增加有效内容,不算延长体验;增加棋子却把所有出口堵成唯一解,也不算舒缓长局。制作时应检查是否形成足够多的连续成功机会,以及玩家能否在若干局部区域之间自然选择。
当前种子清单的单关棋子数最多为 25。后期长局增加的是实际需要沿弯轨观察、解开的内容,不能只沿用更多直出棋子的数量目标。比较工作量时同时查看有效消除数量、真实离场路径的转弯与连续成功机会。
## 4. 48 关:8 章,每章 6 拍
主线按章节节奏编排,不按认知难度分数从低到高排序。每章允许自然回落;后期主要增加熟悉规则下的工作量,认知挑战上限不必随章节不断升高。
@@ -52,7 +58,21 @@
| 5 | 释放 | 明显低于上一关的认知负担,让出口、连续成功和自由选择重新变多。 |
| 6 | 长局回报 | 使用熟悉关系提供更长的整理过程;可以更大、更长,但不自动更难。 |
第 1 关要有直接可见的进展,完整解答不依赖旋转。它不承担识别闭环的教学任务。后续换路关再通过短而明确的因果关系介绍旋转。
第 1 关使用 37 格、8 枚棋子。开局朝向下全部棋子可直接离场,每枚成功路径恰好经过 1 处弯道,完整解答不依赖旋转或强制先后顺序。它教的是“箭头决定起步,弯轨决定后续转向”,不承担识别闭环的任务。“全部可离场”只描述开局朝向,不要求玩家转到任意朝向后也全部可出。
前 7 关的学习内容写入各关的 `lesson` 字段,并与实际参考路径一起验收:
| 关卡 | 学习重点 |
| --- | --- |
| 1 | 箭头决定起步方向,沿弯轨自动转向。 |
| 2 | 旋转底盘改变路线,棋子位置与箭头方向不动。 |
| 3 | 交叉处不换轨,沿同一条线找到出口。 |
| 4 | 看清阻挡关系,再决定先后消除或免费转盘。 |
| 5 | 跟过一两处弯道,获得舒缓的连续消除。 |
| 6 | 在更大棋盘上仍逐条解开实际弯轨路径。 |
| 7 | 先观察完整路线,再选择出口或免费转盘。 |
这些学习重点补充章节六拍,不改变小挑战后释放、再以长局回报收束的节奏。
第 5 关的释放应落实为结构差异,例如更多初始出口、更浅的依赖、更少的必要判断,不能只换一个轻松的名字。第 6 关应延长熟悉操作的愉快过程,不用反复试方向、难以解释的阻挡或长时间等待补足时长。
@@ -72,6 +92,12 @@
对每一枚初始棋子,分别在全部 6 个棋盘朝向下忽略其他棋子追踪独立路线。每条路线都必须离场,独立闭环数必须为 0。该要求覆盖主线所有章节,避免移除障碍后才发现最后一枚棋子一直绕圈。
### 真正使用弯轨
对参考解答逐步回放,只统计成功离场时实际走过的路线。每关至少 65% 的成功离场棋子经过 1 处或更多弯道,且这类棋子至少有 3 枚;完整回放的成功移除数应等于初始棋子数。
统计使用 `analyze().pathUsage`,不使用整张棋盘的弯线数量,也不以初始朝向忽略占用的路线统计替代真实回放。旋转会改变轨道,成功路径必须按每次实际消除时的棋盘朝向计算。单纯增加空白格上的曲线,或让绝大多数棋子从边缘直线离场,不能满足发布要求。
### 阻挡可以从路线解释
在已验证解答回放的每个决策状态,对所有剩余棋子的路线进行检查。阻挡对象必须位于该棋子的独立路线所经过的格子中,不能出现路线格子之外的侧面擦碰阻挡。
@@ -88,6 +114,12 @@
每关记录章节、节奏角色、底格数、棋子数、认知指标与工作量。完成 48 关的组内检查:小挑战之后确有释放,长局回报的工作量增长没有被等量的认知负担增长抵消。这里要求的是候选结构和回放验证,玩家的实际感受仍需后续测试。
### 来源与可重复验证
`levels/campaign-seeds.json` 保存全部 48 关的种子与生成参数,是主线布局的制作来源;不能只编辑生成后的 `campaign.json`。修改清单后运行 `npm run levels`,同步关卡、共享模块与报告,再运行测试。
`levels/campaign-analysis.json` 中每关的 `pathUsage` 记录真实参考成功路径,包括直出/弯轨棋子数、弯轨比例、单弯/多弯数量、总转弯、最长连续直出段,以及逐棋子的路径明细。前 7 关还应核对 `lesson` 是否被实际动作支持。报告记录的是参考解答,不是穷尽玩家所有任意旋转和点击顺序。
## 6. 内部时长假设
当前仅用下式比较候选的潜在体验长度:
@@ -98,6 +130,8 @@
`N` 是初始棋子数;总转弯数采用当前分析器对初始朝向、忽略占用时各棋子独立路线的转弯数求和;最少旋转数来自规则求解器。各系数都是内部制作假设,尚未经过真人用时标定。
上述总转弯口径与 `pathUsage.totalBends` 的实际参考成功路径口径不同,不得混用。后者用于验证弯轨体验与阅读负担,前者仍是现行估时公式的输入;即使弯轨比例达到发布要求,也不能据此宣称真人体验时长已增加。
该结果不是玩家平均通关时长、完成承诺或难度分数。它没有完整模拟玩家的扫描速度、主动停顿、错误尝试、动画等待、提示使用与设备差异。大棋盘的估计数值更高,只能说明当前结构模型认为工作量更大,不能据此宣称玩家一定会玩得更久或更开心。
候选尚未确认可解、出现独立闭环或搜索未确定时,不应将估时作为可发布关卡的数据。公式调整时保留版本,避免把不同计算口径下的数字当作体验提升证据。