Files
HexTrails/docs/gameplay-direction.md
cabinw e92cccba82 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.
2026-09-09 13:17:30 +08:00

155 lines
13 KiB
Markdown

# HEX TRAILS 玩法方向与主线制作要求
版本:2026-09-09。本文用于关卡制作、生成器筛选与玩法验收,不规定美术样式。
适用范围:本文记录后续 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. 核心循环
**观察 → 改变 → 得到可解释的反馈 → 再观察。**
玩家先辨认一个可能的出口,再点击棋子或旋转棋盘改变路线。成功时,棋子离场,剩余工作量减少;被挡时,移动棋子到达可理解的接触位置,与阻挡棋子产生明确反馈并返回。旋转后应能观察到路线或可行选择的变化。
试路是学习规则的一部分。一次没有成功的尝试应帮助玩家理解阻挡原因,不能同时带来隐性的通关成本。主线不靠最后一枚棋子的隐藏闭环、路线之外的擦碰或连续无进展旋转制造困难。
玩家需要顺着实际将要走过的轨道观察出口。每一关都以弯轨消除为主,直线路径只作为少量节奏调剂,不安排纯直出关。空格上画了多少弯线不代表玩家真的需要读这些路线;没有被成功离场棋子使用的装饰性曲线不计入这一目标。
## 2. 免费尝试与计数语义
- 左转、右转免费,不扣步,也不因多转几次而失败。
- 失败试路免费,不扣步,不移动棋子的模型位置;可另行记录尝试次数用于内部分析。
- 每次成功移除一枚棋子计 1 次有效消除。
- 主线初始预算设为棋子数 `N`。此预算只表示还需要完成多少次有效消除,不是限制尝试的资源。
- 主线中,成功移除 `k` 枚后,剩余量应为 `N-k`;旋转、阻挡尝试与其他未成功的探路行为不改变它。
- 当前朝向没有可离场棋子,不应直接判负。旋转仍是可用的探索方式。
- 撤销应恢复真实的棋盘状态与对应计数,重开恢复原始关卡。
界面和关卡文案应传达剩余工作量,避免让玩家以为每次观察性尝试都会消耗通关机会。自定义关卡的数据兼容规则单独处理,不能反向成为主线的旋转限制。
## 3. 规模、认知难度与体验长度分开制作
| 维度 | 回答的问题 | 主要依据 |
| --- | --- | --- |
| 棋盘规模 | 可操作的空间有多大? | 底格数、棋子数、占用率与区域分布 |
| 认知难度 | 找到下一步需要想多少? | 路线转弯、最长路线、可行选择比例、依赖关系与必要旋转判断 |
| 工作量 | 需要完成多少次有效动作? | 待移除棋子数、解答动作数、需要经过的路线量 |
| 体验长度估计 | 哪些候选可能更长? | 内部结构估计,后续由实测校准 |
认知难度不加入棋盘面积或棋子数量的直接加分项,也不加入免费尝试的步数压力。同样的规则可以放在更大棋盘上延长体验,不需要同步增加路线复杂度、堵塞比例和依赖深度。
早期就可使用 37 格棋盘,让玩家较早体验完整的整理过程。后期舒缓关可使用 61 格棋盘,提供更多熟悉而顺畅的消除。19 格小棋盘也可以承担较难的局部判断;它的挑战来自关系清楚但需要思考,不来自体积。
增加底格数而没有增加有效内容,不算延长体验;增加棋子却把所有出口堵成唯一解,也不算舒缓长局。制作时应检查是否形成足够多的连续成功机会,以及玩家能否在若干局部区域之间自然选择。
当前种子清单的单关棋子数最多为 25。后期长局增加的是实际需要沿弯轨观察、解开的内容,不能只沿用更多直出棋子的数量目标。比较工作量时同时查看有效消除数量、真实离场路径的转弯与连续成功机会。
## 4. 48 关:8 章,每章 6 拍
主线按章节节奏编排,不按认知难度分数从低到高排序。每章允许自然回落;后期主要增加熟悉规则下的工作量,认知挑战上限不必随章节不断升高。
| 章内位置 | 节奏角色 | 制作意图 |
| --- | --- | --- |
| 1 | 进入 | 明显可行的开局,帮助玩家恢复观察节奏;可以有较大的盘面。 |
| 2 | 换路 | 用一次清楚的旋转或路线变化引出新进展,不堆叠多个新要求。 |
| 3 | 展开 | 扩展已经理解的关系,增加可连续处理的棋子和局部区域。 |
| 4 | 小挑战 | 章内认知峰值,可采用较小棋盘集中表达先后关系或一次必要旋转。 |
| 5 | 释放 | 明显低于上一关的认知负担,让出口、连续成功和自由选择重新变多。 |
| 6 | 长局回报 | 使用熟悉关系提供更长的整理过程;可以更大、更长,但不自动更难。 |
第 1 关使用 37 格、8 枚棋子。开局朝向下全部棋子可直接离场,每枚成功路径恰好经过 1 处弯道,完整解答不依赖旋转或强制先后顺序。它教的是“箭头决定起步,弯轨决定后续转向”,不承担识别闭环的任务。“全部可离场”只描述开局朝向,不要求玩家转到任意朝向后也全部可出。
前 7 关的学习内容写入各关的 `lesson` 字段,并与实际参考路径一起验收:
| 关卡 | 学习重点 |
| --- | --- |
| 1 | 箭头决定起步方向,沿弯轨自动转向。 |
| 2 | 旋转底盘改变路线,棋子位置与箭头方向不动。 |
| 3 | 交叉处不换轨,沿同一条线找到出口。 |
| 4 | 看清阻挡关系,再决定先后消除或免费转盘。 |
| 5 | 跟过一两处弯道,获得舒缓的连续消除。 |
| 6 | 在更大棋盘上仍逐条解开实际弯轨路径。 |
| 7 | 先观察完整路线,再选择出口或免费转盘。 |
这些学习重点补充章节六拍,不改变小挑战后释放、再以长局回报收束的节奏。
第 5 关的释放应落实为结构差异,例如更多初始出口、更浅的依赖、更少的必要判断,不能只换一个轻松的名字。第 6 关应延长熟悉操作的愉快过程,不用反复试方向、难以解释的阻挡或长时间等待补足时长。
每章不要求所有关卡都必须旋转。进入、展开、释放和长局回报允许最少旋转数为 0。判断一个关卡是否适合当前节奏,应同时查看认知指标与工作量,而不是让较大棋盘天然获得更高难度标签。
## 5. 发布硬门槛
以下条件在生成候选后执行,并保存可重复验证的结果;任一必要检查未完成时,候选不能记为已验收。
### 规则与可解性
1. 关卡通过数据校验,旋转时棋子与底格关系保持有效,六次旋转恢复原始轨道状态。
2. 旋转和失败试路不扣主线预算;成功移除扣 1;完整回放后全部棋子离场。
3. 求解结果必须确认可达终局。触及搜索上限只能记为“未确定”,不能用作可解性通过证据。
### 不出现隐藏闭环
对每一枚初始棋子,分别在全部 6 个棋盘朝向下忽略其他棋子追踪独立路线。每条路线都必须离场,独立闭环数必须为 0。该要求覆盖主线所有章节,避免移除障碍后才发现最后一枚棋子一直绕圈。
### 真正使用弯轨
对参考解答逐步回放,只统计成功离场时实际走过的路线。每关至少 65% 的成功离场棋子经过 1 处或更多弯道,且这类棋子至少有 3 枚;完整回放的成功移除数应等于初始棋子数。
统计使用 `analyze().pathUsage`,不使用整张棋盘的弯线数量,也不以初始朝向忽略占用的路线统计替代真实回放。旋转会改变轨道,成功路径必须按每次实际消除时的棋盘朝向计算。单纯增加空白格上的曲线,或让绝大多数棋子从边缘直线离场,不能满足发布要求。
### 阻挡可以从路线解释
在已验证解答回放的每个决策状态,对所有剩余棋子的路线进行检查。阻挡对象必须位于该棋子的独立路线所经过的格子中,不能出现路线格子之外的侧面擦碰阻挡。
这项检查不能只查看最终选中的成功移除路线,因为成功路线本来就没有阻挡,无法揭示其他可点击棋子的意外碰撞。每个 `blocked` 结果还必须指向真实存在且不是自身的棋子,并提供有效接触位置,供动画展示同一个阻挡原因。
### 旋转后立即出现进展
换路关和小挑战关的已验证解答中,相邻有效消除之间最多出现 1 次连续旋转。安排为必要步骤的这次旋转必须打开至少一个可消除选择,不能要求玩家先做一次没有进展的旋转,再猜第二次方向。
免费旋转不等于每个任意方向都保证成功,但正式解答和教学顺序必须有清晰因果。发布时同时检查旋转动画与模型更新一致,下一次点击使用旋转后的实际轨道。
### 节奏与计量
每关记录章节、节奏角色、底格数、棋子数、认知指标与工作量。完成 48 关的组内检查:小挑战之后确有释放,长局回报的工作量增长没有被等量的认知负担增长抵消。这里要求的是候选结构和回放验证,玩家的实际感受仍需后续测试。
### 来源与可重复验证
`levels/campaign-seeds.json` 保存全部 48 关的种子与生成参数,是主线布局的制作来源;不能只编辑生成后的 `campaign.json`。修改清单后运行 `npm run levels`,同步关卡、共享模块与报告,再运行测试。
`levels/campaign-analysis.json` 中每关的 `pathUsage` 记录真实参考成功路径,包括直出/弯轨棋子数、弯轨比例、单弯/多弯数量、总转弯、最长连续直出段,以及逐棋子的路径明细。前 7 关还应核对 `lesson` 是否被实际动作支持。报告记录的是参考解答,不是穷尽玩家所有任意旋转和点击顺序。
## 6. 内部时长假设
当前仅用下式比较候选的潜在体验长度:
```text
估计秒数 = 3 × N + 0.75 × 总转弯数 + 4 × 最少旋转数
```
`N` 是初始棋子数;总转弯数采用当前分析器对初始朝向、忽略占用时各棋子独立路线的转弯数求和;最少旋转数来自规则求解器。各系数都是内部制作假设,尚未经过真人用时标定。
上述总转弯口径与 `pathUsage.totalBends` 的实际参考成功路径口径不同,不得混用。后者用于验证弯轨体验与阅读负担,前者仍是现行估时公式的输入;即使弯轨比例达到发布要求,也不能据此宣称真人体验时长已增加。
该结果不是玩家平均通关时长、完成承诺或难度分数。它没有完整模拟玩家的扫描速度、主动停顿、错误尝试、动画等待、提示使用与设备差异。大棋盘的估计数值更高,只能说明当前结构模型认为工作量更大,不能据此宣称玩家一定会玩得更久或更开心。
候选尚未确认可解、出现独立闭环或搜索未确定时,不应将估时作为可发布关卡的数据。公式调整时保留版本,避免把不同计算口径下的数字当作体验提升证据。
## 7. 后续玩家测试
先验证轻松观察与持续推进的体验,再决定是否需要调整公式或节奏。当前没有可引用的玩家统计结果。
| 观察项 | 记录与解释方式 |
| --- | --- |
| 主动停顿 | 区分玩家正在看路线的停顿、动画占用时间与离开游戏的空闲;不能把全部停顿都解释成困难。 |
| 成功消除间隔 | 观察连续成功是否顺畅,以及卡顿是否集中在少数阶段;结合动画时间判断。 |
| 旋转到下一次成功的间隔 | 记录是否能理解旋转带来的新机会,是否出现反复空转和方向试探。 |
| 失败试路与原因 | 区分明确的路线占用、无法解释的接触和误触;尝试次数多不自动意味着体验差。 |
| 最后一枚棋子阶段 | 观察是否出现突然的理解断点、长停顿或依赖提示结束。 |
| 提示、撤销与重开 | 结合发生阶段和玩家描述解释原因,避免仅用总次数判定关卡质量。 |
| 挑战后的感受 | 比较第 4、5、6 关的主动停顿、连续成功和主观轻松程度,确认释放与回报确实发生。 |
| 活跃完成时长 | 从首次有效交互到通关分段记录,并排除明确离开游戏的时间;与工作量、提示使用一起分析。 |
测试反馈应以可观察行为与玩家自己的描述为依据。需要延长后期单关时,优先增加熟悉且可顺畅处理的内容;只有在理解与反馈都清楚时,才增加少量新的判断要求。