feat: add production campaigns, gameplay labs, and review documentation
@@ -0,0 +1,266 @@
|
||||
# HEX TRAILS · 1000 关制作体系与难度曲线
|
||||
|
||||
讨论稿 · 2026-09-12
|
||||
|
||||
本方案以现有规则和[新版设计准则](level-design-principles-v2.md)为基础:箭头决定起步、轨道决定后续路线;底盘旋转时棋子与箭头不动;成功消除减少占用,试路和旋转免费,保留撤销与快速连点。正文保留制作前的方案与假设,不替代实际验收记录。
|
||||
|
||||
实施更新(2026-09-12):已据此制作独立 v0.5 千关首版,20 章 × 50 关。完整规则求解、每关 20 种策略、核心放行与主长路门槛已通过;原操作运行时和历史版本保留。实际配额、逐关证据、静态审阅及浏览器样本见[千关制作报告](v0.5-production-report.md)。真人连续章节试玩、熟练度曲线与长期疲劳仍未校准;客户端当前按章展示,但一次读取完整关卡模块,尚未实现按章下载。
|
||||
|
||||
**目标是让玩家持续体验“看得懂的发现、轻巧的释放、值得观看的长路和有变化的图案”。平均推理负担在中期趋稳,后半程通过组合、空间形态和释放过程持续提供新内容。**
|
||||
|
||||
下文的关数配额、难度档位、频率和检查数量均为首轮生产假设,需由基准样关、连续章节试玩和实际玩家数据校准;不是已经验证的满意度、留存或真人难度结论。
|
||||
|
||||
研究补充(2026-09-12):已完成[论文与竞品调研报告](level-design-research-report.md),并建立[关卡设计知识库](level-design-knowledge/README.md)。研究支持意图/空间共同生成、分类候选库与独立编排的方向;本文精确配额继续作为试验假设。“后期平台”应理解为目标玩家体感的校准目标,不能固定结构难度而忽略熟练度提高;花瓣关也允许空间草图与体验关系共同输入。具体论据、限制和修正见报告第 7 节。
|
||||
|
||||
## 1. 从已有实验保留什么,先改什么
|
||||
|
||||
已有成果:
|
||||
|
||||
- v0.4 的 20 关已有固定制作来源、最少旋转参考解、作者体验解、真实路径统计,以及清挡、反差和往返旋转的具体断言。参考解含 199 次消除、89 条至少 6 弯的路径;“6 弯”只是该批样关的统计口径。
|
||||
- 花形实验已证明可以先设计实际路线,再连接环带、布置棋子。其 91 格、十二瓣与三道环带有 177 段强调连接参与参考解;最长离场为 59 个格步骤、37 弯。
|
||||
- 现有模型、扫掠碰撞、求解器、反向布子、连点队列和回放能力均应复用。
|
||||
|
||||
首先修正评价与生成顺序:
|
||||
|
||||
1. `src/core.js` 的 `analyze.score` 仍把长路两项合计最多计入 34 分。当前首关 4 枚棋子全可出、无需旋转,仍得到 34 分/“进阶”。不能拿这个总分排序 1000 关。
|
||||
2. `src/experience-generator.js` 仍先随机配轨,再偏向长路径选择棋子。它适合提供布子候选,不能独自保证有形状的路线、清楚的放行关系或不同的关内节奏。
|
||||
3. 不同种子、不同布局甚至同样可解,都不代表不同体验。现在需要增加体验差异评审和整段节奏编排。
|
||||
|
||||
## 2. 每关分别记录四个维度
|
||||
|
||||
| 维度 | 真正要看什么 | 在制作中如何使用 |
|
||||
| --- | --- | --- |
|
||||
| 推理负担 | 找到下一步需要辨认什么因果;是否需要预判换路;关键关系是否跨区 | 决定难度档位和章节位置 |
|
||||
| 视觉辨认负担 | 轨道能否跟随、交叉是否清楚、阻挡是否能解释、关键棋子是否被埋没 | 决定可读性是否合格,不能当作加难奖励 |
|
||||
| 操作与播放量 | 成功点击、重复清理、空转、真实动画长度、相似路径反复播放、队列等待 | 控制单关与相邻关的疲劳 |
|
||||
| 观看与释放回报 | 长巡游的空间展开、轻巧反差、一次放开一组、图案逐步显现 | 决定本关为什么值得玩,以及什么时候兑现 |
|
||||
|
||||
四项分别记录,不重新揉成一个“质量总分”。长路长度是观赏内容和可能的跟线负担,不能自动变成推理难度。清楚的 A→B→C 不一定难;若多个合法选择效果等价,也不能把选择多当作深推理。
|
||||
|
||||
求解器的状态数、最少旋转数、释放波次只作结构诊断。难度档位先用基准关对照判断,再用同类玩家的实际表现校准。
|
||||
|
||||
## 3. 难度档位与 1000 关总体分布
|
||||
|
||||
| 档位 | 预期体验 | 初始预算 |
|
||||
| --- | --- | ---: |
|
||||
| D1 | 看见就能启动;可以有很丰富的长绕行 | 150 |
|
||||
| D2 | 找一个清楚的挡子,或理解一次直接换路 | 350 |
|
||||
| D3 | 组合两段熟悉关系,例如清挡后换路、不同区域依次放行 | 350 |
|
||||
| D4 | 少量跨区关系或旋转选择,需要主动观察,但关键变化可解释 | 130 |
|
||||
| D5 | 少量后期综合挑战;判断更深入,仍保持线索、试路与可恢复性 | 20 |
|
||||
| 合计 | 轻松约 50%,适中约 35%,挑战约 15% | 1000 |
|
||||
|
||||
这是内容预算,不要求把每个候选强行塞入某档。若实际试玩与设计评级不一致,重排、修改或淘汰候选。
|
||||
|
||||
**全程保留轻松关。第 800 关的玩家仍应经常获得“我已经很熟练,轻轻一动就通了”的体验。第 1000 关可以是漂亮的庆祝关,不要求它成为最难的一关。**
|
||||
|
||||
### 五个制作阶段
|
||||
|
||||
采用 20 章 × 50 关管理,每章内部使用长度错开的 6–10 关小段。章节有主要路线语汇,但需交叉使用多种形态,不连续做 50 关同一朵花。
|
||||
|
||||
| 范围 | 主要内容进展 | 难度方向 |
|
||||
| --- | --- | --- |
|
||||
| 1–50 | 建立点击、转弯、交叉不换轨、清挡和转盘的直觉;前 10 关就看到长巡游、轻巧反差与有层次的图案 | D1–D2 为主,一次突出一个理解点 |
|
||||
| 51–200 | 熟练区分箭头与出口,理解一枚让一组、清挡再转、简单分段释放 | 逐步增加 D3,少量 D4 |
|
||||
| 201–500 | 跨区连接、内外层穿行、转过去再回来、多个熟悉结构组合 | 推理基线缓慢增加,保留大量舒缓内容 |
|
||||
| 501–800 | 用不同路线形态和不同放行时机重组熟悉规则;加强作品关 | 平均负担趋稳,少量 D5 |
|
||||
| 801–1000 | 熟练感、旧主题的新连接、跨主题组合与阶段庆祝 | 主要增加内容变化,保持难度平台 |
|
||||
|
||||
预算展开如下,用于检查前后期是否真的有变化,而非作为发布前的机械排号规则:
|
||||
|
||||
| 范围 | D1 | D2 | D3 | D4 | D5 | 合计 |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| 1–50 | 25 | 20 | 5 | 0 | 0 | 50 |
|
||||
| 51–200 | 30 | 60 | 50 | 10 | 0 | 150 |
|
||||
| 201–500 | 35 | 110 | 115 | 40 | 0 | 300 |
|
||||
| 501–800 | 35 | 100 | 110 | 45 | 10 | 300 |
|
||||
| 801–1000 | 25 | 60 | 70 | 35 | 10 | 200 |
|
||||
| 合计 | 150 | 350 | 350 | 130 | 20 | 1000 |
|
||||
|
||||
### 小段曲线示例
|
||||
|
||||
一个成熟期十关片段可以是:
|
||||
|
||||
**D2 → D2 → D3 → D3 → D2 → D3 → D4 → D1 → D3 → D2**
|
||||
|
||||
| 相对关位 | 主体验 | 推理档 |
|
||||
| --- | --- | --- |
|
||||
| 1 | 熟悉入口,直接放出一条跨盘长路 | D2 |
|
||||
| 2 | 朝内起步却能沿轨直接出去,兑现路径反差 | D2 |
|
||||
| 3 | 理解两个区域的占用关系,分别让路后释放内层长路 | D3 |
|
||||
| 4 | 清理一侧后换路,让另一侧开始放行 | D3 |
|
||||
| 5 | 路线有层次的花纹关,关键动作很少 | D2 |
|
||||
| 6 | 回访熟悉形态,但关键挡子换到另一区域 | D3 |
|
||||
| 7 | 两个区域的因果关系组合成局部挑战 | D4 |
|
||||
| 8 | 出口大方开放,轻松观看长巡游 | D1 |
|
||||
| 9 | 转到另一侧清挡、再转回来,放出朝内目标 | D3 |
|
||||
| 10 | 图案逐步展开,以顺畅巡游收束 | D2 |
|
||||
|
||||
第 7 关的推理高点之后,第 8 关立即减轻判断;第 10 关的观赏高潮无需同时成为难度高潮。不同小段要改变峰值位置、长度、释放方式和形态,不能让玩家猜到“每第七关一定难”。
|
||||
|
||||
示例中的 D3 意图是让玩家理解组合关系;若实际画面使动作一眼明确、无需组合判断,试玩后应下调档位,不能仅因转了两次或长路较多坚持评为 D3。
|
||||
|
||||
## 4. 内容预算:体验主角与路线形态分开安排
|
||||
|
||||
每关只设一个主体验,其他爽点作为辅助。首轮 1000 关预算:
|
||||
|
||||
| 主体验 | 关数 | 主要任务 |
|
||||
| --- | ---: | --- |
|
||||
| 直接巡游 | 240 | 让长路本身成为可立即获得的奖励 |
|
||||
| 清挡放行 | 260 | 移走关键棋子,清楚地放出后续长路或一组棋子 |
|
||||
| 轻巧反差 | 220 | 用很少的动作解决第一眼觉得棘手的目标 |
|
||||
| 旋转换路与分段释放 | 180 | 改变出路关系,交替清理与观看 |
|
||||
| 综合收束 | 100 | 组合已学内容,组织完整开局、中段和漂亮收尾 |
|
||||
| 合计 | 1000 | |
|
||||
|
||||
形态、长路和旋转是可重叠标签,不与上述主体验类别相加。初始目标为:
|
||||
|
||||
- 约 800 关包含至少一段经过实际回放审阅、值得跟随的长巡游。按路线家族制定制作带,不统一用“≥6 弯”或“≥18 弯”判断全部内容。
|
||||
- 约 200 关具有可辨认的花瓣、环纹、星芒、编织或其他有秩序的路线图案;其中约 60 关作为重点精修作品,其余融入日常关卡。
|
||||
- 约 600 关让旋转承担实际放行作用。旋转角色应变化,不给每关硬凑转数。
|
||||
- 轻巧反差除作为 220 关的主角,也可以出现在其他类型的中段或收尾。
|
||||
|
||||
这些标签不能仅由作者声明。长路需要实际行驶证据,反差需要改变前后的路线证据,图案需要完整画面与实际路线参与证据。
|
||||
|
||||
### 长路怎样不腻
|
||||
|
||||
轮换绕中心、横跨棋盘、内外层穿梭、左右区域交换、花瓣往返等空间过程。关注整关路线分布与重复覆盖,不能只追求单条最大弯数。
|
||||
|
||||
一关可以用少量主角长路配若干有用的短出口。短路负责开局、让路和即时反馈;无需每枚都走最长路线。轻松巡游关则可以让多条各有观感的路线直接畅通。
|
||||
|
||||
保留完整行驶与原游戏速度逻辑。若连续点选后出现疲劳,先审查是否把相同长路重复过多、是否缺少新的放行变化,再讨论交互;不要把动画时间一概当作等待,也不要用慢放增加内容长度。
|
||||
|
||||
### 反差怎样不变成公式
|
||||
|
||||
至少轮换以下来源:朝内却直接出去;中央棋子比边缘棋子容易释放;外表复杂的图案只需一个关键动作;清掉一枚后整组畅通;旋转一次接上另一侧出口。
|
||||
|
||||
简单动作后立即兑现目标。若还要清三层阻挡,就不应把该目标作为“轻巧反差”宣传。
|
||||
|
||||
玩家学会“一转就出”后,再遇相同关系可能主要获得熟练感。这个内容仍有价值,但应按复习或舒缓编排,不能把重复套路持续算作新惊喜。
|
||||
|
||||
### 图案怎样承担不同玩法
|
||||
|
||||
同样的重瓣花语汇可以形成不同作品,但必须重新设计路线连接和放行关系:
|
||||
|
||||
| 花形变体意图 | 关键动作 | 玩家实际看到什么 |
|
||||
| --- | --- | --- |
|
||||
| 舒缓巡游 | 少量棋子直接启动 | 从内层沿不同花瓣向外展开 |
|
||||
| 清挡放行 | 一个短出口先让开 | 花心中的目标穿过内外层长路 |
|
||||
| 轻巧反差 | 一次旋转后点朝内棋子 | 起步方向未变,却从另一片花瓣绕出 |
|
||||
| 分段组合 | 清一侧、换路、再放另一侧 | 花纹逐段显现,最后顺畅收束 |
|
||||
|
||||
早期图案可以维持丰富、有秩序的路线,通过减少需要判断的阻挡关系降低难度,不必退回稀疏的几根花瓣线。后期图案也不默认增加棋子数量或让人盲目跟线。
|
||||
|
||||
## 5. 把生成器升级为按体验制作
|
||||
|
||||
目标流程:
|
||||
|
||||
**制作卡 → 路线与放行骨架 → 约束构造与反向布子 → 补齐轨道 → 自动验证与多策略回放 → 差异筛选 → 章节编排 → 试玩校准。**
|
||||
|
||||
### 5.1 制作卡必须先于种子
|
||||
|
||||
每张卡至少说明:
|
||||
|
||||
- 主体验、目标难度、路线家族、章节角色。
|
||||
- 关键棋子是谁,第一眼预期是什么。
|
||||
- 哪个点击或旋转改变谁的出路。
|
||||
- 奖励在开局、中段还是收尾发生。
|
||||
- 哪些长路、哪些连接必须保留。
|
||||
- 和相邻关、同一母版前例有什么实质区别。
|
||||
|
||||
示例:“中期 D2;重瓣图案;外侧短出口释放一枚朝内目标;目标沿内外花瓣离场;关键奖励在前半段兑现;其余棋子提供顺畅收尾。”
|
||||
|
||||
### 5.2 先设计运动与因果,再求具体布局
|
||||
|
||||
把路线构造与棋子布置拆成可协作的两部分:路线决定形态和运动内容;放行骨架决定清挡、旋转和阶段关系。先保留关键端口和出口,再用约束搜索、反向布子和局部修改找到可实现布局;无法实现就改卡或换结构,不在后面编造标签。
|
||||
|
||||
常用放行结构包括独立出口、一枚让一条、一枚让一组、多个区域分别放行、换向连接、去一侧清理再返回。不同结构可以组合,但不把清楚的因果链简单计成难度。
|
||||
|
||||
图案应优先做在真实轨道内部。现有全盘旋转要求底格集合旋转后仍然合法,不能任意裁成轮廓而破坏规则。颜色和装饰不参与路线规则。
|
||||
|
||||
反向布子时保存完整的构造解,再用求解器和实际回放交叉核验。补齐剩余端口时保持完整配对,并重新检查是否改变主路径、形成意外闭环或引入难解释的碰撞。
|
||||
|
||||
### 5.3 用路线家族和体验母版支撑数量
|
||||
|
||||
先验证约 8–12 类路线构造方式,例如回廊、中心绕行、双区穿梭、内外环带、回折、编织、放射、单瓣/重瓣、波纹和左右镜像图形。每类再形成不同放行关系和节奏的体验母版。
|
||||
|
||||
中期目标是积累约 60–80 套经过审阅的体验母版,探索多个有效变体。不要规定每套必须产出同样数量;母版没有新变化就停,数量缺口用新增结构补齐。
|
||||
|
||||
一个变体至少需要改变两个影响体验的维度,其中至少一个涉及真实路线组织或放行关系。只改颜色、名称、镜像、全局旋转,或添加几枚无作用的直出棋子,不算充分的新内容。
|
||||
|
||||
### 5.4 候选池按类别竞争
|
||||
|
||||
按“主体验 × 推理档 × 路线家族 × 释放阶段”保留不同候选,各自在相近类别中比较清晰度和回报。不要按一个全局分数取前 1000 名,否则容易留下大量相同风格的长路关。
|
||||
|
||||
对每个目标位置可以从数十个候选开始搜索,记录通过率、淘汰原因和计算成本。稀缺类别扩充路线模板;候选不足时不降低正确性、可读性和体验门槛。是否需要上百个候选,以实际产率决定。
|
||||
|
||||
## 6. 去重与防疲劳
|
||||
|
||||
两层一起做:
|
||||
|
||||
1. **布局去重。** 忽略名称、ID、颜色,将整局场景连同棋子、箭头一起旋转/镜像归一。仅转底盘会改变玩法,不能因此把两个不同状态当作同一个布局。
|
||||
2. **体验近似检查。** 比较关键放行关系、成功路径形态、旋转节奏、开局入口、关键奖励出现时机,以及完整行驶的重复程度。
|
||||
|
||||
编排初始规则:同一关键套路不连续用三关;同一具体母版的近似变体初始间隔约 30 关;刻意的教学重复在制作卡中说明目的。这些规则需随试玩调整,不能替代连续游玩评审。
|
||||
|
||||
每 50 关都要回答:这一章增加了什么可感知的新内容?哪些关虽然布局不同,却玩起来相同?若回答不清楚,该批次尚未完成。
|
||||
|
||||
## 7. 四道入库验收
|
||||
|
||||
### A. 规则正确性:全部 1000 关覆盖
|
||||
|
||||
格式、端口、旋转坐标合法;完整构造解与参考解回放通关;实际扫掠碰撞、交叉不换轨、撤销、免费试路和连点一致。搜索到上限只能记录为未确定,不能当作困难但已验证。
|
||||
|
||||
对替代合法操作检查仍可继续完成。当前规则下成功消除只减少占用、旋转可恢复,不能人为制造“正确消除后反而无解”的惩罚。
|
||||
|
||||
### B. 体验证据:全部 1000 关覆盖
|
||||
|
||||
记录实际成功路径的几何长度、格步骤、转弯与空间展开;记录清挡和旋转改变了谁的出路;记录主奖励出现阶段。图案关检查强调连接的参与情况与闭环,不能由装饰线撑起形状。
|
||||
|
||||
检查第一段回报是否过晚、收尾是否重复、反差目标是否兑现。记录完整播放量和相似路径重复度,不能只看最大长路。
|
||||
|
||||
### C. 自然玩法覆盖与差异:全部 1000 关覆盖
|
||||
|
||||
为外圈优先、短路优先、长路优先、较早旋转、顺着局部连续点选等代表策略做回放,并加入随机扰动。初始按每关至少 20 轮设计检查量;新母版、图案、挑战和异常关加密检查。
|
||||
|
||||
除了通关,还要统计这些策略是否仍能看到主长路和关键放行。若关键奖励只存在于作者指定顺序中,修改布局、调整奖励位置或重新归类。可先把约 80% 代表回放能遇到主奖励作为复审参考线,待样关确认;这不是对真实玩家曝光率的保证。
|
||||
|
||||
对关键转盘前后、可能发生格外接触的区域进行额外检查。抽样覆盖必须标明范围,不能宣称穷尽全部玩家行为。
|
||||
|
||||
### D. 人工审阅与真人校准
|
||||
|
||||
每关都应有画面/回放审阅记录;所有新母版、重点图案和挑战关要完整手玩,常规变体做分层实玩抽检,章节要连续试玩。
|
||||
|
||||
真人测试重点关注是否愿意跟完路线、是否理解放行因果、是否认出图案、反差是否成立、连续几关是否感到重复。不能把“全部自动通过”表述为“全部已证明好玩”。
|
||||
|
||||
首轮可以用小规模新手与熟练玩家发现明显问题;样本充足后再估难度和行为分布。记录主动思考、路线动画、错误原因、空转、提示与重开、退出位置,并按玩家熟练度和设备区分。初期不统一给全体关卡设定未经标定的通关秒数或成功率门槛。
|
||||
|
||||
## 8. 量产工具与稳定运行
|
||||
|
||||
制作侧需要一张可筛选的关卡总表:缩略图、体验卡、难度档、实际路线摘要、参考解、替代策略报告、近似关、审阅状态、版本信息。支持直接观看关键放行前后与整段回放,减少在 JSON 和游戏界面之间来回查找。
|
||||
|
||||
所有关卡使用同一套运行时、输入、连点、碰撞、动画与撤销。不同图案作为数据与绘制配置,不另写不同的操作逻辑。
|
||||
|
||||
发布包应冻结关卡快照,并保留关卡稳定 ID、关卡修订号、规则/生成器/模板版本、种子与制作参数。仅保存种子不能保证生成器更新后仍生成同一关。序号与稳定 ID 分开,更新已发布关卡时检查存档兼容。
|
||||
|
||||
生成和筛选离线完成,客户端按章节加载已验证数据;不让玩家进入每一关时等待大规模生成或求解。棋盘大小由手机可点性、可读性和体验需要决定,当前引擎最大 127 格是边界,不是后期制作目标。
|
||||
|
||||
## 9. 实施顺序与完成标准
|
||||
|
||||
| 阶段 | 具体产出 | 继续扩量的前提 |
|
||||
| --- | --- | --- |
|
||||
| 50 个基准样关 | 覆盖不同体验、形态和难度,含后期候选;不等同于主线前 50 关 | 分离难度与回报的评价成立,新母版能兑现制作卡 |
|
||||
| 完整前 100 关 | 两个连续章节、稳定制作卡和审阅工具 | 教学、反差、长路和难关后释放在连续试玩中成立 |
|
||||
| 扩到 300 关 | 扩充母版、自动验证与差异检查 | 常规生成产率可接受,不能靠几个模板反复填数 |
|
||||
| 扩到 600 关 | 验证成熟期的平台曲线与跨章变化 | 熟练玩家在多次游玩后仍能感到变化,播放量没有持续疲劳 |
|
||||
| 扩到 1000 关 | 按每 50 关完成验收包,组织后期回访与最终庆祝 | 全部规则与体验证据齐全,逐关审阅、分层试玩和整段节奏检查完成 |
|
||||
|
||||
先完成评价拆分、路线/放行骨架、差异筛选和统一运行时这几项生产能力,再扩大布局数量。整套工程量和候选倍率应在首批样关测量后估算,不以“生成 1000 个文件很快”推断 1000 个关卡的制作成本。
|
||||
|
||||
初始讨论阶段的产出是制作方案;目前已经完成可玩千关首版。本文中的真人校准、连续长线体验和满意度目标仍需实测,不能仅凭首版数量与自动通过宣称全部成立。
|
||||
|
||||
## 10. 方法参考与项目依据
|
||||
|
||||
以设计者预先定义的目标组织具体空间结构,可参考 [Mixed-Initiative Design of Game Levels: Integrating Mission and Space into Level Generation](https://research.hva.nl/en/publications/mixed-initiative-design-of-game-levels-integrating-mission-and-sp/)。保留多个不同类型的优质候选、在相近类别中比较,而不是只优化单一总分,可参考 [Procedural Content Generation through Quality Diversity](https://antoniosliapis.com/articles/pcgqd.php)。本项目先采用可解释的约束构造和分类候选池,无需为了使用这些思路先引入强化学习系统。
|
||||
|
||||
上述研究提供方法参考,不证明本文配额、难度曲线或 HEX TRAILS 的玩家体验已经成立。项目自身依据为 [新版准则](level-design-principles-v2.md)、[v0.4 回放报告](v0.4-experience-review.md)、[花形实验](flower-study.md)、[生成器](../src/experience-generator.js)、[规则与评分](../src/core.js)及对应测试。
|
||||
@@ -1,6 +1,6 @@
|
||||
# 关卡版本
|
||||
|
||||
在游戏左上角打开选关窗口,通过“关卡版本”切换。首次打开默认使用 v0.3;选择其他版本后会记住选择。各版本有独立的上次选关位置与通关记录。切换时重新开始目标版本上次选择的关卡,不保存进行到一半的棋盘。
|
||||
在游戏左上角打开选关窗口,通过“关卡版本”切换。首次打开默认使用 v0.5;已保存的版本选择继续保留,不强制迁移。各版本有独立的上次选关位置与通关记录。切换时重新开始目标版本上次选择的关卡,不保存进行到一半的棋盘。
|
||||
|
||||
原始版本的设计理念、案例和逐关结构清单见 [v0.1 · 最初 24 关设计理念](v0.1-design-philosophy.md)。本文记录版本管理;两者共同为后续优化提供参照。
|
||||
|
||||
@@ -8,32 +8,44 @@
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| v0.1 · 最初设计 | 最初制作的完整关卡,保留名称、顺序、轨道、棋子和原离场额度 | 24 | 3 章 × 8 关 | `ef2724b` 的 `levels/campaign.json` |
|
||||
| v0.2 · 直线较多版 | 扩展为 48 关时的设计,直线较多 | 48 | 8 章 × 6 关 | `70b021d` 的 `levels/campaign.json` |
|
||||
| v0.3 · 弯轨观察版 | 当前的弯轨教学与观察版本 | 48 | 8 章 × 6 关 | `levels/campaign-seeds.json` 生成的当前主线 |
|
||||
| v0.3 · 弯轨观察版 | 弯轨教学与观察版本 | 48 | 8 章 × 6 关 | `levels/campaign-seeds.json`;发布快照归档于 `levels/versions/v0.3.json` |
|
||||
| v0.4 · 长路与惊喜 | 长路巡游、轻巧反差、清挡与往返换路体验版 | 20 | 4 组 × 5 关 | `levels/v0.4-seeds.json`,生成 `levels/v0.4.json` |
|
||||
| v0.5 · 千段轨迹 | 六类形态 × 五种体验交替编排 | 1000 | 20 章 × 50 关 | `levels/v0.5-recipes.json`,冻结 `levels/v0.5.json` |
|
||||
|
||||
版本号指关卡布局。三版统一使用当前界面、碰撞检测、免费旋转、免费失败试路与撤销规则;没有恢复旧版代码或扣除旋转额度的规则。旧版文件的 `moveLimit` 原样保留,游戏主界面仍显示待解棋子数。JSON 内的 `version: 1` 是数据格式版本,与 v0.1 等布局版本号无关。
|
||||
版本号指关卡布局。五版统一使用当前界面、碰撞检测、免费旋转、免费失败试路与撤销规则,包括快速连点与多枚同时离场。旧版文件的 `moveLimit` 原样保留,游戏主界面仍显示待解棋子数。JSON 内的 `version: 1` 是数据格式版本,与 v0.1 等布局版本号无关。
|
||||
|
||||
v0.1 的旧闭环与扫掠阻挡也原样保留,可以通过旋转和消除找到解答。24 关与 v0.2 的 48 关均已在当前引擎中求解并完整回放。v0.3 的“每关至少 65% 参考消除路径经过弯道”等发布门槛仅适用于该版,不套用于历史布局。
|
||||
|
||||
v0.4 按[新版关卡设计准则](level-design-principles-v2.md)单独制作,全部 20 关同时验证最少旋转参考解和完整体验解。反差关的体验解会直接旋转并启动朝内目标,可能与求解器先清除所有可出棋子的次序不同。逐关关键棋子、路径与验收范围见 [v0.4 体验报告](v0.4-experience-review.md)。
|
||||
|
||||
v0.4 选关按钮展示“长路巡游、轻巧反差、清挡放行”等体验类型;旧版继续展示原难度标签。结构分仍保留在分析中,但不将长路线直接等同于高推理难度。
|
||||
|
||||
v0.5 选关按章显示,每页 50 关,可直接输入关号;`?campaign=v0.5&level=1000` 可直达第 1000 关。难度采用独立的结构预估,不把长路转弯数加入难度分。每关验证独立最少旋转解、作者解和 20 种策略;六种核心策略与十四种随机探索共同验收,按组记录,均不是玩家概率。[制作报告](v0.5-production-report.md)和[审核页](http://localhost:4173/labs/campaign-review/index.html)记录具体范围。
|
||||
|
||||
## 归档与生成
|
||||
|
||||
- `levels/versions/v0.1.json`、`v0.2.json` 是对应 Git 文件的原始字节,不重新序列化。
|
||||
- `levels/versions/v0.1.json`、`v0.2.json`、`v0.3.json` 是对应 Git 文件的原始字节,不重新序列化。
|
||||
- `levels/versions/provenance.json` 记录来源完整提交、Git blob、SHA-256、字节数、关数与回放结果。
|
||||
- `npm run levels:versions` 校验归档哈希,生成 `src/levels-archive.js`,供浏览器直接导入。
|
||||
- `src/campaign-versions.js` 注册版本、章节、关卡模块与旧存档键;`src/levels.js` 继续暴露最新版本,供生成器、设计指南与 Cocos 示例使用。
|
||||
- `npm run levels` 仅重新生成当前主线,再同步历史模块。`npm run build` 校验并同步历史模块,三版均进入静态站点。
|
||||
- `src/campaign-versions.js` 注册版本、章节、关卡模块与旧存档键;`src/levels.js` 保持 v0.3 接口,供原生成器、设计指南与 Cocos 示例使用;`src/levels-v04.js` 暴露 v0.4,浏览器默认选择由版本注册表决定。
|
||||
- `npm run levels` 重新生成 v0.3,再同步历史模块。`npm run levels:v04` 从新制作卡生成 20 关、双方案回放数据和体验报告。
|
||||
- `npm run levels:v05` 从确定性制作计划生成 1000 关;`npm run levels:v05:verify` 检查源码指纹、逐关重新求解与完整回放。
|
||||
- `npm run build` 校验历史归档、生成并验证 v0.4、验证冻结 v0.5,五版均进入静态站点。各版布局来源相互独立。
|
||||
|
||||
后续发布新的布局版本时,先将当前主线与出处归档、登记哈希,再在注册表中添加新版本并更新默认版本。为新版本分配新的存档键,不复用旧版完成记录。历史归档保持不变;为历史布局改版应另发版本,不能直接覆盖。
|
||||
|
||||
## 进度隔离与迁移
|
||||
|
||||
版本选择保存在 `hex-trails-campaign-version`,各版进度保存在 `hex-trails-campaign-v0.1`、`hex-trails-campaign-v0.2`、`hex-trails-campaign-v0.3`。旧键仅在对应新键不存在时读取,写入新键,不删除或覆盖旧数据。
|
||||
版本选择保存在 `hex-trails-campaign-version`,各版进度保存在 `hex-trails-campaign-v0.1`、`hex-trails-campaign-v0.2`、`hex-trails-campaign-v0.3`、`hex-trails-campaign-v0.4`。旧键仅在对应新键不存在时读取,写入新键,不删除或覆盖旧数据。v0.4 使用新存档槽,不读取旧版完成记录。
|
||||
|
||||
| 目标版本 | 对应旧存档键 |
|
||||
| --- | --- |
|
||||
| v0.1 | `hex-trails-v2` |
|
||||
| v0.2 | `hex-trails-observe-v3-r1`(若存在),否则 `hex-trails-observe-v3` |
|
||||
| v0.3 | `hex-trails-observe-v3-r2` |
|
||||
| v0.4 | 无,独立新存档 |
|
||||
| v0.5 | 无,使用 `hex-trails-campaign-v0.5` 独立新存档 |
|
||||
|
||||
v0.2 与 v0.3 内部关卡 ID 相同但布局不同,完成记录只按版本隔离,不能按 ID 合并。非法版本回到默认版本,越界关卡索引回到该版第一关,完成列表过滤越界值和重复值。浏览器不允许保存时,当前页面仍可切换并保留各版进度,刷新后无法保留。
|
||||
|
||||
自动测试验证历史文件与模块一致、72 关完整回放、版本数量与章节、默认选择、跨版本隔离、旧存档迁移与异常存储。Cocos 示例默认加载最新主线,本次未实现原生版本选择控件或完成原生实机验证。
|
||||
自动测试验证历史文件与模块一致、前三版 120 关完整回放、v0.4 双方案回放和替代顺序探索、版本数量与章节、默认选择、跨版本隔离、旧存档迁移与异常存储。Cocos 示例仍通过原接口加载 v0.3;本次未移植 v0.4 到原生工程、实现原生版本选择控件或完成原生实机验证。
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
# 环路车场:转盘发车玩法研发记录与阶段结论
|
||||
|
||||
记录日期:2026-09-10\
|
||||
当前状态:**暂缓研发,保留 Demo、实现和测试,供后续复盘。**
|
||||
|
||||
## 阶段结论
|
||||
|
||||
本轮已经验证了车辆沿复杂轨道行驶、旋转道路、自动批量放行和提前错峰调度的技术可行性。路线提示、状态说明和连续行驶表现也经过多次调整。
|
||||
|
||||
但当前玩法仍没有提供足够明显的策略乐趣。最终试玩反馈是:**“比较无聊,没有策略点。”** 玩家主要在左右转动和发车之间循环;系统处理了车辆选择、出车顺序和交通冲突,玩家缺少需要权衡后果的决定。已有的目标转动次数,尚未让这种取舍在体验中成立。
|
||||
|
||||
本轮决定先暂停这个方向。订单、旋转预算、局部道岔等改进只完成了讨论,尚未实施,也未通过试玩验证。
|
||||
|
||||
## 1. 实验起点与玩法假设
|
||||
|
||||
实验以独立的 Car Loop Lab 开展,不修改主游戏的规则和主线关卡。
|
||||
|
||||
基础结构是方格或六角内部路网,加一圈同形、固定的顺时针外环。小车沿配对轨道转弯,从棋盘边缘汇入外环,最终到达右上角车库。只转动内部道路,停放车辆的位置和朝向保持不动;方格每次转 90°,六角每次转 60°。
|
||||
|
||||
最初采用“自由点车”:玩家选择车辆发车,遇到前车或交叉冲突时停车,空间清空后继续。之后提出“转盘发车”:把逐辆点击交给系统,让玩家集中处理道路无法继续放行的节点。
|
||||
|
||||
新模式的假设是:降低逐辆操作的负担,通过左右转向和转动次数形成规划挑战。需要验证的核心问题是:**自动化之后,留下的玩家决定是否仍然有趣。**
|
||||
|
||||
## 2. 研发演进与反馈
|
||||
|
||||
以下按迭代顺序记录,不代表每个阶段都经过独立的用户研究。
|
||||
|
||||
| 阶段 | 实现和调整 | 触发反馈与认识 |
|
||||
| --- | --- | --- |
|
||||
| 基础车场 | 支持方格、六角路网,短车身和明显的车顶箭头,沿曲线转向并驶向车库 | 外环需要贴合内部棋盘轮廓:方盘配方环,六角盘配六角环 |
|
||||
| 即时多车发车 | 自由点车由起点排队改为点击立即出发,多车同时行驶,途中检测真实占位和交叉冲突 | 逐辆等待影响操作响应;发车指令应立即可见 |
|
||||
| 长路线与规模 | 增加真实多弯路线和 10/16/22 辆样本;另做 96 辆桌面关卡,六角 169 格、方格 15×15 | 验证长路径、大棋盘和大批车辆的表现;页面随后改为适配窗口、去掉滚动条和过多留白 |
|
||||
| 视觉整理 | 参考 Hex Video Lab v2;调整车辆大小和白箭头,移除车身下方多余色条,减弱道路对比和格缝,移除六角外缘伸出的引道线 | 试玩反馈棋盘显得乱、看久容易疲劳;复杂路线需要更克制的背景表现 |
|
||||
| 交通问题修复 | 修复未发车车辆“预占未来整条路线”造成的误阻挡;处理两车互卡、自由模式自动演示停滞等问题 | 看起来能走却停住,会破坏规则可信度;自由模式仍保留途中让行 |
|
||||
| 转盘发车初版 | 底部改为左转/发车/右转;系统依当前方向逐辆放行,不自动转盘;无车可走时由玩家转向后再次发车 | 希望减少逐车操作,让玩家处理每轮的转向节点;同时修正左右旋转按钮的箭头表现 |
|
||||
| 路径解释与关卡目标 | 发车时显示车身同色的实际路径;两种棋盘各制作三个 16 辆关卡,加入目标转动次数与左右方向差异 | 自动运行时玩家看不到原先靠悬停才出现的路线;关卡需要体现转向和次数的作用 |
|
||||
| 整轮放行与状态说明 | 一次启动本轮可放行车辆;显示可发车、放行中、需转盘、到站中等状态;路线改用原悬停提示的线型,移除外环尾迹 | 串行发车让人无法判断“还有车能走”还是“只是在等动画”;运行阶段需要明确 |
|
||||
| 提前错峰调度 | 从途中停车让行,改为根据完整行程安排出发时刻;独立路线并行,有冲突的车在原位倒计时后出发 | 车辆贴在一起等待令人不舒服;调度要同时覆盖交叉口、外环汇入和终点,避免把拥堵移到出口 |
|
||||
| 路线颜色收敛 | 所有转盘发车路线统一恢复为原来的绿色提示线,保留淡色光晕;出盘后收起 | 试玩更偏好原版绿色提示,不再按车身颜色绘制多色路线 |
|
||||
| 乐趣评估与暂缓 | 操作和通行已较顺畅,但玩家认为玩法无聊、没有策略点 | 本轮决定先放下,记录过程与结论;后续建议停留在讨论阶段 |
|
||||
|
||||
## 3. 暂缓时保留的版本
|
||||
|
||||
### 玩家操作
|
||||
|
||||
- 进入“转盘发车”模式后,左、右按钮仅转动内部道路,中间按钮安排当前朝向下可放行的整批车辆。
|
||||
- 发车不自动旋转。转盘后也不会自动发车,需要玩家再次点击中间按钮。
|
||||
- 有冲突的车辆在起点等待自己的通行时段,显示短倒计时;已出发的车辆沿预定轨迹连续前进。
|
||||
- 放行阶段显示待发、盘内、外环数量,尚未实际起步的车辆仍计入“待出发”。盘内放行及待发安排完成后,才允许继续转盘。
|
||||
- 统一使用绿色 `#329378` 提示路线:淡色光晕、实线与端点。车辆离开棋盘后收起提示,外环不显示尾迹。
|
||||
- 默认 2× 速度,可调 1–3×。目标转动次数用于评价,目前不是硬性失败条件;颜色不承担订单或通行规则。
|
||||
- 自由点车模式作为对照保留,仍采用即时出发和实时停车让行。96 辆超大样本属于自由模式,转盘发车模式使用专门的 16 辆样本。
|
||||
|
||||
### 可复现的转盘发车样本
|
||||
|
||||
下表来自当前 `rotationPlan()` 的求解结果。左右序列是最少转动次数的一组参考解,不表示只有这一条解。每次转动后都要发车;批次车辆数的第一项是初始朝向直接发车的数量。
|
||||
|
||||
| 棋盘 | 关卡 | 种子 | 目标转数 | 参考转向 | 各轮放行数量 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 六角 | 转向开路 | 3 | 2 | 左、左 | 2、8、6 |
|
||||
| 六角 | 折返放行 | 14 | 2 | 右、左 | 3、7、6 |
|
||||
| 六角 | 连续调度 | 8 | 4 | 左、左、左、左 | 3、1、5、2、5 |
|
||||
| 方格 | 转向开路 | 6 | 2 | 右、右 | 6、4、6 |
|
||||
| 方格 | 折返放行 | 12 | 2 | 左、右 | 7、4、5 |
|
||||
| 方格 | 连续调度 | 19 | 3 | 左、左、左 | 4、4、5、3 |
|
||||
|
||||
六个关卡在初次放行之后,先向左或向右的最少总转动次数不同;第二关的最优解需要折返。这证明了关卡存在方向差异,但目前的体验反馈表明:**计算上的差异还没有转化为足够清楚、有吸引力的玩家决策。**
|
||||
|
||||
## 4. 已验证的内容与证据范围
|
||||
|
||||
- 调度改动后的最近一次完整回归为 `npm test`:100 项通过;`npm run build` 通过。之后的绿色路线调整完成语法检查、静态构建和浏览器视觉检查。本记录本身是文档变更,没有重新运行整套测试。
|
||||
- 真实应用帧循环测试覆盖六个转盘发车关卡通关、先走另一转向后的继续通关、禁止自动转盘、转后等待发车、重置和切换模式取消待发安排。
|
||||
- 调度测试覆盖互不冲突的路线同时出发、交叉路线错峰但行程仍可重叠、帧间扫掠碰撞、上一轮车辆预订通行时段,以及弯道、汇入口、外环、车库的车距。
|
||||
- 测试中途切换 1×/3×/1.5×,并使用变化的帧间隔;所有车辆共享同一模拟时钟,避免速度变化打乱调度。
|
||||
- 浏览器实测六角“转向开路”第一轮两车并行;左转后八车一轮中,三车先发、五车待发,随后接续完成。还检查了窄窗口布局和不同车身颜色使用同一绿色路线。
|
||||
- 本轮验证针对浏览器实验实现,没有完成原生引擎移植验证。
|
||||
|
||||
上述证据支持运行正确性和表现改进,不能据此证明游戏有趣。本轮乐趣判断来自研发过程中的定性试玩反馈,尚无独立样本的通关率、重复游玩意愿等数据。
|
||||
|
||||
## 5. 为什么目前缺少策略感
|
||||
|
||||
以下是对反馈的设计解释,仍需后续实验验证。
|
||||
|
||||
1. **系统接管了大部分操作决定。** 玩家不再选择具体车辆、顺序和避让方式,剩下的动作主要是左右转动及整批发车。
|
||||
2. **试错代价较弱。** 当前目标是全部清空,多转几次依然可以继续。目标转数虽存在,但尚未形成玩家愿意追求的挑战。
|
||||
3. **决策后果难以读懂。** 整盘道路复杂,玩家不容易在转动前预测这一转将释放谁、会为下一轮留下什么方向。绿色路线解释的是正在发生的运动,对转动前的规划帮助有限。
|
||||
4. **放走车辆通常只带来单向收益。** 车辆离开会腾出空间,当前规则很少要求玩家为后续目的保留某辆车或某个通行机会。
|
||||
5. **观看占比仍高。** 多弯轨迹和大量车辆能够增加动画内容,却没有相应增加有意义的决定。
|
||||
|
||||
值得保留的经验是:清晰状态、统一提示线、真实路线和提前错峰,让玩家更容易理解并舒服地观看运行。但下一轮若恢复研究,优先需要验证决策本身,而不是继续扩大车辆数量和路线长度。
|
||||
|
||||
## 6. 已讨论、尚未实施的方向
|
||||
|
||||
| 方向 | 希望产生的决定 | 当前判断 |
|
||||
| --- | --- | --- |
|
||||
| 出车订单 | 例如先送红车再送蓝车,展示当前与下一单;玩家同时考虑当前任务和下一批所需道路方向 | 优先候选。颜色将成为规则;需要重新设计可解的关卡,尚无玩法验证 |
|
||||
| 更清楚的旋转目标 | 例如三次内得金牌,转动消耗可见标记,允许撤销;让当前收益与后续转动成本有关联 | 与订单结合更值得测试,单独强化已有转数显示可能仍不足 |
|
||||
| 一个局部道岔 | 选择接通哪一条路,并限制切换次数,形成更直观的局部取舍 | 备选方向,需要验证额外控件是否值得其复杂度 |
|
||||
|
||||
讨论中的首选小实验是“订单+旋转目标”:8~10 辆车、两种颜色,同时展示当前和下一单,沿用错峰发车,并增加撤销操作。关卡刻意设置一种情况:眼前最容易完成的选择,会让下一批多花一次转动。
|
||||
|
||||
这些属于恢复研发时的候选假设,**不是已采纳的下一阶段开发计划**。重新评估时可观察:玩家能否说明自己的选择理由,是否会主动考虑下一批,是否能理解转错的代价,以及通关后是否愿意重试更少转数的解。
|
||||
|
||||
## 7. 恢复研究时的入口
|
||||
|
||||
- [转盘发车 · 六角 Demo](http://localhost:4173/labs/car-loop/index.html?mode=batch&kind=hex)
|
||||
- [转盘发车 · 方格 Demo](http://localhost:4173/labs/car-loop/index.html?mode=batch&kind=square)
|
||||
- [Lab 使用说明](../labs/car-loop/README.md),[早期视觉适配记录](../labs/car-loop/design.md)
|
||||
- [玩法与关卡规划](../labs/car-loop/batch.js):当前朝向放行、双向旋转搜索、样本种子。
|
||||
- [完整行程调度](../labs/car-loop/schedule.js),[出盘与车库轨迹](../labs/car-loop/routes.js)。
|
||||
- [模型与求解](../labs/car-loop/model.js),[自由模式实时交通](../labs/car-loop/motion.js),[界面与渲染](../labs/car-loop/app.js)。
|
||||
- [模型、交通与调度测试](../tests/car-loop.test.js),[批次关卡测试](../tests/car-loop-batch.test.js),[真实应用帧循环测试](../tests/car-loop-app.test.js)。
|
||||
|
||||
启动:在项目根目录运行 `npm run dev`。转盘发车模式的专项验证:`node --test tests/car-loop.test.js tests/car-loop-batch.test.js tests/car-loop-app.test.js`。
|
||||
@@ -0,0 +1,29 @@
|
||||
# 花形轨道 · 重瓣实验
|
||||
|
||||
入口:[花有出路 · 重瓣](http://localhost:4173/labs/flower/index.html)。这是独立的图案关测试,不加入 v0.4,不读写主线进度。
|
||||
|
||||
## 图案结构
|
||||
|
||||
用半径 5 的 91 格标准六边形承载路线。每个扇区有一大一小两片嵌套花瓣,旋转重复六次,形成双层十二瓣;相邻外瓣交错穿过。花心外围还有三道环带,在六个径向交点重新配对端口,把环带接进花瓣的行驶路线。整体呈放射对称的重瓣花,兼有内外层次和环形编织。
|
||||
|
||||
图案全部由实际端口配对形成,没有背景花朵图片。每格仍完整保留三条连接;177 条连接构成深色花纹,占全部 273 条连接约 65%。其他连接用细线显示。参考解会经过全部深色连接(出发格使用其外向半段),三道环带均已接通,不留下只供装饰的闭环。“暂隐棋子,看完整花纹”便于观察完整图案;“全部轨道等粗显示”用于检查端口连接。
|
||||
|
||||
花瓣和环带具有六重旋转对称,花心连接具有三重旋转对称。旋转 60° 后图案仍保持秩序,但花心连接变化,改变棋子所通向的出口。
|
||||
|
||||
## 可玩结构
|
||||
|
||||
- 共 10 枚棋子:外围 6 枚,内层 4 枚。
|
||||
- 开局 2 枚朝外棋子先离场,空出出口。
|
||||
- 内层 4 枚依次走过 13–33 个格步骤,包含 8–21 次转弯,逐步展示编织结构。
|
||||
- 外围 4 枚朝内棋子走完整的跨花瓣长路:每条 59 个格步骤、37 次转弯。
|
||||
- 参考解最后剩两枚时需要旋转一次,换接已空出的出口。
|
||||
- 试路失败和旋转均免费,支持撤销、重来和提示,沿用现有动画与碰撞规则。
|
||||
- 复用主游戏的点击队列:行驶或转盘动画期间可快速连点,待出发棋子显示描边,并按点击顺序在最新棋盘状态下执行。重复点击不重复入队;遇阻、撤销或重来会清空后续队列。
|
||||
|
||||
参考解:`petal-0 → petal-2 → bloom-2 → bloom-3 → bloom-0 → bloom-1 → petal-1 → petal-5 → 右转 → petal-3 → petal-4`。
|
||||
|
||||
## 验证
|
||||
|
||||
关卡通过格式校验与求解;参考回放没有格外阻挡。所有棋子在六个朝向下的独立路线都可离场且全程沿深色花纹行驶。测试也覆盖花纹的真实路线使用、最后一对的旋转解锁与撤销,以及六种起始朝向、正反消除顺序的通关。
|
||||
|
||||
布局与花纹定义见 [flower-study.js](../src/flower-study.js),实验界面见 [labs/flower](../labs/flower/index.html)。图案辨识度需要继续结合实际体验评估;未做原生引擎实机验证。
|
||||
@@ -0,0 +1,97 @@
|
||||
# 论文精读:把设计意图与空间一起生成
|
||||
|
||||
知识编号:P01 · 更新:2026-09-12 · 标签:`mixed-initiative` `mission-space` `生成文法` `局部重生成` `路线骨架`
|
||||
|
||||
**可复用结论:先描述玩家将经历的关系,再把关系与空间约束共同落实成可玩的布局;把中间结果留给设计者检查和修改。** 对 HEX TRAILS,“清掉入口 → 放出内向棋子 → 绕花瓣长路离场”应该是生成输入,而不只是生成完成后的评价标签。
|
||||
|
||||
## 文献与阅读范围
|
||||
|
||||
Daniël Karavolos, Anders Bouwer, Rafael Bidarra. *Mixed-Initiative Design of Game Levels: Integrating Mission and Space into Level Generation*. Foundations of Digital Games, 2015。
|
||||
|
||||
- [原文 PDF](https://livegamedesign.github.io/assets/FDG2015_Karavolos.pdf)
|
||||
- [大学文献记录](https://research.hva.nl/en/publications/mixed-initiative-design-of-game-levels-integrating-mission-and-sp/)
|
||||
- 本次核读:PDF 全部 8 页;正文第 1–6 节、图 1–3、表 1、致谢与参考文献。第 3、5 页图示另经渲染查看。以下页码指 PDF 文件页序。
|
||||
- 论文类型:两项系统案例与方法讨论。**不是玩家效果实验,也没有提供千关难度曲线或商业留存验证。**
|
||||
|
||||
## 论文实际讲了什么
|
||||
|
||||
### 1. Mission 与 space 是两个相关的设计对象
|
||||
|
||||
Mission 指玩家任务及其关系,例如先取得钥匙才能打开门;space 指这些任务发生的位置、房间和路径。论文讨论如何通过模型转换连接二者,而不是先造一张通用地图再塞任务。这里的 mission 不要求存在剧情文本。研究着眼于开发期间的人机协作:设计者可以直接改图或草图,也可以重跑某个生成步骤。(§1–2,p.1–3)
|
||||
|
||||
Ludoscope 将生成流程拆成模块,每个模块有自己的符号和转换规则。执行可由概率决定,也可遵循指定顺序的 recipe,或交由设计者编辑。符号的成员属性携带配对关系、当前可用能力等上下文;规则后的脚本可触发后续规则。论文的价值在于可控制的设计流程,并非提出一个包办各种游戏的自动生成器。(§2.3、§6,p.3、6)
|
||||
|
||||
### 2. Dwarf Quest:先任务图,再空间布局
|
||||
|
||||
设计者绘制抽象行动图,系统依次展开谜题、拾取和战斗,再让设计者微调详细图,最后由布局求解器映射为房间。这个顺序有依赖依据:谜题节点本身可能包含拾取和战斗。钥匙与锁用 ID 关联;战斗及取得敌人掉落钥匙需要落在同一房间。布局器还会加入连接路径和填充房间,以满足二维网格、房间出口数等游戏约束。(§3–3.1,p.3–4)
|
||||
|
||||
**图 1 的信息**:左侧是可分步执行的设计流程,右侧依次展示抽象图、展开图及最终地图。地图中有来自任务图的房间,也有布局器补的填充房间。这提醒我们:几何上新增的内容,不一定新增了玩法关系;需另行检查它承担的体验。
|
||||
|
||||
### 3. TickTick++:空间草图与任务顺序共同约束生成
|
||||
|
||||
设计者同时给出起终点、能力道具及连接路径的草图,以及取得能力的顺序。系统据此扩展轮廓,并标注各路径位置已经具有哪些能力。路径扩展可能产生歧义,流程专门留出人工修正轮廓的步骤。锁的放置按能力获取顺序的逆序进行,因为最后获得的能力对应可放置区域最少。之后才用模板展开细节,并转换到游戏使用的实际尺度。(§4–4.1,p.4–5)
|
||||
|
||||
**图 2–3 的信息**:图 2 有两路输入,在空间轮廓生成和锁放置阶段汇合;人工介入不只发生在开头,轮廓修正和末端微调也是流程的一部分。图 3 证明流程产物可以进入实际游戏画面,不能由此推断玩家更喜欢这些关卡。
|
||||
|
||||
### 4. 两个案例支持不同生成方向
|
||||
|
||||
表 1 对比的是“任务先于空间”和“任务与空间并行约束”。因此,不能把论文概括成唯一的“先依赖图、后画形状”流水线。对强形状需求,可以先给空间草图,同时约束任务关系。相同任务图生成多个空间,以及同一空间承载不同任务,都是作者讨论的复用方向。(§5–6、表 1,p.5–7)
|
||||
|
||||
## 证据与适用边界
|
||||
|
||||
| 原文支持的说法 | 不应扩大的说法 |
|
||||
| --- | --- |
|
||||
| 两个案例实现了分模块、人机交替的生成流程 | 已证明比手工设计更省多少工时、提升多少满意度 |
|
||||
| 重跑下游模块可以保持上游输入 | 已实现任意局部锁定、精确保留本轮生成结果 |
|
||||
| 修改参数可以改变案例中的战斗配置、谜题分支等 | 参数等价于真实玩家难度,或可直接映射本项目五档难度 |
|
||||
| 中间图/轮廓有助于设计者控制任务与空间 | 所有自动展开都会保持可解、不会产生歧义 |
|
||||
| 作者讨论同一任务生成多个空间 | 这些空间在玩家眼中必然是不同体验 |
|
||||
|
||||
作者明确指出:模板仍需要大量人工工作;规则改变可能使模板失效;复杂模块的错误可能源于文法、流程或游戏代码,排查困难。重跑模块虽不改上游,仍可能丢失该模块上一轮输出中设计者喜欢的部分;选择性保留被提出为待解决方向。论文也明确说案例没有与玩家互动,实时适应玩家、难度序列可视化属于后续工作。(§5–6,p.6–7)
|
||||
|
||||
## 对 HEX TRAILS 的迁移方案
|
||||
|
||||
以下均为本项目设计建议,**不是论文已验证结果**。
|
||||
|
||||
### 制作卡 P01-A:将“主爽点”变成输入约束
|
||||
|
||||
一次生成至少给出三项:目标体验、必须发生的关系、允许变化的空间。
|
||||
|
||||
```text
|
||||
体验:内向棋子经过轻巧操作后沿花瓣长路离场
|
||||
关系:入口 A 移走后,旋转一格使 B 接通出口
|
||||
空间:B 的实际路线经过指定花瓣,交叉保持轨道配对
|
||||
固定:B 的初始位置/箭头,关键花瓣段,关键动作上限
|
||||
可变:其他棋子位置、非关键轨道、次要离场顺序
|
||||
证据:真实规则回放中,B 在允许动作内成功走过指定路线
|
||||
```
|
||||
|
||||
具体动作数是一张制作卡的意图,不应升级成所有关卡的统一规则。若关键路径在生成中被破坏,应返回具体冲突,避免用装饰花瓣补足标签。
|
||||
|
||||
### 制作卡 P01-B:为花瓣提供双向生成入口
|
||||
|
||||
普通清挡关可从关系骨架开始;花瓣、螺旋、环绕等关卡可先固定实际可行驶的路线片段,再寻找兼容的棋子、阻挡与旋转阶段。两种入口汇合在“带条件的路线与释放关系”中间表示上。
|
||||
|
||||
本游戏底盘旋转会改变路线,所以一张静态“谁挡谁”的图不够。至少记录关系成立时的底盘朝向、剩余棋子以及实际行进路线。不同状态可以有不同关系;不要将某一参考解的关系当作全局真理。
|
||||
|
||||
### 制作卡 P01-C:明确哪些东西可以重做
|
||||
|
||||
后续编辑器应允许设计者固定关键棋子、路段、阶段和已验收的释放效果,再局部生成其他内容。每次修改输出“保留项、变化项、失效的验证”。这比反复换随机种子更符合协作目标。
|
||||
|
||||
注意:**精细锁定是我们计划补足的能力,不是论文中已经完整实现的功能。** “重跑下游”与“保住下游上次喜欢的局部”是不同问题。
|
||||
|
||||
### 制作卡 P01-D:按体验角色构造模块
|
||||
|
||||
优先形成“入口让路”“一转放行”“跨区巡游”“阶段清理”“漂亮收尾”等可组合模块。每个模块有输入状态、输出机会、空间约束及可回放见证。模块不是只画几条线的图案模板。
|
||||
|
||||
逆序放锁可以启发“先保障空间最受限的关键路线,再填外围内容”,但其适用条件需要验证。平台游戏的能力获取和本游戏旋转换路并不相同,不能直接复制其锁匙算法。
|
||||
|
||||
## 后续使用时的检查清单
|
||||
|
||||
1. 当前设计输入是在表达玩家经历,还是只有大小、密度、弯数?
|
||||
2. 形状与关键释放关系冲突时,有没有明确的中间表示供修改?
|
||||
3. 重生成是否保留了设计者明确固定的内容?
|
||||
4. 关键效果是否在真实规则和实际点击流程中回放成立?
|
||||
5. 同一任务骨架的新空间是否改变了路线、观察或释放过程?仅颜色变化不算新的体验证据。
|
||||
|
||||
关联:[PCG-QD 精读](02-pcgqd.md)解决候选库多样性;[难度与序列补充研究](03-progression-and-difficulty.md)讨论如何从关卡库安排推进过程;[总报告](../level-design-research-report.md)将三者结合。
|
||||
@@ -0,0 +1,179 @@
|
||||
# 论文精读:Procedural Content Generation through Quality Diversity
|
||||
|
||||
知识条目:KB-P02 · 核读日期:2026-09-12 · 适用对象:HEX TRAILS 关卡生成、候选库、筛选与评审工具。
|
||||
|
||||
**最有用的结论:生成器应保留“不同体验类型中各自优秀的关卡”,而不是用一个总分把全部候选排队。** 论文为这种候选库提供方法框架;把它应用到长路巡游、轻巧反差和花瓣路线,是本项目的设计推论。
|
||||
|
||||
## 1. 文献身份与阅读范围
|
||||
|
||||
Daniele Gravina, Ahmed Khalifa, Antonios Liapis, Julian Togelius, Georgios N. Yannakakis. *Procedural Content Generation through Quality Diversity*. 2019 IEEE Conference on Games (CoG). DOI:`10.1109/CIG.2019.8848053`。arXiv 初次提交日期为 2019-07-09。[元数据](https://arxiv.org/abs/1907.04053)
|
||||
|
||||
本次逐页阅读了[作者提供的 8 页 PDF](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf),并与[作者全文 HTML](https://antoniosliapis.com/articles/pcgqd.php)交叉核对;渲染检查了包含图 1–5、表 I 的 PDF 第 4–6 页。以下页码指该 PDF 的物理页序,从首页算第 1 页,不能直接套用到重新排版的版本。
|
||||
|
||||
它是一篇**方法综述与研究方向论文**:归纳已有 QD 算法及游戏应用,论述优势、解释性与开放问题。它没有报告一项新的 1000 关量产实验,没有研究箭头消除游戏的难度曲线,也没有给出长期留存或玩家满意度的因果证据。文中的个案数值是作者转述所引研究,不能归为这篇综述自己的统一对照实验。
|
||||
|
||||
本条目采用三个标签:**[论文]** 表示原文论述或转述;**[解读]** 表示对方法适用边界的分析;**[项目建议]** 表示需要在 HEX TRAILS 中实现、验证的方案。
|
||||
|
||||
## 2. 可复用摘要
|
||||
|
||||
**[论文]** QD(Quality Diversity)同时处理“内容是否达到质量要求”和“内容在行为上有哪些不同”。它可以通过行为特征划分空间、在相似候选间保留更优者,也可以通过行为距离鼓励新颖性。可解性等硬约束与局部质量竞争是两种质量控制方式。MAP-Elites 是其中一种算法,PCG-QD 是更宽的程序化内容生成方法类别。[§II,PDF 第 1–3 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=2)
|
||||
|
||||
**[论文]** 作者认为,一次搜索保留许多不同的合格内容,有利于批量产出、人机协作、观察生成器能够覆盖哪些类型,以及帮助设计师理解结果。效果依赖行为特征、质量指标、约束和评价器的定义;高维空间、分箱粒度、特征依赖及仿真成本都是问题。[§III、§V,PDF 第 3–4、7 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=3)
|
||||
|
||||
**[项目建议]** 对 1000 关最有价值的用法,是建立可以按体验挑选的候选档案。先确保规则与解法成立,再分别保存“直接长路”“清挡放行”“一次旋转反差”“有形状的长路”等优秀样关。关卡次序、难度波动和真人体验校准应由额外流程完成,不能把档案格子的排列直接当成玩家关卡顺序。
|
||||
|
||||
## 3. 全文阅读定位
|
||||
|
||||
| 位置 | 原文内容 | 本条目取用的知识 |
|
||||
| --- | --- | --- |
|
||||
| 第 1 页,摘要、§I、§II 开头 | 质量与多样性的动机;QD 与只寻找最优解的区别 | 数量和参数差异不能直接代表可感知变化 |
|
||||
| 第 2 页,§II-A/B/C | 行为距离、行为分区、局部竞争、约束;ME、ME-NOV、MESB、CNS | 分开定义“好不好”与“是哪一类” |
|
||||
| 第 3 页,§II-C 后半、§III-A/B/C | CSS、CME、NS-LC、SS-LC;批量效率、评价函数、表达范围 | 算法选型;避免把 fitness-free 解读成不需要质量判断 |
|
||||
| 第 4 页,§III-C/D/E、§IV-A/B;图 1、2 | 可视化覆盖、人机协作、解释性;图像与弹幕案例 | 档案空洞诊断;不同表现不必争同一个最高分 |
|
||||
| 第 5 页,表 I、图 3、4、§IV-B 至 F | 各应用的质量/多样性定义;Mario、卡组、地图建议 | 特征应与实际玩法对应;仿真指标有条件性 |
|
||||
| 第 6 页,图 5、§IV-F 至 J、脚注 1 | 武器、飞船、方块建筑、地牢、案例讨论 | 算法 surprise 与玩家惊喜的区别;可解释性尚非充分验证结论 |
|
||||
| 第 7 页,§V、§VI、参考文献开头 | 高维、粒度、代理模型、不同风格的测试代理;结论 | 多策略验证、控制评价成本、限制指标维数 |
|
||||
| 第 8 页,参考文献 | 所引方法与应用的原始文献 | 后续追读入口;本次未冒充已全文阅读这些被引论文 |
|
||||
|
||||
## 4. 五个必须分清的概念
|
||||
|
||||
### 4.1 质量与行为特征
|
||||
|
||||
**[论文]** 质量回答某个候选是否符合要求、或在同类候选里是否更好;行为特征描述它属于哪种表现。两枚得分相同的候选仍可能值得同时保存,因为它们的行为不同。原文特征并不限于真实玩家行为:也包括空间结构、图像类别、卡牌费用分布等可计算描述。[§II,PDF 第 1–3 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=2)
|
||||
|
||||
**[项目建议]** “实际最长成功路径”“放行方式”“路线形态”“旋转阶段”适合描述体验类别;“能完整清盘”“交叉与碰撞符合正式规则”“承诺的主爽点确实在回放出现”适合成为验收条件。难度可以先作为记录和编排标签,不必直接进入统一质量分。
|
||||
|
||||
例如,舒缓长路与多阶段清挡分别比较本类质量。若统一奖励“旋转越多、依赖越深、路径越长”,搜索可能让本来应该轻巧的关卡也变得繁重。
|
||||
|
||||
### 4.2 内容编码差异与体验差异
|
||||
|
||||
**[论文]** QD 的多样性机制强调行为空间,不等于仅检查基因编码是否不同。案例也显示,特征选取会直接决定系统眼中的“不同”:Sentient Sketchbook 用不同格子数量;Mario 场景用代理回放实际触发的机制。[§II-A、§IV-C/E,PDF 第 2、5 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=5)
|
||||
|
||||
**[项目建议]** 换颜色、改种子、移动一段未使用装饰线,都可能改变文件,却不改变玩家体验。候选去重应同时检查结构同构、放行关系与实际回放表现。把棋盘、棋子和箭头整体一起作对称变换,可能只是同一体验的变体;只旋转底盘会改变本游戏的出路,不能按同一种等价变换误删。
|
||||
|
||||
### 4.3 可行与有趣
|
||||
|
||||
**[论文]** 可行性通常由硬约束决定,例如地图是否可通行、脚本是否合法、代理能否完成。部分方法再在可行候选之间比较质量。[§II-B、§IV-J,PDF 第 2、6 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=6)
|
||||
|
||||
**[解读]** 一个代理找到解,只证明在其规则模型与动作定义下存在已找到的完成过程。它没有证明玩家能理解线索,也没有证明行进值得看完。搜索超时不能直接当作无解;把超时当无解会连带扭曲档案覆盖率。
|
||||
|
||||
### 4.4 算法新颖性、算法 surprise 与玩家惊喜
|
||||
|
||||
**[论文]** Novelty 依据与已存在行为的距离;surprise 可以依据当前结果偏离过去种群趋势预测的程度。武器案例用过去两代死亡位置热图作预测,奖励偏离预测的位置分布。[§II-C、§IV-F,PDF 第 3、6 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=6)
|
||||
|
||||
**[解读]** 这里的 surprise 没有测量玩家第一眼的判断。因此,不能声称采用 CSS 就会自动生成“看似棘手,一转就通”的关卡。
|
||||
|
||||
**[项目建议]** 轻巧反差至少需要两条独立证据:结构上确有很短的放行操作;玩家观看开局后确实预期它更难。前者可以由模型验证,后者需要试玩提问或行为观察。两者不要合成一个未经标定的“惊喜分”。
|
||||
|
||||
### 4.5 表达范围与关卡难度曲线
|
||||
|
||||
**[论文]** 表达范围描述生成器能产出哪些样式,特征图可以暴露集中区域、空洞及指标偏置。[§III-C,PDF 第 3–4 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=4)
|
||||
|
||||
**[项目建议]** 档案回答“我们有多少种可用体验”,主线编排回答“玩家接下来应遇到哪种体验”。前者覆盖均匀,不代表后者应平均投放,也不代表玩家的学习负担应逐关线性上升。
|
||||
|
||||
## 5. 算法应怎样理解与选择
|
||||
|
||||
下表是对 §II-C 的简化归纳,详细定义见 [PDF 第 2–3 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=2)。右栏全部属于项目建议,并非论文针对本游戏的结论。
|
||||
|
||||
| 方法 | 论文中的核心机制 | HEX TRAILS 的考虑 |
|
||||
| --- | --- | --- |
|
||||
| MAP-Elites(ME) | 特征分箱,每箱保留质量最好的个体;从档案选择父代继续变化 | 适合做第一版可浏览候选档案;先定义少量有设计意义的坐标 |
|
||||
| ME-NOV | 用新颖性影响父代选择,让搜索偏向较少探索的行为 | 当候选持续挤在相近区域时,再评估是否需要 |
|
||||
| MESB | 按已生成个体的特征分布重新调整箱边界 | 有助处理分布不均;边界变化会影响跨批次统计,应保存版本 |
|
||||
| CNS | 分成可行与不可行种群;可行者追求新颖,不可行者接近可行或同样追求新颖 | 有价值的半成品不能直接入主线,可以放在独立修复池 |
|
||||
| CSS | 可行/不可行分流,可行种群追求偏离预测的行为 | 暂不以此实现人的轻巧反差;两种 surprise 的定义不同 |
|
||||
| CME | 每个特征箱内分别保存可行与不可行种群,兼顾局部质量与修复 | 若花瓣路线稍改即破坏配对或可解性,可考虑保留接近合格的变体 |
|
||||
| NS-LC | 同时奖励行为新颖性和胜过附近候选的质量 | 需要可信的行为距离;不同路线类别不宜随意赋数计算欧氏距离 |
|
||||
| SS-LC | 用偏离预测与局部竞争结合,可再混合 novelty | 没有证据表明它应成为本项目首选,先用可解释基线 |
|
||||
|
||||
**[论文]** 标准 ME 的基本过程是:初始化候选 → 评价质量与特征 → 找到所属箱 → 空箱直接保存,已有候选则只保留更优者 → 从档案抽取父代并变异或交叉 → 继续评价与替换。[§II-C1,PDF 第 2 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=2)
|
||||
|
||||
**[项目建议]** 初版可以先把现有候选按特征分类、筛选、可视化。这能验证特征是否有用,但若没有从档案选父代并持续搜索,应称为“借鉴 QD 的分类候选库”,不要声称已经实现完整 MAP-Elites。
|
||||
|
||||
## 6. 图表、个案和数值到底证明了什么
|
||||
|
||||
| 证据位置 | 实际内容 | 可以借鉴 | 不能推出 |
|
||||
| --- | --- | --- | --- |
|
||||
| 图 1,第 4 页;§IV-C,第 5 页 | 图中展示六个二元特征的 Mario 机制热图;案例正文称完整实验使用八个机制、256 个箱,平均约 100 个箱生成了关卡 | 检查特征依赖与不可达组合;热图用于诊断生成器 | 不能将图中 64 种组合当作正文完整的 256 格档案;不能把约 100 格解释为 100 名玩家或 100 个优质整关 |
|
||||
| 图 2,第 4 页;§IV-B,第 4–5 页 | Talakat 弹幕脚本,采用代理熵、代理风险和子弹分布作特征,以 A* 检查可玩性 | 同一游戏内可以保留运动表现不同的内容 | 三张图不证明玩家满意度或主线节奏;“密集”不自动等于“更难” |
|
||||
| 图 3,第 5 页;§IV-C | Mario 片段按代理回放触发机制分类,局部质量偏向简单且可完成 | 可以按实际放行/行进事件描述关卡,而非只数静态元素 | 没有证明一个参考代理代表所有玩家;片段生成不同于完整战役编排 |
|
||||
| 图 4,第 5 页;§IV-E | Sentient Sketchbook 左侧设计画布、右侧候选建议;从用户草图开始生成 | 让设计师能在明确的初稿基础上挑选变化 | 单张界面图不构成设计效率提升的统一用户实验 |
|
||||
| 图 5,第 6 页;§IV-F | 两种自动生成武器;surprise 使用模拟死亡位置偏离预测 | 评价行为而非仅外观,保持可用约束 | 不能把该 surprise 直接译成玩家的“啊哈体验” |
|
||||
| 表 I,第 5 页 | 横向列出不同应用的算法、发散机制、质量机制、特征定义 | 同一框架下,各品类需要不同的质量和特征 | 没有跨应用可比的“统一质量分”或算法总排名 |
|
||||
|
||||
以上均来自[论文 PDF 第 4–6 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=4)。三个容易误用的数字也需单独记录:
|
||||
|
||||
- 图像/物体案例的 **1000** 是分类网络的类别数,和本项目的 1000 关目标无关(§IV-A,第 4 页)。
|
||||
- Hearthstone 案例用 **200 局游戏**中的生命差来评价卡组,并用费用曲线的均值与方差描述多样性。这是该案例的评估设计,不是本项目每关必须模拟 200 次的标准(§IV-D,第 5 页)。
|
||||
- 脚注比较 Sentient Sketchbook 中“6 个线程各产 1 个建议”和 CNS“1 个线程产 6 个建议”。它说明候选批量复用的机会,不是本论文给出的通用 6 倍运行时间加速结论(第 6 页,脚注 1)。
|
||||
|
||||
## 7. 适用边界与需要主动防范的误读
|
||||
|
||||
**[论文]** 高维行为空间难覆盖;箱太细会稀疏,箱太粗会隐藏差别;作者讨论了潜在空间、Voronoi 分区和仿真代理模型等方向。多风格测试代理被提出用于检查内容是否按预期被体验。[§V,第 7 页](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf#page=7)
|
||||
|
||||
**[解读]** 下列限制尤其影响我们的决策:
|
||||
|
||||
1. **指标依然决定盲点。** 名为 *Fitness-Free Search* 的小节并未取消质量定义;许多算法仍使用约束和局部质量比较。减少对一个全局目标的依赖,不等于算法会自行判断好玩。
|
||||
2. **空箱不全是坏事。** 它可能来自规则不允许的组合、特征互相依赖、分箱不合理,也可能只是搜索不足。应分别标明“确认不可行”“尚未找到”“已有合格候选”。
|
||||
3. **批量效率是方法动机,不能套成固定性能承诺。** 本文没有以同一任务、同一计算预算把全部方法重跑并给出统一胜负;每个关卡的仿真仍可能昂贵。
|
||||
4. **可解释性是部分能力与研究方向。** 作者在 §IV-J 明确指出,所综述案例中还没有项目把解释性作为明确目标来研究;特征图本身不是“设计师理解已被证明提升”。
|
||||
5. **2019 年的横向论述不是今天所有算法的能力上限。** 文中对机器学习生成、构造法或声明式方法多样性控制的概括应放回当年的语境;本条目不据此宣称其他生成方法都无法做到多样化。
|
||||
6. **发表范围没有覆盖移动消除游戏的长期曲线。** 免费试错、连续点击、动作动画、碎片时间、广告节奏、1000 关留存均不是本文验证对象,不能用学术引用替代这些体验研究。
|
||||
|
||||
## 8. 转换为 HEX TRAILS 的制作规则
|
||||
|
||||
以下均为 **[项目建议]**,与[新版关卡设计准则](../level-design-principles-v2.md)衔接。论文提供方法启发,不提供这些配置的验证结果。
|
||||
|
||||
### 8.1 三层评价,避免长路等同于难度
|
||||
|
||||
| 层次 | 初版记录 | 如何使用 |
|
||||
| --- | --- | --- |
|
||||
| 正确性 | 数据合法、正式规则下的清盘解、碰撞与轨道一致性、求解是否触顶 | 不合格候选不进入玩家关卡;未确定单独存放 |
|
||||
| 体验类型 | 实际成功路线长度/弯数/空间形态,主放行方式,主奖励出现阶段 | 进入相应候选档案;用来保持变化 |
|
||||
| 本类质量 | 主爽点兑现、因果可读、运动可跟随、重复操作负担、真人反馈 | 在同类候选中比较,保留回放和评审理由 |
|
||||
|
||||
“长路、低前置负担”是一种值得保存的类型;不能因为操作简单就在统一困难度排名中被淘汰。花瓣轮廓只证明形状存在,仍要检查玩家实际放出的棋子有没有走过构成花瓣的路径。
|
||||
|
||||
### 8.2 先做少量可解释档案,再扩维
|
||||
|
||||
可以先按主放行方式分库,例如直接通行、清挡通行、旋转换路、分阶段组合;每个库先用两个坐标浏览,例如“实际主路径长度带 × 前置动作负担”。路线形态、反差意图、盘面密度等先做筛选标签。具体分界应来自已审核样关分布,当前不固定未经校准的阈值。
|
||||
|
||||
若把所有标签做笛卡尔积,会产生大量没有设计意义或规则上不可达的格子。也不要为了填满图表而制造不符合核心体验的关卡。
|
||||
|
||||
### 8.3 同一几何可以成为不同关卡,但要有不同的体验证据
|
||||
|
||||
花瓣骨架可承载直接巡游、外围清挡后放出主瓣、一转接通内向长路等不同意图。保留变化时应写明:关键棋子、放行条件、成功路径、奖励顺序分别改变了什么。只换配色或旋转截图,不足以证明新增一关的价值。
|
||||
|
||||
反过来,两种外形不同的棋盘也可能具有几乎相同的“全部能点就点、转一次、全部清空”节奏。结构档案和回放摘要应能发现这种重复。
|
||||
|
||||
### 8.4 评价回放要覆盖多种合理操作
|
||||
|
||||
至少区分顺手点击畅通棋子、主动追求长路、优先清挡、尝试旋转等策略。对每种策略分别记录:是否清盘、主长路是否出现、关键反差是否被直接绕过、奖励在何时兑现。策略和样本数量需随验证成本确定,不能从本文借一个固定次数当作充分性保证。
|
||||
|
||||
若正式运行时支持快速点击、输入队列或并行动画,仿真与体验评审要体现相同的规则。输入屏蔽或动画调度造成的耗时,不能直接算成关卡的推理难度。
|
||||
|
||||
### 8.5 候选库与主线编排分别验收
|
||||
|
||||
候选库验收“不同类型中有没有足够好的选择”;主线验收“连续游玩时有没有学习、变化与舒缓”。先维持可用类型库,再从中编排短序列试玩。先前 1000 关方案中的难度数量、长路比例和章节长度仍是待验证假设,不能因为引入 QD 而升级为研究结论。
|
||||
|
||||
## 9. 后续可以直接引用的设计卡
|
||||
|
||||
| 知识卡 ID | 可直接使用的规则 | 验证问题 |
|
||||
| --- | --- | --- |
|
||||
| QD-01 | 正确性、体验类别、本类质量分别记录 | 高难标签是否正在替代“好玩”的判断? |
|
||||
| QD-02 | 按实际回放区分关卡,不能只比较种子与截图 | 两关带来的放行与巡游过程到底哪里不同? |
|
||||
| QD-03 | 在每个体验类型内部保留优秀候选 | 舒缓长路是否被困难度总分挤掉了? |
|
||||
| QD-04 | 反差要有结构证据和玩家预期证据 | 我们测到的是算法偏差,还是人的惊喜? |
|
||||
| QD-05 | 档案空洞先诊断,不急于补齐 | 是搜索不足、指标冲突,还是本来不值得生成? |
|
||||
| QD-06 | 主奖励用多种合理点击顺序验证 | 只有参考解能看到花瓣巡游吗? |
|
||||
| QD-07 | 记录候选来源、变体关系、淘汰原因与指标版本 | 修改评分后,能否解释哪些候选为何消失? |
|
||||
| QD-08 | 内容多样性与连续关卡节奏分别设计 | 单关都合格,连玩十关是否仍然重复? |
|
||||
|
||||
建议首先做一个小规模对照:使用相同候选生成预算,比较“现有单分筛选”和“按体验分类、类内挑选”。由盲评检查核心爽点兑现、可感知差别及可读性,并记录合格数量与人工筛选时间。此实验属于项目验证方案,尚未执行;它比先把完整进化算法搬进工程更能检验 QD 思路是否解决了眼前问题。
|
||||
|
||||
## 10. 来源与待追读范围
|
||||
|
||||
- **全文来源**:[作者 PDF](https://antoniosliapis.com/papers/procedural_content_generation_via_quality_diversity.pdf)、[作者 HTML](https://antoniosliapis.com/articles/pcgqd.php)。两者是同一篇论文的不同载体,不算两项独立研究。
|
||||
- **文献身份核对**:[arXiv 元数据](https://arxiv.org/abs/1907.04053)、[作者文献条目](https://antoniosliapis.com/publications.php?bib=gravina2019pcgqd#gravina2019pcgqd)。
|
||||
- **后续追读候选,未在本次冒充全文读过**:参考文献 [12] MAP-Elites 原始方法、[19] *Intentional Computational Level Design*、[39] *Empowering Quality Diversity in Dungeon Design with Interactive Constrained MAP-Elites*、[49] *Procedural Personas as Critics for Dungeon Generation*。引用其具体实验结论前,应另立条目核读原文。
|
||||
- **检索审计**:[本条目来源记录](../../exa-results/level-design-2026-09-12/paper-qd-sources.json)。本流使用 Exa 搜索 1 次、请求 5 个候选结果;实际全文核读的是 1 篇论文,而不是 5 篇论文。
|
||||
@@ -0,0 +1,80 @@
|
||||
# 补充研究:关卡顺序、玩家熟练度与难度估计
|
||||
|
||||
知识编号:P03–P04 · 更新:2026-09-12 · 标签:`关卡编排` `技能组合` `难度模型` `冷启动` `玩家分群`
|
||||
|
||||
两篇指定论文主要解决“怎样生成”和“怎样保持候选多样性”。本次通过 Exa 另找到两项直接讨论关卡编排、真人难度数据的研究,用来补足千关方案中的排序与验证环节。
|
||||
|
||||
## P03:从解法特征组织关卡序列
|
||||
|
||||
Eric Butler, Erik Andersen, Adam M. Smith, Sumit Gulwani, Zoran Popović. *Automatic Game Progression Design through Analysis of Solution Features*. CHI 2015. DOI: 10.1145/2702123.2702330。
|
||||
|
||||
[作者提供的论文](https://www.ericbutler.net/assets/papers/chi2015_progression.pdf)。本次阅读正文的方法、生成、编排、实验、讨论与结论;下载 10 页 PDF 核对章节页位。此项为补充研究,不与两篇指定论文的逐图精读范围混称。
|
||||
|
||||
### 方法要点
|
||||
|
||||
作者不只记录关卡有哪些机制,还记录机制如何组合。对有程序化解题过程的问题,可用行动序列的 n-gram;对 Refraction 这种有多种摆法的空间谜题,用解法图中的小子图 graphlet 表示“转向器接分流器”等关系。还需要额外的数学关系图,以区分空间连接相同、分数要求不同的题。(PDF p.4–5)
|
||||
|
||||
编排时从多样的关卡库中选下一关,综合玩家接触/完成过的特征、设计者赋予各特征的权重以及当前目标负担。先修关系只形成偏序,不能靠一次拓扑排序就解决节奏:还需控制新概念、熟悉概念组合和练习的出现速度。作者可以重新给关卡打特征标签、重排,而不用重新生成所有布局。(p.5–7)
|
||||
|
||||
**重要前提**:该实验的生成器约束所有可能解具有相同的解法图,所以可用一条参考解提取共有特征。本游戏有旋转和不同释放顺序,尚无这个保证。我们只能明确区分“必经特征”“多策略常见特征”和“作者解独有特征”。(p.5)
|
||||
|
||||
### 实验到底证明了多少
|
||||
|
||||
线上实验共 2,377 名玩家,自动组 1,221 人,人工原版组 1,156 人。中位游玩时间分别为 184 秒、199 秒,所用检验未发现显著差异;完成谜题数中位数为 8 与 10,存在小幅显著差异,但两组题目不同,作者不认为它是理想的投入度比较指标。(p.7–8)
|
||||
|
||||
这支持“该框架经过调整后产生了可比较的短期游玩表现”,**不能写成自动设计已经等效于人工设计,或已证明长期留存、千关完成率更好**。作者明确指出缺少随机顺序对照,甚至不能据此确定编排本身对投入度贡献了多少。(p.8)
|
||||
|
||||
图 4 及讨论揭示了一个与千关特别相关的失败:概念耗尽后,自动系统连续选择非常相近的题,人工序列则更常出现较大的概念跳跃。作者提出减慢新概念消耗、惩罚连续相近题等改进方向,未把它们报告成已验证的最优策略。(p.8–9)
|
||||
|
||||
还需计算制作成本:作者指出,针对具体游戏实现这套系统往往比手工编排更费工;如果目标只是做出一款关卡顺序合理的游戏,是否受益仍不确定。自动化的价值应连同反复调优、重排与后续扩展来评估,不能仅凭“自动”就宣称省工。(p.9)
|
||||
|
||||
### 对本项目的可用建议
|
||||
|
||||
- 用“清挡 → 放行”“清挡 → 转盘 → 巡游”“转过去清理 → 转回来放行”等短组合描述认知内容;单纯记录本关出现过“旋转”不足以区分体验。
|
||||
- 将关卡库与关号解耦,允许同一批关卡重排并比较效果。
|
||||
- 编排器同时限制相邻相似度和新概念跳幅;只追求平滑,会滑向重复。
|
||||
- 保留长路直接放行的舒缓关。本项目的目的包括观看与释放享受,不能照搬 Refraction 每关尽量引入未掌握挑战的约束。
|
||||
|
||||
## P04:用真人与模拟数据校准难度
|
||||
|
||||
Jeppe Theiss Kristensen, Paolo Burelli. *Difficulty Modelling in Mobile Puzzle Games: An Empirical Study on Different Methods to Combine Player Analytics and Simulated Data*. arXiv:2401.17436,2024。
|
||||
|
||||
[作者公开全文](https://arxiv.org/html/2401.17436)。本次重点核读 §3–9(案例、方法、数据、两组实验、讨论和结论);没有复现实验,也未逐篇追读其引用文献。
|
||||
|
||||
### 实际研究范围
|
||||
|
||||
案例为 Tactile Games 的 Lily’s Garden,研究前 500 关。数据采集区间为 2021-06-01 至 2021-12-01,只包含期间开始游戏且玩过至少 200 关的玩家;因此不能用这份样本直接解释首日流失者。(§3、§5.1)
|
||||
|
||||
研究把难度操作化为完成关卡所需的尝试次数,比较随机森林、神经网络、因子分解机,输入包括历史结果、玩家特征、关卡静态特征及代理实际游玩的动态特征。还区分已有关卡数据和新关卡没有真人记录的冷启动场景。(§4–7)
|
||||
|
||||
在此样本中,约前 100 关包含较多教学与容易关,之后平均尝试次数在约 3.2 附近波动,个别难关仍有明显高峰。**这是这个游戏、这批样本的观察值,不是所有解谜游戏应采用的目标。**(§3、图 2)
|
||||
|
||||
### 对生产有用的结果与限制
|
||||
|
||||
1. 新关卡的群体平均预测中,神经网络和随机森林使用代理、玩家与关卡特征组合表现较好;因子分解机加入全部特征则可能因过拟合变差。§6 的个体预测与 §7 的群体平均预测必须分别解读,不能用一句“某算法最好”覆盖所有场景。(§6–8)
|
||||
2. 代理通常比真人强,可能分不开真人眼中的容易与中等关卡。直接把代理当作真人补数据的尝试也没有得到理想结果。(§8.2、§9)
|
||||
3. 对新关卡,预测往往把简单关估高、难关估低,向均值收缩。单个精确预测值容易制造不必要的确定感。(§7)
|
||||
4. 作者仍认为设计者需要亲自玩,才能判断是否有趣、解法是否清楚;建议未来研究按时间窗口验证模型,以更接近真实上线后的预测。(§8.2)
|
||||
|
||||
### 对本项目的可用建议
|
||||
|
||||
本游戏试路和旋转免费,失误不等于重开。直接套用“平均重试 3.2 次”既不匹配规则,也不匹配体验目标。应先记录下列独立指标,再与玩家对难度、疲劳和愉悦的评价对应。
|
||||
|
||||
| 指标 | 解决的问题 | 不能直接推出什么 |
|
||||
| --- | --- | --- |
|
||||
| 首次有效动作前的主动观察时间 | 开局是否找得到入口 | 长时间一定是困难;玩家可能在欣赏图案 |
|
||||
| 无效试路、无收益旋转及连续发生的位置 | 哪处理解或反馈有问题 | 每次尝试都是挫败;试探也可能有趣 |
|
||||
| 关键动作后的新可放行棋子 | 操作的因果回报是否清楚 | 解锁数量越多,质量越高 |
|
||||
| 主动观看时长与输入受阻时长分开 | 长路奖励是否被实现成等待 | 所有动画时间应缩短 |
|
||||
| 自然点击策略下关键路线的曝光 | 核心内容是否经常发生 | 抽样出现率等于全体真人概率 |
|
||||
| 当前关完成后是否愿意继续 | 该段是否产生继续玩的动机 | 单关留存差异全由该关造成 |
|
||||
|
||||
先用人工基准关和简单的可解释分档,再用同熟练度玩家的实际数据校准。不需要一开始训练复杂神经网络。若以后做预测,按关卡版本、模板家族和时间留出测试集,避免同模板近似题泄漏到训练与测试两侧。
|
||||
|
||||
## 两项补充研究对千关方案的共同修正
|
||||
|
||||
“关号越后,结构分越大”不够;“结构分后半程保持不变”也不保证体感稳定。需要同时知道玩家学会了什么、最近见过什么、这关实际兑现什么奖励。
|
||||
|
||||
建议把下一关选择写成可解释的设计流程:先满足已教规则与目标体验,再筛掉连续重复、视觉过载和过量操作,最后从符合当前熟练度的候选中选取。先实现可审阅的离线编排;在线个性化作为有数据后再评估的选项。
|
||||
|
||||
这与[PCG-QD](02-pcgqd.md)的关系是:多样关卡库提供选择范围;编排器决定玩家走哪条内容序列;试玩校准判断这条序列是否真的合适。
|
||||
@@ -0,0 +1,155 @@
|
||||
# 国际相近游戏:关卡机制、内容组织与证据边界
|
||||
|
||||
研究日期:2026-09-12。适用项目:HEX TRAILS。本文是后续制作知识库的一部分,不是对竞品生成器的逆向结论。
|
||||
|
||||
**目前最有用的发现是:同属“点击箭头清空”的游戏,可以把挑战放在完全不同的位置——寻找出路、识别遮挡、颜色分区、时间压力或关后评价。为了做出 1000 关,首先要稳定我们自己的体验,再扩展内容组合;不能把竞品的关数、棋子数或付费卡点直接当作难度曲线。** 这是一条基于以下资料提出的项目建议,不是竞品开发者共同发表的结论。
|
||||
|
||||
本流使用 Exa 进行 13 次搜索,请求 65 个结果位,返回 49 个精确 URL;不同地区的同一商店页包含在这 49 个 URL 中。实际抓取并核读 14 个不同页面的相关正文,直接查看 1 段视频的 16 个时间点,以及 2 张官方宣传截图。没有安装或完整通关这些游戏,也没有读取其关卡数据或源码。来源与检索记录分别见 [international-sources.json](../../exa-results/level-design-2026-09-12/international-sources.json) 和 [international-search-log.json](../../exa-results/level-design-2026-09-12/international-search-log.json)。
|
||||
|
||||
## 1. 证据怎么使用
|
||||
|
||||
| 标签 | 可以支持的结论 | 不能自动支持的结论 |
|
||||
| --- | --- | --- |
|
||||
| 官方文案 | 商店主体、宣传的基本规则、列出的功能 | 实际每关规则、关卡总量核验、人工与程序化占比、真实难度变化 |
|
||||
| 本次视觉观察 | 指定截图或视频时间点里确实可见的状态 | 没有显示的操作、并行输入逻辑、完整规则、整条主线规律 |
|
||||
| 作者体验 | 行业作者报告自己玩到的机制与感受 | 本次亲测、当前全部版本一致、开发团队的意图或内部算法 |
|
||||
| 用户个例 | 某位用户报告的感受或问题,可形成验证假设 | 所有玩家的意见、统计频率、留存或收入因果 |
|
||||
| 项目推论 | 结合证据和本项目目标提出的设计与实验 | 已经验证有效的竞品经验、已证实的 1000 关方案 |
|
||||
|
||||
Exa 抽取的商店页可能来自不同时间的缓存。本文不使用“2 天前更新”之类相对日期推断当前版本,也不把搜索结果中的出版时间当成游戏上线日期。
|
||||
|
||||
## 2. 先解决 Arrow Jam 的同名问题
|
||||
|
||||
只给出“Arrow Jam”不足以唯一定位产品。下面几个产品不能互相借用机制、关数或玩家反馈。
|
||||
|
||||
| 产品身份 | 已核对的主体及唯一标识 | 本次有依据的区别 |
|
||||
| --- | --- | --- |
|
||||
| Arrow Jam! - Tap Puzzle | Grand Games A.Ş.;iOS `6762192889` | 官方明确有限时间、先释放一枚给其他箭头让路,列出 linked arrows、corners、pipes;本次录像也显示倒计时。[商店](https://apps.apple.com/us/app/arrow-jam-tap-puzzle/id6762192889) |
|
||||
| Arrow Jam | PoseidonJoy/POSEIDON TECHNOLOGY LIMITED;Android `com.sp.arrow.jam` | 文案强调指定路径、碰撞、狭窄布局,宣称数百个手作关卡。未实机核验。[商店](https://play.google.com/store/apps/details?id=com.sp.arrow.jam&hl=en) |
|
||||
| Arrow Jam! - Puzzle Game | CyberGame Limited;iOS `6764256696` | 宣称 12 种形状、数百关、无计时,提到圆、心、星形。与 Grand 的有计时版本不同。[商店](https://apps.apple.com/us/app/arrow-jam-puzzle-game/id6764256696) |
|
||||
| Arrows Jam: Tap Escape Puzzle | Ga Mee Global Limited;Android `com.gameeapp.android.app.arrows` | 宣称 1000+ 关、无倒计时。数字是商店声明,尚未核数。[商店](https://play.google.com/store/apps/details?id=com.gameeapp.android.app.arrows&hl=en) |
|
||||
| Arrow Jam Go! Tap Escape | TidalAurum, LLC;iOS `6757224414` | 官网说 7000+,商店正文仍说数百个布局;统计范围与时间不明,不能选择较大数字当成已验证事实。[官网](https://arrowjamgo.com/)、[商店](https://apps.apple.com/us/app/arrow-jam-go-tap-escape/id6757224414) |
|
||||
|
||||
本报告把 **Grand Games 版本**作为有录像可交叉核对的 Arrow Jam 样本,并把其余版本保留为身份索引;这不表示已经确认用户此前说的就是 Grand 版本。后续若提供原始商店链接,可直接收束到对应版本。
|
||||
|
||||
另一个容易混淆的名称是 Unpuzzle。这里研究的是 **KekGames 在 Kongregate 发布的原版**,不是搜索中出现的 Hypercell、包名 `com.taptapgames.unpuzzle` 的同名手游。[原版发布页](https://www.kongregate.com/en/games/kekgames/unpuzzle)
|
||||
|
||||
## 3. 六个样本,分别提供什么设计信息
|
||||
|
||||
| 样本 | 有来源的基本结构 | 与 HEX TRAILS 最相关的内容 | 本次证据强度 |
|
||||
| --- | --- | --- | --- |
|
||||
| Arrow Jam! - Tap Puzzle/Grand | 限时点击释放、阻挡关系,官方列出多种障碍 | 出路发现与连续释放;关内分段与明确挑战标签 | 官方文案+视频抽帧 |
|
||||
| Arrows – Puzzle Escape/Lessmore | 无计时、避免碰撞、提示;大量关卡是官方声明 | 密集折线组成轮廓;可把视觉内容与操作压力分开 | 官方文案+一张宣传截图 |
|
||||
| Arrow Out/Lion Studios Plus | 方向解谜、形状关、缩放和多种道具是官方描述 | 行业体验文章报告颜色分组、星级、章节门槛 | 官方文案+二手体验,部分规则描述不一致 |
|
||||
| Tap Away/Popcore | 单方向离场的 3D 方块,旋转整体从其他角度观察 | 形状本身就是关卡内容,移除过程逐步改变整块结构 | 官方文案+一张宣传截图 |
|
||||
| Traffic Escape!/FOMO | 根据车顶箭头判断路径,按次序移动车辆避开其他车辆 | 让路因果的生活化表达;新增压力机制可能改变舒缓定位 | 官方文案+具体用户个例 |
|
||||
| Unpuzzle/KekGames | 拖走相互拼接的方块,逐块清空 | 允许多种解序的拆解;新规则应保持标识清楚 | 创作者发布页+发行平台说明+用户个例 |
|
||||
|
||||
逐项证据见下文。这个表没有给各游戏打“好玩程度”或“1000 关质量”分数,因为本次证据不足以作这种排名。
|
||||
|
||||
### 3.1 Arrow Jam! - Tap Puzzle:计时与复杂结构是两种不同压力
|
||||
|
||||
Grand 的官方玩法说明把目标写得很清楚:找出路径畅通的箭头,释放它来打开其他箭头的路径,在时间结束前清空。官方同时列出相连箭头、转角、管道等障碍;这些名字不等于本次已验证其完整规则。[App Store,INT-02](https://apps.apple.com/us/app/arrow-jam-tap-puzzle/id6762192889)
|
||||
|
||||
本次在浏览器打开 IOSTouchplayHD 于 2026-06-02 发布的 iOS 录像,开屏可见 Grand 标识,视频描述中的商店链接也指向相同 App ID。以下是抽帧观察记录;不是从字幕生成的实机结论,也不是完整通关记录。[原录像,INT-03](https://www.youtube.com/watch?v=6tObwJPw-JA)
|
||||
|
||||
| 时间点 | 画面中实际可见 | 可以提炼的设计问题 |
|
||||
| --- | --- | --- |
|
||||
| 00:20、00:23、00:26 | “Levels 1–4”标签;从极少箭头到若干彩色折线;顶部约 3 分钟计时器;部分箭头已经离开棋盘范围 | 起步是否先提供很短的成功循环,再增加要观察的线条? |
|
||||
| 00:30、00:33、00:36 | 同一标签下的彩色弯折布局逐步清空,随后出现完成反馈 | 画面复杂度与需要多少关键判断应分别记录。 |
|
||||
| 00:39 | 约 3:00 起始计时;一条外围长折线包住内侧蓝色箭头群 | 外围与内侧可形成清楚的空间层级,但仅凭此帧不能确定释放依赖。 |
|
||||
| 01:00 | 明确“Level 6”;灰色箭头与左侧彩色直箭头;倒计时 2:55 | 教学后的视觉变化可能来自标识或局部规则,需要完整记录交互才能判断。 |
|
||||
| 03:00 | 主线节点 12、13、14,以及更上方的 Hard 标记 | 挑战有显式包装;此画面不支持固定每几关一个难关。 |
|
||||
| 04:00 | 上下两簇箭头,中间幕布显示数字 7 | 关内可以分阶段揭示内容;幕布触发条件本次未完整追踪。 |
|
||||
| 07:00 | 长红色外围折线、内侧绿色箭头群;计时 2:58 | 同一“围绕—内侧”的布局母题可以改变内部结构。两帧相似不等于数据重复。 |
|
||||
| 10:00 | Super Hard 标签、2:46 计时、上下分布的黄色和绿色箭头 | 计时与布局共同出现;标签不是客观难度测量。 |
|
||||
|
||||
这些画面足以证明该样本的计时器、局部空间层级和挑战标签确实存在。**它们不能证明点击缓存、真实并行运动、动态碰撞、安全点击率或第 1000 关结构。** 即使录像看起来清得很快,也无法从少量静帧确定第二次点击何时被引擎接受。
|
||||
|
||||
商店里一位用户说后期图案重复;这是值得做结构去重检查的信号,但没有关号和统计样本,不可写成“Grand 后期大量重复”的事实。[同页用户评价,INT-02](https://apps.apple.com/us/app/arrow-jam-tap-puzzle/id6762192889)
|
||||
|
||||
**迁移建议:** 我们可借鉴清楚的外围/内侧阶段和成功反馈,但 HEX TRAILS 的长路行进本身是回报。若照搬倒计时,玩家可能被迫忽略原本想看的巡游。保留无时间压力主线,单独测试需要快操作的玩法是否成立,更符合[本项目设计准则](../level-design-principles-v2.md)。
|
||||
|
||||
### 3.2 Arrows – Puzzle Escape:形状与密度可以成为独立内容轴
|
||||
|
||||
Lessmore 的官方商店说明为无计时、避免碰撞、可用提示,并宣称数千个手作关卡;制作方官网也列出这一产品。这里的“数千”“手作”“逐渐复杂”均为制作方自述,没有公开工具、制作工时或完整关卡统计。[Google Play,INT-04](https://play.google.com/store/apps/details?id=com.ecffri.arrows&hl=en)、[Lessmore 官网,INT-05](https://lessmore.games/)
|
||||
|
||||
本次直接查看该 Google Play 页面第一张宣传截图:深色折线箭头密集拼出有侧面轮廓与底座的整体图案,上方有三颗心。它说明形状可以由实际棋子构成,轮廓识别与逐步清空可以同时出现。**这只是宣传选样,没有关号,不代表形状关在主线中的比例。** [截图来源页,INT-04](https://play.google.com/store/apps/details?id=com.ecffri.arrows&hl=en)
|
||||
|
||||
**迁移建议:**
|
||||
|
||||
- 给“整体轮廓”和“真实成功行进路线”各自设检查项。我们的花瓣必须由配对轨道、实际行进和整盘构图共同支持,不能只靠空轨装饰。
|
||||
- 把长线条的静态外形、消除动画持续时间、棋子头部实际经过的曲线路程分开。竞品箭头线条很长,不足以证明它提供了 HEX TRAILS 想要的“起步后沿底盘多次转向”。
|
||||
- 先生成“低推理负担+强形状”“中等推理+弱形状”等不同组合,避免把所有花形关放入最高难度档。
|
||||
- 黑白线条减少颜色噪声,但也可能增加密集跟线负担;这种效果需要在我们的六角交织轨道上测试,不能仅从截图判定优劣。
|
||||
|
||||
### 3.3 Arrow Out:降低读图负担与提高通关门槛可以同时发生
|
||||
|
||||
Arrow Out 商店销售商为 Lion Studios Plus LLC,版权行写 Mindstorm Studios 2025。中文文案列出缩放、提示、魔法棒、橡皮擦,并宣称形状关与数千关;其“旋转箭头、移动方块”的表述不能直接视为本次已确认的实机规则。[App Store,INT-06](https://apps.apple.com/us/app/arrow-out/id6754243057?l=zh-Hans-CN)
|
||||
|
||||
白鲸出海 2026-05-22 的体验文章报告了另一组具体观察:线条按箭头方向退出、三次错误失败;用颜色分区降低跟线负担;同时控制箭头数与颜色数;通关星级关联误判次数,章节解锁需要星星。文章还报告第 20 关与第 40 关分别开启特定活动。这里保留为 **作者当时版本的体验报告**,不把这些关号当作当前所有版本的固定规则。[虎嗅转载,INT-07](https://www.huxiu.com/article/4860736.html)
|
||||
|
||||
同一文章把收入变化归因于这套改造,并引用第三方商业数据。本报告没有独立核实其收入,也不采用这种因果结论。尤其不能据此证明“多制造失误才能留住玩家”。
|
||||
|
||||
**迁移建议:** 颜色或线宽可以辅助读图,但先保证不改变我们的规则含义;星级、体力、广告和章节门槛属于另一层进度与商业系统。做 1000 关的第一版质量评估,应测布局本身的观察难度、反差和释放感,不能用重试次数或星级缺口替代。
|
||||
|
||||
**待核实矛盾:** 官方中文文案的“旋转箭头”与文章描述的直线退出是否对应不同功能、版本或翻译,目前无法确定。报告不自行补成一个混合玩法。
|
||||
|
||||
### 3.4 Tap Away:旋转观察、形状清空与旋转换路要区分
|
||||
|
||||
Popcore 的官方说明明确:点方块使其沿单一方向飞走,滑动屏幕旋转整体,从不同角度判断;随着推进,结构与方块形状变化,并有主题、皮肤。第一张宣传截图直接可见立方体堆叠、方向箭头与点击手势。[Google Play,INT-08](https://play.google.com/store/apps/details?id=com.jctswbglsm.SwipeAway&hl=en)
|
||||
|
||||
**迁移建议:** 方块或棋子可以拼成完整的物体,清空时整物逐步分解,这种“整体状态变化”值得借鉴。但 Tap Away 文案中的旋转用于从不同角度观察整个结构;HEX TRAILS 是棋子不动、底盘轨道改变。两种旋转对依赖关系的作用不同,不应共用一个难度计数。
|
||||
|
||||
一个可用的制作卡字段是:“这一操作增加了可见信息,还是实际改变了通行条件?”它能帮助我们识别无效旋转,以及真正的一转放行反差。
|
||||
|
||||
### 3.5 Traffic Escape!:清挡因果直观,新增压力未必增强原有享受
|
||||
|
||||
FOMO 官方说明要求通过车顶箭头查看路径,决定移动车辆次序,避免其他车辆,并宣称后续拥堵更大、更密集。这能支持清挡与出路判断的机制描述,不能支持真实关卡数或车道生成算法。[Google Play,INT-09](https://play.google.com/store/apps/details?id=com.bonnie.trafficescape&hl=en)
|
||||
|
||||
同页 2025 年 3–4 月的三条评论反对新增爆炸卡车或交换车辆:有用户说原本享受从容观察,现在不得不赶时间;其中两人自报已到 6588、17000 关。这些关号未经核验,但可形成一个明确研究问题:**把舒缓拆解增加为计时应急,是否改变了原先吸引这批玩家的体验?** 不能把三条负面评论推广为全部玩家反馈,也不据此认定这些功能总体失败。[同页评论,INT-09](https://play.google.com/store/apps/details?id=com.bonnie.trafficescape&hl=en)
|
||||
|
||||
**迁移建议:** 内容量增长优先改变路线形态、关键让路关系和阶段安排。引入新压力机制前,应能解释它怎样增强长路、反差或整盘释放,而不是仅仅增加失败机会。
|
||||
|
||||
### 3.6 Unpuzzle:多种解序与“轻松但满足”值得作为参照
|
||||
|
||||
KekGames 的原始发布页把目标写为逐块清空,操作为拖动方块拆离;Poki 的发行说明进一步写明有其他方块挡路时不能拖走,并允许多种解法。[Kongregate,INT-10](https://www.kongregate.com/en/games/kekgames/unpuzzle)、[Poki,INT-11](https://poki.com/en/g/unpuzzle)
|
||||
|
||||
原发布页有玩家说“容易但满足”,也有人指出旋转标记与方向标记叠加时不易辨认。这两类评论只能提示体验和可读性问题,不能替代测评样本。[评论所在发布页,INT-10](https://www.kongregate.com/en/games/kekgames/unpuzzle)
|
||||
|
||||
搜索还找到多个站转载“一百五十关、十项附加机制、无失误惩罚”等一人称文案;本次未在原官方商店重新核到,故不将转载次数计为多个独立证据,也不用它证明全体关卡性质。[存档转载线索,INT-18](https://apkpure.com/unpuzzle/com.kekgames.unpuzzle)
|
||||
|
||||
**迁移建议:** HEX TRAILS 成功移除只应减少障碍,玩家可以有多种合理解序。评审重点应是不同自然解序仍能触达巡游和反差,而不是强求唯一解。附加标记或新规则一旦提高识别负担,应能带来对应的体验收益。
|
||||
|
||||
## 4. 可以进入制作知识库的五张设计卡
|
||||
|
||||
以下全部是本项目建议,不能标成竞品已验证方法。
|
||||
|
||||
| 知识卡 | 使用时机 | 需要记录与验证 |
|
||||
| --- | --- | --- |
|
||||
| K1:长路不是难度代理 | 为花瓣、回环、长绕行打分时 | 实际路程、弯数、空间跨度;前置关键动作;玩家是否愿意跟完。不能用长路直接提高推理档。 |
|
||||
| K2:释放关系与几何形状分开制作 | 从几个母题扩为大量关卡时 | 先写“谁放谁”,再写路线与轮廓。相同形状至少允许不同释放关系;相同依赖也可承担不同视觉内容。 |
|
||||
| K3:操作流畅度是关卡可用性的前提 | 验证快点、连续清空和长路动画时 | 点击是否接收、何时启动、阻挡何时重算、是否丢输入;用实际连续操作测试,不能以视频看起来顺畅代替。 |
|
||||
| K4:难关后的舒缓应降低判断量 | 安排波浪式节奏时 | 保留丰富路径与形状,减少前置依赖和必须旋转;不要一律缩为几条短直线。 |
|
||||
| K5:新增内容先增强原有回报 | 考虑计时、幕布、炸弹、星级门槛时 | 写明服务哪项核心体验;若主要增加等待、赶时间或付费需求,单独评估,不纳入布局质量分。 |
|
||||
|
||||
## 5. 对“高质量 1000 关”的直接影响
|
||||
|
||||
不能据现有资料声称某竞品采取固定锯齿难度、每隔多少关给花形、前 500 关手工后 500 关程序生成。更稳妥的方案是把它们转成可测试的设计维度:
|
||||
|
||||
1. **结构内容轴:** 释放依赖、关键门槛数、旋转对通行条件的实际作用、阶段数量。
|
||||
2. **观看内容轴:** 真实行进路程、连续弯绕、整体花形或其他轮廓、清空后的视觉变化。
|
||||
3. **负担轴:** 跟线、跨区寻找阻挡、颜色与标记识别、重复点击、被系统迫使等待。
|
||||
4. **节奏轴:** 首次回报何时出现,中段是否有新机会,最后几枚是否顺畅兑现。
|
||||
5. **多样性轴:** 邻关在以上维度上有何不同;换色、镜像、旋转视觉包装不能自动当成新的体验。
|
||||
|
||||
这些轴可与论文中的任务/空间分离、质量多样性档案对接。竞品提供的是可观察的表达方式与反例;论文提供组织生成和筛选的框架;最终难度边界与编排频率仍由我们的样关、规则回放和真人体验来校准。
|
||||
|
||||
## 6. 排除的伪确定性,以及下一轮怎样补证
|
||||
|
||||
本轮明确排除两类看似直接却证据不足的材料:
|
||||
|
||||
- 一篇承接开发业务的文章给出“前 500 关手工、后面程序化”“每天 15–25 关”等数字,并推测 Lessmore 使用生成工具。文中没有制作方依据,不能当作 Lessmore 的实际生产法;示例代码要求唯一解,也不自然适合我们的多解序拆解规则。[被排除的商业建议,INT-16](https://raijinnstudio.com/blog/minimalist-arrow-puzzle-game-design-guide)
|
||||
- 一个“第 1000 关攻略”搜索结果只列出先清外围、再清中心等通用步骤,缺少可复核的逐棋子次序。本次未验证其嵌入视频,不用它评定第 1000 关,更不把 1000 个网页条目等同于 1000 关研究。[未验证攻略,INT-17](https://arrowspuzzleguide.com/levels/1000)
|
||||
|
||||
后续如需竞品的精确难度曲线,应固定 App ID、版本、平台、存档起点和模式,连续记录早期关卡,再按已知关号抽取中后段;每关保留完整初盘与回放、真实输入、失误、提示使用和动画时长。对于本次仅见宣传截图的形状关,要找到带关号的实际回放。即便得到这些数据,也只能描述该版本的样本曲线;生成算法、动态分配与 AB 实验仍需公开开发者材料或获得授权的数据来确认。
|
||||
@@ -0,0 +1,98 @@
|
||||
# 中文箭头游戏调研:从《一箭又一箭》提取量产与节奏经验
|
||||
|
||||
调研日期:2026-09-12。适用项目:HEX TRAILS。检索工具:Exa。本文是有来源的设计研究;本轮没有安装、实玩这些移动游戏,也没有逐帧核验实机视频。
|
||||
|
||||
最有价值的发现,是《一箭又一箭》开发者已经公开讨论了我们面临的同一个问题:大量关卡怎样持续供给、怎样随玩家熟练程度重新编排。其做法可以支持“生成、评级、排序、反馈分别迭代”的生产方向,但没有公开可直接复用的难度公式,也没有证明固定的 1000 关配比。
|
||||
|
||||
## 1. 先确认研究的是哪个游戏
|
||||
|
||||
| 产品/版本 | 身份依据 | 可确认与不可合并之处 |
|
||||
| --- | --- | --- |
|
||||
| **一箭又一箭,微信小游戏** | [腾讯应用宝官方条目](https://sj.qq.com/appdetail/wx69949b45b793b612),小程序标识 `wx69949b45b793b612`,页面列开发者海南掌趣网络科技有限公司。[2026 年开发者大会实录](https://www.youxituoluo.com/534534.html)由广州畅想互动何毅坤讲述研发历程。 | 官方平台条目与研发分享者的主体名称不同,分别记录,不能擅自解释其代理、控股或发行关系。 |
|
||||
| **一箭又一箭,Google Play App** | [Google Play 官方条目](https://play.google.com/store/apps/details?hl=zh_HK&id=com.cxgame.yjyyjgoo),包名 `com.cxgame.yjyyjgoo`,开发者 CXHD Network Technology Co. Ltd.,关于开发者列广州畅想互动网络科技有限公司。 | 可确认同名产品由该研发主体发布。不能据此认定其关卡、道具、广告、计时与微信版完全同步。 |
|
||||
| **箭了又箭/超级消消,微信、抖音小游戏候选** | [行业报道](https://news.qq.com/rain/a/20260107A06XJ600)将产品归于广州池骋网络;[池骋官网](http://www.cc9527.com/)可确认公司身份,但本轮所读官网没有该产品的详细玩法条目。 | 有媒体关联,尚缺可核验的对应小程序 ID、研发说明与连续实机记录。本篇仅作为市场对照,不能当成《一箭又一箭》的别名。 |
|
||||
| **箭了个箭 - 箭头向前冲,iOS App** | [App Store 官方条目](https://apps.apple.com/cn/app/id6755886795),ID `6755886795`,提供者文龙 刘。检索缓存中亦出现副标题“你聪明你来”。 | 以商店 ID 识别同一条目。其文案描述目标箭头出逃、邻箭头变向等规则,尚未实机核验;不能借相似名称给用户所指游戏补规则。 |
|
||||
|
||||
本轮发现了足以造成错误结论的同名和缓存问题:
|
||||
|
||||
- 搜索将 `wxc485463086fbd9d0` 标为“箭了又箭新”,但[实际抓取页面](https://sj.qq.com/appdetail/wxc485463086fbd9d0)标题已是“挪动物”,故排除为《箭了又箭》的当前身份凭据。
|
||||
- [TapTap 的“箭了又箭”条目](https://www.taptap.cn/app/798583)和 [App Store ID 6756483139](https://apps.apple.com/cn/app/%E7%AE%AD%E4%BA%86%E5%8F%88%E7%AE%AD-%E8%B6%85%E7%BA%A7%E6%B6%88%E6%B6%88%E7%8E%8B/id6756483139)介绍的是冲刺、躲避障碍;后者提供者为盟 吉。没有证据可将它们并入池骋的箭头消除小游戏,故不用于分析其关卡逻辑。
|
||||
- 复刻教程的网格尺寸、DAG 生成器、毫秒耗时,仅属于作者的复刻实现,不是原游戏的内部实现。下载站或聚合站的泛化玩法说明也不进入核心证据。
|
||||
|
||||
## 2. 《一箭又一箭》:开发者实际披露了什么
|
||||
|
||||
核心来源是 2026 年 5 月 27 日微信小游戏开发者大会上的何毅坤分享,全文核读了[游戏陀螺实录](https://www.youxituoluo.com/534534.html)、[参会者 ZRONG 实录](https://blog.zengrong.net/post/one-arrow-after-another-combo-innovation/)及[游戏日报实录](https://news.yxrb.net/2026/0528/7007.html)。三篇均来自**同一场演讲**,只算一个开发者经验来源;没有取得原始实验数据或独立复现。下列“开发者披露”均是演讲转录中的自述。
|
||||
|
||||
### 2.1 规模问题确实包含“内容消耗速度”
|
||||
|
||||
开发者称平均用户每日通过约 30–40 关,核心用户可能达到 200–300 关。这是该团队报告的产品数据,未附统计窗口、样本定义或分布,不能套用为 HEX TRAILS 的日均目标。[来源](https://www.youxituoluo.com/534534.html)
|
||||
|
||||
**对我们的推论:**1000 关库存能维持多久,要同时看单关体验和用户的内容消耗。按上述自述数字进行简单情景计算,1000 关对应约 25–33 个活跃日,或约 3–5 个高强度活跃日;这不是本项目的留存预测,却提示“达到 1000”与“持续有内容”需要两套验收。
|
||||
|
||||
### 2.2 难度排序需要随熟练程度改变
|
||||
|
||||
开发者称早期采用简单、中等、困难循环;老玩家后来反馈越来越简单,团队认为主要原因是熟练程度提高。随后在后段提高困难关出现频率,并在多次 A/B 试验中把难度分级从 3 档扩展到 5 档。[来源](https://blog.zengrong.net/post/one-arrow-after-another-combo-innovation/)
|
||||
|
||||
**对我们的推论:**相同结构的关卡,对第 20 关玩家和第 700 关玩家未必具有相同体感。我们的分级应同时记录结构负担和玩家阶段;舒缓关也应保留新的路线或漂亮的兑现方式,以免只剩熟练操作。这里没有披露“每几关一个难关”、难度阈值、评分系数或通关率目标,因此先前方案中的具体配额仍只是待测假设。
|
||||
|
||||
### 2.3 AI 参与了一整套制作工具与调优工作
|
||||
|
||||
演讲将评分算法、生成算法、编辑器、关卡排序及难度节奏调整都列为 AI 参与完成的工作;并说重排涉及大量关卡。没有公开代码、模型、提示词、数据格式、自动化边界,无法判断是运行时模型直接出图、AI 编写程序,还是二者结合。[来源](https://news.yxrb.net/2026/0528/7007.html)
|
||||
|
||||
**对我们的推论:**最可迁移的是工具链分工:生成器产候选,验证器保证规则,评级系统表征负担,编排器选择顺序,策划根据反馈改目标。不能把“使用 AI”当成关卡质量凭证,也不能把本项目拟议的质量多样性搜索说成该产品实际用了 MAP-Elites。
|
||||
|
||||
### 2.4 特殊机制以低频出现维护新鲜感
|
||||
|
||||
开发者说明彩色箭头额外消除、吃豆人灵感、巨大箭头、冲刺连击等变化,并称新机制平均每天只让用户遇到 1–2 次,以特殊或奖励关形式出现;巨大箭头的目标之一是带来明显的视觉变化,而不显著增加难度。[来源](https://www.youxituoluo.com/534534.html)
|
||||
|
||||
**对我们的推论:**“新鲜”可以来自视觉尺度、放行方式和回报变化,不必不断增加规则。但必须区分我们的两种内容:长路与轻巧反差是日常核心体验,应经常兑现;花瓣、编织、螺旋属于原有规则下的空间语言,也可以成为常见路线家族。真正改变规则的新机关,才更适合先按特殊关低频试验。不能机械地把长路关也降为每天一两次。
|
||||
|
||||
### 2.5 连击是正反馈目标,是否并行动画仍未知
|
||||
|
||||
演讲明确说连击机制来自用户希望消除更爽快的反馈,并描述利用上下线槽形成进度反馈。它没有说明同时在途棋子的数量、动画是否串行、是否缓存点击、碰撞状态何时提交。[来源](https://blog.zengrong.net/post/one-arrow-after-another-combo-innovation/)
|
||||
|
||||
**对我们的推论:**关卡制作和交互验证必须联合进行:同一盘在“一次看完一枚”的玩法下和快速连续点出的玩法下,奖励密度不同。我们应记录有效快速点击接收率、最大在途数、每段可连续释放的数量、长路是否被其他运动遮蔽。不能从竞品提到连击直接推出其实现了真正并行,更不能因此取消本项目用户要求的快速点击。
|
||||
|
||||
### 2.6 计时调节与关卡结构是两类变量
|
||||
|
||||
开发者自述通过动态时间限制适配不同熟练度,追求临近截止时通过的体验,并称测试改善了留存和商业表现。转录版本对商业指标出现 ARPU 与 IPU 的差异;本轮没有核实演讲幻灯片与原始口径,因此不报告提升百分比,也不把具体商业指标作为可靠结论。[游戏陀螺](https://www.youxituoluo.com/534534.html)、[ZRONG](https://blog.zengrong.net/post/one-arrow-after-another-combo-innovation/)
|
||||
|
||||
**对我们的推论:**同一空间谜题可以因时限变成不同的压力体验,所以难度数据必须区分结构、识别负担和外部压力。本项目现行方向强调完整观看长路、免费试路,暂无理由直接引入倒计时。先验证本项目的巡游与反差是否成立;若以后研究计时模式,应作为另一个明确的体验目标。
|
||||
|
||||
### 2.7 反馈解释“为什么”,不能只看流失数
|
||||
|
||||
演讲把内置问卷、游戏社群意见列为迭代输入,用来解释用户为什么无聊、为什么不继续,而不是只根据异常指标增加内容。[来源](https://news.yxrb.net/2026/0528/7007.html)
|
||||
|
||||
**对我们的推论:**试玩记录应把“没看到长路”“长路好看但接连点击不响应”“依赖看不懂”“已经熟练所以无聊”分开。这些原因对应路线、输入、可读性、排序四种不同修正,不能都归为难度偏高或偏低。
|
||||
|
||||
## 3. 中文同类的差异与可迁移范围
|
||||
|
||||
| 对照对象 | 来源能支持的设计信息 | 对 HEX TRAILS 的价值与边界 |
|
||||
| --- | --- | --- |
|
||||
| 一箭又一箭,Google Play 版 | 官方文案描述前方畅通时点击放出,另有黑洞、大箭头、水管传送转向等机关;强调消除音效和流畅动画。[商店](https://play.google.com/store/apps/details?hl=zh_HK&id=com.cxgame.yjyyjgoo) | 支持研究“沿路运动本身如何成为奖励”和“机关如何改变放行方式”。具体运动轨迹、连锁细节、三星规则尚未亲测;不能推定它和 HEX TRAILS 的固定轨道配对、底盘旋转相同。 |
|
||||
| 箭了又箭/超级消消,小游戏候选 | 行业报道描述长短线条互相阻挡、依次拆出、碰撞回弹、失误次数与时限;提及形状、色彩、动物外观变体。[报道](https://news.qq.com/rain/a/20260107A06XJ600) | 值得对照的维度是从拥挤到清空、阻挡因果、视觉辨识与外部压力。该报道没有足够的关卡样本,不能据此重建前 1000 关曲线或推出图案关频率。 |
|
||||
| 箭了个箭,iOS ID 6755886795 | 商店文案宣称朝向移动后会改变相邻箭头朝向,并有目标出口、障碍与传送门;更新说明把动画、跟手和消除反馈列为改进点。[商店](https://apps.apple.com/cn/app/id6755886795) | 若实机证实邻箭头变向,则属于“操作改变未来状态”的不同规则族,不宜照搬单调清挡的依赖模型。现阶段仅列为待测反例;“千关挑战”仍是商店宣称,不是 1000 关质量审计。 |
|
||||
|
||||
**一个需要纠正的行业术语:**报道把碰撞回弹、不易因误操作永久卡死称为“唯一解”。这并不严谨。有解、成功消除不会新增阻挡、只有一个合法完整消除序列,是三个不同命题。若 A、B 互不阻挡,先 A 后 B 与先 B 后 A 就已构成不同消除顺序。知识库统一使用“可解性”“成功移除的单调性”“解序列数量”,不沿用该报道的“唯一解”说法。[被核对的报道](https://news.qq.com/rain/a/20260107A06XJ600)
|
||||
|
||||
## 4. 长路、反差、花瓣路线应该怎样吸收这些经验
|
||||
|
||||
以下是本项目的设计推导,不是竞品公开配方。
|
||||
|
||||
| 本项目目标 | 建议进入制作卡的变量 | 候选验证方式 |
|
||||
| --- | --- | --- |
|
||||
| 长路巡游 | 实际成功路径长度、转弯与空间展开;首次放出位置;一路行进是否值得跟随 | 同时播放独立观赏与快速连点两种回放,检查关键长路能否被看见。不能用棋盘线条总长度替代。 |
|
||||
| 轻巧反差 | 第一眼预期、目标箭头朝向、放行前置动作数、回报等待距离 | 使用朝内起步但能离场、清一枚放长路、转一次接出口等样关,询问预期与实际落差。巨大箭头的视觉反差只是相邻经验,不证明旋转反差已经有效。 |
|
||||
| 花瓣及图形路线 | 外轮廓可辨认性、实际使用的花瓣路径、与上一关的结构差异 | 区分“整体轮廓像花”和“棋子真的走出花瓣轨迹”;给相同轮廓配置不同清挡或旋转节奏,剔除只换皮的近重复。 |
|
||||
| 关内释放节奏 | 开局可动数、一次动作新增可动数、连续可释放数量、最后几枚的表演内容 | 制作“宽开局—短清挡—长路兑现”等明确结构,再看真实选择是否仍能碰到设计的回报。 |
|
||||
| 1000 关难度曲线 | 玩家熟练阶段、结构负担、识别负担、操作和动画时长、内容新颖性 | 比较固定三拍循环与按熟练阶段调整的序列;观察继续游玩、疲劳、误点解释和回报识别,不只优化总通关数。 |
|
||||
|
||||
推荐先做成 **三组可比样关**:同结构换空间形态、同形态换依赖结构、同奖励换放行门槛。每组控制其他变量,分别研究玩家究竟是在享受路线、享受解锁,还是因拥挤和输入受阻而耗时。这个实验设计比直接借用竞品宣传的“越往后越难”更能指导本项目量产。
|
||||
|
||||
## 5. 本轮证据边界与下一次最值钱的补充
|
||||
|
||||
本流共运行 9 次 Exa 搜索,请求 50 个候选结果,返回 35 个不同的原始 URL;实际完成 11 个页面的正文阅读,另有 1 个 URL 抓取超时后以同一 App 的完整商店 URL 读到正文。候选数不等于阅读数,三个演讲转录也不等于三个独立产品实验。完整[检索日志](../../exa-results/level-design-2026-09-12/chinese-search-log.json)及[来源台账](../../exa-results/level-design-2026-09-12/chinese-sources.json)保留了排除项。
|
||||
|
||||
本轮未实玩移动版本,未亲眼核验完整实机视频或演讲配图;网页尝试受到连接和子任务浏览器能力限制。因此没有给出关号、运动时长、并行上限、花形出现频率等观察数据。正文中仅将商店文案视作产品方宣称,将演讲视作开发者经验,将行业报道视作二手信息。
|
||||
|
||||
后续现场样本应优先补齐:确认用户实际玩到的小程序身份与版本;各取早期、熟练后和特殊关的连续游玩记录;对同盘执行慢点、快速连点、解锁中连点,记录是否丢输入及奖励曝光;核验形状关到底改变了布局轮廓、实际路线还是规则。对样本之外的第 1000 关仍保持未知,直到得到对应数据。
|
||||
@@ -0,0 +1,71 @@
|
||||
# HEX TRAILS 关卡设计知识库
|
||||
|
||||
建立日期:2026-09-12。用途:为后续样关、生成器、关卡筛选、难度编排及试玩提供可追溯的设计依据。阅读入口:[关卡设计调研报告](../level-design-research-report.md)。
|
||||
|
||||
本库已完成两篇指定论文的全文精读,并通过 Exa 补充相关研究、产品官方资料、开发者分享和一份竞品录像的定点观察。论文、公开宣传、实际观察与项目方案分别标注,不能相互替代。
|
||||
|
||||
## 按设计问题查找
|
||||
|
||||
| 现在要解决的问题 | 首选条目 | 可直接取用的内容 |
|
||||
| --- | --- | --- |
|
||||
| 怎样把“清挡后放出长路”变成生成输入? | [P01:Mission 与 space](01-mission-space.md) | 任务关系、空间草图、中间表示、人工介入点 |
|
||||
| 怎样保住漂亮花瓣,局部修改棋子与难度? | [P01:制作卡 B/C](01-mission-space.md) | 两路输入、固定项与可变项、局部修改后的重验证 |
|
||||
| 怎样避免 1000 关只是同一种题换种子? | [P02:PCG-QD](02-pcgqd.md) | 行为特征、类内质量、多样候选档案、近重复检查 |
|
||||
| 为什么不能拿长路长度直接当难度? | [P02](02-pcgqd.md)、[P04](03-progression-and-difficulty.md) | 质量/类型/难度分离,结构数据与真人表现校准 |
|
||||
| 怎样安排新概念、旧概念组合和复习? | [P03:解法特征与编排](03-progression-and-difficulty.md) | 技能组合、局部差异、关卡库与顺序解耦 |
|
||||
| 老玩家觉得越来越简单,该改什么? | [中文竞品研究](05-chinese-comparators.md) | 《一箭又一箭》开发者的分档、重排与反馈经验 |
|
||||
| Arrow Jam 到底是哪一种规则? | [海外竞品研究](04-international-comparators.md) | 发行商/商店 ID 消歧,计时与非计时版本分开 |
|
||||
| 图案、奖励和机关应如何安排频率? | [中文竞品研究](05-chinese-comparators.md)、[总报告](../level-design-research-report.md) | 核心体验、空间语言、特殊规则三者分开安排 |
|
||||
| 快速连点会不会改变“好关卡”的判断? | [中文竞品研究](05-chinese-comparators.md)、[总报告](../level-design-research-report.md) | 输入响应、实际回放、奖励可见性、规则版本 |
|
||||
|
||||
## 证据标签与使用规则
|
||||
|
||||
| 标签 | 可用于什么 | 使用时保留的边界 |
|
||||
| --- | --- | --- |
|
||||
| 论文方法 | 生成器架构、评价与实验设计 | 方法提出、案例演示、对照实验分别写;保留前提 |
|
||||
| 论文实验 | 支持在对应任务、样本、指标下的结论 | 不跨品类套用数值,不把无显著差异写成等效 |
|
||||
| 开发者自述 | 了解原团队的设计意图与工作流程 | 转录可能有误;无原始数据时不作独立效果保证 |
|
||||
| 官方产品说明 | 确认产品身份与其宣称的规则/内容 | “千关”“手工”“逐渐变难”不等于已审计质量 |
|
||||
| 录像观察 | 描述该版本、时间点可见的行为与布局 | 未看到的不补写;单次录像不能恢复整条曲线 |
|
||||
| 二手分析 | 提供待核查线索和有来源的作者体验 | 不冒充开发者算法或本轮亲测 |
|
||||
| 项目建议 | 转换成样关意图、工具要求、实验问题 | 标明待验证;不因引用论文就升级为既定准则 |
|
||||
|
||||
同一论文的 PDF 与 HTML、同一演讲的三篇转载、同一 App 的多地区商店链接,不算独立证据。研究中的 novelty/surprise 与玩家的“新鲜/惊喜”不是天然等价指标。
|
||||
|
||||
## 后续制作时的最小知识使用流程
|
||||
|
||||
1. 先读[现行关卡设计准则](../level-design-principles-v2.md),明确该关承诺的主体验。
|
||||
2. 从本库选一至两张相关设计卡,写出对本关的具体约束,避免堆砌所有指标。
|
||||
3. 制作并在正式规则下回放;记录成功路径、放行关系、替代顺序与输入调度。
|
||||
4. 给候选标体验类别、结构负担、评审状态和来源,不直接用单总分决定取舍。
|
||||
5. 用连续试玩决定关号与相邻关,保留版本;必要时重排而不重做布局。
|
||||
|
||||
## 建议的关卡知识记录模板
|
||||
|
||||
```yaml
|
||||
levelId: 稳定关卡标识,不等于当前关号
|
||||
rulesVersion: 规则与输入调度版本
|
||||
designIntent: 玩家应该获得的具体体验
|
||||
sourceCards: [P01-B, QD-06]
|
||||
primaryPiece: 关键棋子标识
|
||||
fixedConstraints: 需要保留的路线/位置/放行条件
|
||||
releasePattern: 直接放行/清挡/旋转/组合阶段
|
||||
shapeFamily: 花瓣/环绕/螺旋/其他
|
||||
observedTrace: 实际成功回放与逐棋子路径数据位置
|
||||
alternativePolicies: 测过哪些合理点击和旋转策略
|
||||
rewardExposure: 哪些策略中实际出现主奖励;附样本量
|
||||
difficultyEvidence: 结构估计/设计者比较/玩家样本,分别填写
|
||||
duplicateFamily: 同骨架与近似体验家族
|
||||
reviewStatus: 待定/待修改/已验收/淘汰
|
||||
reviewReason: 具体原因,不能只有分数
|
||||
campaignPlacementVersion: 编排序列版本
|
||||
```
|
||||
|
||||
这只是制作记录建议,尚未接入游戏数据格式。引用知识卡表示采用了一个设计思路,不能替代本关验证。
|
||||
|
||||
## 来源与维护
|
||||
|
||||
- [检索与来源台账入口](../../exa-results/level-design-2026-09-12/README.md):保留 URL、身份、阅读范围、证据类型与排除理由。
|
||||
- [1000 关初步方案](../1000-level-production-plan.md):配额、分档及章节数仍为试验假设;本次研究没有确认其精确数值。
|
||||
- 后续新增条目需记录日期、来源、阅读范围、支持的具体命题、限制及对本项目的推导。
|
||||
- 玩家验证推翻建议时,保留旧建议和修正原因;不要反过来修改文献结论以迎合实现。
|
||||
@@ -0,0 +1,191 @@
|
||||
# HEX TRAILS 新版关卡设计准则
|
||||
|
||||
准则版本:v2 · 2026-09-10\
|
||||
状态:新一轮关卡制作与评审基准;已据此制作 [v0.4 的 20 关体验版](v0.4-experience-review.md)及 [v0.5 千关首版](v0.5-production-report.md)。验收范围与例外以各版实际报告为准,真人长线体验仍待试玩。\
|
||||
适用范围:主线关卡设计、样关制作、候选筛选、节奏编排与试玩评审。
|
||||
|
||||
本文基于本轮玩法讨论,以 v0.1 的长绕行、旋转换路和逐层让路结构为参照。准则版本不等于游戏中的布局版本;v0.4 是新增的独立体验版本,原有三版关卡与存档保持原状。
|
||||
|
||||
后续设计意图以本文为准;[现行玩法方向](gameplay-direction.md)和[技术说明](level-design.md)中的 v0.3 制作门槛用于解释现有实现,不能直接套用为新版目标。新准则涉及的筛选变更,须在制作样关时同步落实到生成器、测试与报告,不能仅凭本文宣称现有关卡已经符合。
|
||||
|
||||
## 1. 核心体验
|
||||
|
||||
**让玩家亲手放出棋子,看着它沿弯弯绕绕的长路径顺畅离场;也让看起来很难出去的棋子,通过一个简单动作就轻松消除。**
|
||||
|
||||
玩法同时提供过程享受和操作成就:棋子一路巡游本身值得观看;清挡或转盘之后把它放出来,又让玩家感到自己的操作很有收获。
|
||||
|
||||
箭头与路径的分工是玩法特色:**箭头决定起步方向,路径决定后续转向和最终出口。** 朝内不等于出不去,靠近边缘不等于必然好走。底盘旋转时,棋子的位置与箭头保持不动,轨道变化产生新的出路。
|
||||
|
||||
关卡设计先确定玩家将享受到什么,再安排达成它所需的观察和操作。难度、规模、弯轨比例与操作量是制作工具,不是核心体验的替代品。
|
||||
|
||||
## 2. 四项核心爽点
|
||||
|
||||
### 2.1 长路巡游:一次点击,享受一整段弯绕离场
|
||||
|
||||
玩家启动棋子,目光跟着它连续转弯、穿过交织轨道、绕到另一侧,最后开出棋盘。运动过程本身就是奖励,即使路线一眼可解,也成立。
|
||||
|
||||
制作要求:
|
||||
|
||||
- 设计实际成功离场时会走过的长绕行路线,关注连续转向、空间展开和完整的运动过程。
|
||||
- 可以让长路开局就畅通,也可以通过清挡或旋转释放。长路不必先经过困难,才有观看价值。
|
||||
- 路线长度、转弯数量和空间形态共同组织观感;大量互不相关的单弯消除不能替代一条完整的长绕行。
|
||||
- 动画应连贯、可跟随,让转弯和穿行充分呈现。完整行进是内容,不能预先视为应压缩的等待。
|
||||
- 速度与节奏通过实际播放调整;不以慢放、重复兜圈或额外停顿人为补足长路体验。
|
||||
|
||||
评审问题:**点下这枚棋子后,是否有一段让人愿意跟着看完的行进过程?**
|
||||
|
||||
### 2.2 轻巧解难的反差:看起来棘手,解决起来很轻巧
|
||||
|
||||
先让棋子的朝向和位置形成“它怎么出去”的直觉,再让一个简单、可理解的动作打开出路。
|
||||
|
||||
典型结构:一枚箭头朝内的棋子看起来不容易离场;旋转一次底盘后,箭头和棋子都没动,底下却接上向外的路线;随后点击,棋子顺畅离场。这里“一次旋转放行”指旋转建立离场条件,仍由玩家点击启动,不新增自动消除规则。
|
||||
|
||||
制作要求:
|
||||
|
||||
- 表面困难感来自箭头、位置、轨道和阻挡的组合;不靠藏线、模糊交叉或未教规则误导玩家。
|
||||
- 解法保持轻巧,典型为一次旋转,或先移走一枚明显的挡路棋子,再点击目标。
|
||||
- 出路打开后及时兑现,不再叠加多层阻挡,破坏“原来这么简单”的回报。
|
||||
- 放行后的路线可长可短:短路突出轻巧,长绕行叠加巡游享受。
|
||||
- 反差也可以由路径本身产生:朝内起步,沿轨道转向后直接离场,不要求每次都附带旋转。
|
||||
|
||||
评审问题:**玩家第一眼预计它有多难?实际需要多简单的动作?前后差异能否清楚感受到?**
|
||||
|
||||
### 2.3 清挡与换路的发现:我的操作把后面的路放出来了
|
||||
|
||||
棋子既是待释放对象,也可能为其他棋子占着空间。移走它,或改变底盘朝向,会打开新的路线。
|
||||
|
||||
制作要求:
|
||||
|
||||
- 让关键操作与新机会形成可辨认的因果,例如移走 A 后 B 通行,或转盘后内侧棋子接上出口。
|
||||
- 允许短直出棋子承担让路、开局入口和即时反馈的作用,不按自身转弯少判定其价值低。
|
||||
- 旋转应贯穿主线,并与占用变化结合;可使用“清一批再转”“转过去清挡再转回来”等结构。
|
||||
- 避免所有旋转关都重复“清完能点的,随便转一下再清完”的同一种节奏。
|
||||
- 成功移除只减少障碍,不破坏其他路线。解谜内容应来自发现关系和换路机会,不依赖合法消除后不可逆的死局。
|
||||
|
||||
评审问题:**哪一步改变了谁的出路?玩家能否看见、预判或在操作后理解这一变化?**
|
||||
|
||||
### 2.4 整盘逐步释放:越解越通,最终清空
|
||||
|
||||
单枚巡游提供局部奖励,整盘从交织受阻到逐渐放行提供持续满足。
|
||||
|
||||
制作要求:
|
||||
|
||||
- 给出可进入的开局,再通过清理和换路展开局面。
|
||||
- 组织局部阶段,例如外围让路、中央放行、旋转换路、长轨收尾;并非每关必须包含全部阶段。
|
||||
- 把长路和轻巧反差分布在过程中,不让前面大量操作都只是等待最后的奖励。
|
||||
- 收尾可以轻松而漂亮。最后几枚既可以承担长路巡游,也可以接连顺畅离场。
|
||||
- 增加棋子时,明确增加了什么体验;不能只延长重复点击。
|
||||
|
||||
评审问题:**从开局到结束,玩家是否不断获得新机会,并感到棋盘确实被自己逐步解开?**
|
||||
|
||||
## 3. 爽点之间的关系
|
||||
|
||||
| 组合 | 关卡表达 |
|
||||
| --- | --- |
|
||||
| 纯长路巡游 | 出口已经畅通,直接启动一段漂亮的长绕行,适合展示与舒缓。 |
|
||||
| 轻巧反差 | 朝内棋子转一下就能出去,实际解法很简单。 |
|
||||
| 清挡后巡游 | 短出口先让路,后面的长轨棋子获得释放。 |
|
||||
| 旋转、反差与巡游 | 看似难出的棋子,一转接通长路线,随后完整绕行离场。 |
|
||||
| 多阶段整盘释放 | 清挡、换路、长路巡游交替出现,最后清空。 |
|
||||
|
||||
每关应明确主爽点和关键棋子,不要求每关塞满全部四项。长路巡游与轻巧反差应成为主线反复出现的内容,不能只放在少数展示关;具体频率通过样关和试玩校准,暂不规定未经验证的每 10/20 关配额。
|
||||
|
||||
允许零旋转关直接提供长路巡游或路径反差,无需逐关豁免。与此同时,旋转必须保持主线核心操作的地位,不能长期退化成小棋盘中的偶尔点缀。审核时同时查看旋转频率与作用是否重复,而不是仅检查最少旋转数大于零。
|
||||
|
||||
## 4. 以 v0.1 为参照,纠正后续版本的偏移
|
||||
|
||||
三版在当前引擎下的参考解回放得到以下结构对照。这些是路径与解法数据,不是玩家满意度数据。
|
||||
|
||||
| 指标 | v0.1 | v0.2 | v0.3 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 必须旋转的关卡 | 24/24 | 16/48 | 16/48 |
|
||||
| 成功消除经过弯道的比例 | 56.2% | 7.0% | 75.1% |
|
||||
| 每条弯轨成功路径平均转弯 | 3.75 次 | 1.45 次 | 1.25 次 |
|
||||
| 单条成功路径最多转弯 | 16 次 | 4 次 | 4 次 |
|
||||
|
||||
v0.1 第 24 关的参考解先消除七枚直出棋子,后段包含 12、13、14、15 次转弯的成功路径。它说明短出口、逐层让路、旋转换路和长绕行可以组成完整的释放过程。相关案例与来源见 [v0.1 设计理念](v0.1-design-philosophy.md)及[归档布局](../levels/versions/v0.1.json)。
|
||||
|
||||
新版继承长绕行、解锁关系和旋转阶段,不机械复制原版的扣步压力、线性评分排序或教学缺点。尤其不能将“弯轨占比更高”视为长路体验已经恢复,也不能将原版最多 16 弯变成所有关卡必须追求的指标。
|
||||
|
||||
## 5. 难度、教学与节奏
|
||||
|
||||
### 表面困难与实际困难分开设计
|
||||
|
||||
“看起来难,轻松放出”是主动追求的内容。不要为了让布局显得有挑战,就同时加深依赖、延长试探或减少所有出口。
|
||||
|
||||
长路径增加观看内容和潜在跟线负担,但可以没有解锁门槛;短路径也可能承担复杂依赖。分别记录观看内容、推理要求和操作量,不能仅按弯数把一关定成困难。
|
||||
|
||||
### 教学要让玩家尽早尝到特色
|
||||
|
||||
前期需形成以下学习闭环,具体关号待样关编排:
|
||||
|
||||
1. 点击棋子,体验箭头起步、沿轨转向和离场。
|
||||
2. 在低阻挡条件下完整观看一段长绕行,不把长路全部推迟到高难关。
|
||||
3. 展示朝内箭头也能沿轨出盘,并用简单旋转制造一次轻巧反差。
|
||||
4. 用清楚的 A 挡 B 关系,展示短出口如何释放后续路线。
|
||||
5. 再组合清挡、交叉跟线与旋转;交叉不换轨须由实际路径清楚展示。
|
||||
|
||||
教学关一次突出一个主要理解点。玩家应亲手操作并看到回报,文字说明不能代替关卡表达。
|
||||
|
||||
### 舒缓不等于路线短,高潮不等于很难
|
||||
|
||||
- 舒缓关可减少前置阻挡,让长轨棋子更容易放出。
|
||||
- 挑战关可增加少量清晰的让路与旋转关系,完成后及时兑现巡游或反差。
|
||||
- 难关后降低判断负担,保留丰富的运动内容和成功反馈。
|
||||
- 棋盘大小与节奏角色不固定绑定;大盘可以一转放行,小盘也能呈现长绕行。
|
||||
- 六拍可作为编排参考,不固定每拍解法,也不预设首个尖峰必须位于某一关。
|
||||
|
||||
## 6. 每关制作卡
|
||||
|
||||
候选入库时填写下表;先用文字说明设计意图,再用结构数据与实际回放核对。
|
||||
|
||||
| 字段 | 必须说明的内容 |
|
||||
| --- | --- |
|
||||
| 主爽点 | 本关主要提供哪一种体验,关键棋子是谁。 |
|
||||
| 第一眼预期 | 玩家预计哪些棋子好出、哪些难出;反差关尤需说明。 |
|
||||
| 关键动作 | 直接点击、清挡、一次旋转,或一段短组合。 |
|
||||
| 实际回报 | 哪枚棋子被放行,怎样行进,在哪一步兑现。 |
|
||||
| 长路内容 | 实际成功路径的格步骤数、转弯数和空间形态;不能只统计空格装饰线。 |
|
||||
| 反差内容 | 改变前后谁的出路发生变化,实际前置动作有多少。 |
|
||||
| 阶段与收尾 | 开局入口、中段变化、最后几枚分别承担什么。 |
|
||||
| 主要负担 | 跟线、识别阻挡、预判旋转,还是重复操作;哪些可减轻。 |
|
||||
| 与相邻关的差异 | 路线形态、放行方式、依赖关系或旋转节奏有什么变化。 |
|
||||
|
||||
示例:主爽点为轻巧反差叠加长路巡游;目标是一枚朝内棋子;旋转一次后接上无阻挡的弯绕长路,点击即可完整离场;其余棋子提供容易理解的入口和收尾。此例是制作意图,必须由真实布局和回放证明,不能仅靠标签成立。
|
||||
|
||||
## 7. 验证与评审要求
|
||||
|
||||
### 规则正确
|
||||
|
||||
- 数据有效,旋转后的棋子与底格关系合法;完整参考解可回放清盘。
|
||||
- 免费旋转、免费失败试路和撤销继续有效;成功消除预算为棋子数,表示剩余工作量。
|
||||
- 求解触及搜索上限只能标为未确定,不能记为已验证可解。
|
||||
- 轨道、碰撞、动画与点击使用一致的模型;交叉处不换轨,颜色不参与规则。
|
||||
|
||||
### 体验证据
|
||||
|
||||
- 按真实成功离场时的朝向与剩余棋子回放路径。保留 `pathUsage` 及逐棋子明细,同时检查关键路径在实际画面中的表现。
|
||||
- 长路关须存在实际可释放的长绕行;多条单弯和未使用曲线不能代替。长度与弯数先记录分布和代表案例,样关验证后再制定制作带,不先用一个统一阈值裁剪全部内容。
|
||||
- 反差关须明确目标棋子、改变前后路线、前置动作和放行结果。结构能证明动作简单,是否产生惊喜还需实际观看与试玩判断。
|
||||
- 检查代表性的替代点击顺序与旋转探索,确认主爽点不会只藏在一条不自然的参考解中。报告注明覆盖范围,抽检不能宣称穷尽所有玩家操作。
|
||||
- 检查阻挡是否可解释,必要时改布局或加强接触反馈。当前有格外擦碰不等于必然合理,也不等于应直接删去所有相关空间结构。
|
||||
|
||||
### 区分旧门槛与新目标
|
||||
|
||||
v0.3 的 65% 弯轨比例、全六朝向独立无闭环及每段至多一次旋转,不直接作为新版统一设计前提。它们可能排除值得保留的长绕行与换路关系,必须结合样关逐项决定是否沿用、调整或限定适用范围。
|
||||
|
||||
闭环与多次旋转不作为默认难点;若候选使用,须说明玩家如何辨认当前走不通、如何得到换路线索,以及操作后获得什么回报。轻巧反差关应保持短操作即可兑现,不能借此引入反复空转。首轮样关优先证明核心爽点,无须主动加入这些复杂情况。
|
||||
|
||||
### 试玩关注点
|
||||
|
||||
观察玩家是否愿意跟完长路、能否理解放行变化,以及是否出现“原来这么简单”的反应。分别记录主动观察、行进动画、失败试路和离开游戏的时间,不把全部动画时长当等待,也不把全部失败点击当挫败。
|
||||
|
||||
可询问:“哪一枚最想看它走完?”“哪一枚比你想的容易出去?”“哪一步让你觉得后面都通了?”结合行为和回答调整关卡,不用参考解、难度分或时长估计代替体验结论。
|
||||
|
||||
## 8. 实施顺序
|
||||
|
||||
先制作并回放三类样关:直接可享受的长路巡游、一次旋转放行的轻巧反差、短路清挡后释放长绕行。确认单项体验成立后,再组合成有开局、中段变化和收尾的短关卡序列。
|
||||
|
||||
随后根据样关修订生成器参数与筛选条件,同步测试、路径报告和制作卡,再扩大关卡量。以当前清单生成的主线仍遵循其既有生成流程;新增手作样关应单独保存可重复的布局与验证结果,不直接修改现有派生关卡文件。
|
||||
|
||||
本轮不预设量产总关数、广告配额或精确难度峰值。下一步首先验证:**玩家能否持续享受弯绕离场,并通过轻巧操作获得超出第一眼预期的释放感。**
|
||||
@@ -0,0 +1,204 @@
|
||||
# HEX TRAILS 关卡设计调研报告
|
||||
|
||||
2026-09-12 · 范围:两篇指定论文精读、相关研究、箭头消除及相邻游戏、1000 关生产建议。
|
||||
|
||||
**研究后的建议是:建立“设计意图与路线骨架 → 可验证的关卡候选 → 多样体验库 → 按熟练度编排 → 试玩修正”的生产体系。** 第一篇论文提供设计意图与空间共同生成的方法,PCG-QD 提供多样候选库的方法;《一箭又一箭》的开发者分享补充了大量关卡生成、分档、重排和反馈的实践。三者都没有给出可以直接照抄的千关难度曲线。
|
||||
|
||||
对本项目,长路巡游、轻巧反差、清挡换路和整盘释放仍是内容质量的核心。研究支持把它们变成生成约束与回放证据。具体出现频率、长度门槛、困难关比例,需要由我们的样关和玩家验证决定。
|
||||
|
||||
## 1. 本次研究完成了什么
|
||||
|
||||
| 工作 | 完成范围 | 独立笔记 |
|
||||
| --- | --- | --- |
|
||||
| Mission 与 space 论文 | 8 页全文,图 1–3、表 1;案例流程、结论与限制 | [精读条目 P01](level-design-knowledge/01-mission-space.md) |
|
||||
| PCG-QD 论文 | 8 页全文,图 1–5、表 I;算法、应用、评价与开放问题 | [精读条目 P02](level-design-knowledge/02-pcgqd.md) |
|
||||
| 序列与难度补充研究 | Refraction 自动编排研究;Lily’s Garden 真人与代理数据难度建模 | [条目 P03–P04](level-design-knowledge/03-progression-and-difficulty.md) |
|
||||
| 海外竞品 | Arrow Jam 同名消歧;Arrows、Arrow Out、Tap Away、Traffic Escape、Unpuzzle;一份 Grand Games 录像定点观察与两款商店截图观察 | [海外调研](level-design-knowledge/04-international-comparators.md) |
|
||||
| 中文竞品 | 一箭又一箭的版本与主体核对、开发者分享;箭了又箭、箭了个箭的差异与证据缺口 | [中文调研](level-design-knowledge/05-chinese-comparators.md) |
|
||||
| 可复用知识 | 问题索引、设计卡、关卡记录模板、来源与检索台账 | [知识库入口](level-design-knowledge/README.md)、[研究台账](../exa-results/level-design-2026-09-12/README.md) |
|
||||
|
||||
搜索与网页阅读使用 Exa;指定论文还下载原始 PDF 核读,关键图表经过渲染检查。商店介绍属于产品方宣称,录像只说明抽查片段,开发者演讲的多个转录属于同一个经验来源。本次没有安装实玩这些移动游戏,没有审计任何竞品全部 1000 关,也没有获得其内部生成代码或原始 A/B 数据。
|
||||
|
||||
## 2. 两篇论文应该怎样进入我们的制作流程
|
||||
|
||||
### 第一篇:把“玩家经历”做成可编辑的生成对象
|
||||
|
||||
Karavolos 等人的两项案例分别采用“任务图先生成、再落空间”和“空间草图与任务顺序共同输入”。设计者在中间阶段编辑、检查、重跑模块,而非仅反复调整随机参数。原文也承认模板制作、歧义修正和模块测试仍需要工作,精确保留重生成结果中的指定局部尚待完善。[原文](https://livegamedesign.github.io/assets/FDG2015_Karavolos.pdf)
|
||||
|
||||
在我们这里,mission 可以写成“先清外侧挡子,再转一次盘,最后放出朝内的长路棋子”。space 是这个关系实际落在哪个花瓣、环带、交叉和出口。花瓣关可先锁住路线骨架,同时求兼容的放行关系;无需把所有关卡硬塞进同一种生成顺序。
|
||||
|
||||
需要新增的中间表示是**带状态条件的路线与释放关系**。例如“在底盘朝向 r、剩余棋子集合 S 下,移走 A 之后 B 可以沿路径 p 离场”。只记录 A 挡 B 的静态图,会漏掉旋转改变路线的情况。
|
||||
|
||||
### 第二篇:保存不同类型中各自优秀的候选
|
||||
|
||||
Gravina 等人的 PCG-QD 论文是综述与研究方向论述。其核心是让质量和行为多样性共同参与搜索;MAP-Elites 是其中一种方法,通过特征分区保存各类优秀个体。它提供候选库的思路,不负责决定玩家第 1 关到第 1000 关的顺序。[作者全文](https://antoniosliapis.com/articles/pcgqd.php)
|
||||
|
||||
对本项目,直接长路、清挡后巡游、一转反差、多阶段释放应该有各自的优秀候选。不能让所有关卡在“越长、越绕、旋转越多”这一个标准下竞争。先按主要放行方式分库,再用少量坐标浏览,形状与其他属性作为标签,避免过早建立巨大而空洞的多维网格。
|
||||
|
||||
第一版可以先实现分类、评审与检索;等特征有效,再决定是否加入从档案选择父代、变异、局部竞争的完整搜索。普通分组筛选不应冒称已实现 MAP-Elites。
|
||||
|
||||
### 两者结合后仍缺少的环节
|
||||
|
||||
可解性、核心回报是否出现、真人是否喜欢、连续十关是否重复,是四个不同判断。两篇论文都不能替我们验证后两项。补充的 Refraction 研究展示了基于解法特征的编排实验,但也暴露概念耗尽后连续选相似关的问题;Lily’s Garden 研究则说明结构、代理和玩家数据需要结合,且预测仍有误差。[Refraction 研究](https://www.ericbutler.net/assets/papers/chi2015_progression.pdf)、[难度建模研究](https://arxiv.org/html/2401.17436)
|
||||
|
||||
## 3. 相似游戏提供了哪些具体经验
|
||||
|
||||
### 先解决名称混淆
|
||||
|
||||
Arrow Jam 不是唯一产品:本轮发现 PoseidonJoy、Grand Games、CyberGame 等不同版本,还有 GAMEE 的 Arrows Jam、TidalAurum 的 Arrow Jam Go。Grand Games 的版本有倒计时;Lessmore 的 Arrows 官方明确无计时。身份、规则和压力来源必须分别建档。[Grand Games 商店](https://apps.apple.com/us/app/arrow-jam-tap-puzzle/id6762192889)、[Lessmore 商店](https://play.google.com/store/apps/details?id=com.ecffri.arrows&hl=en)
|
||||
|
||||
《一箭又一箭》也区分微信小程序与 Google Play App:腾讯平台条目列海南掌趣,开发者大会分享者是广州畅想互动何毅坤,Google Play 同名 App 的开发者信息对应畅想互动。本次没有擅自解释这些主体间的业务关系,也未假定两个平台同步更新。[腾讯条目](https://sj.qq.com/appdetail/wx69949b45b793b612)、[Google Play 条目](https://play.google.com/store/apps/details?hl=zh_HK&id=com.cxgame.yjyyjgoo)
|
||||
|
||||
### 核心对照
|
||||
|
||||
| 对象 | 可靠资料中的机制/观察 | 最值得迁移到本项目的设计问题 |
|
||||
| --- | --- | --- |
|
||||
| 一箭又一箭 | 开发者自述用 AI 参与生成、评分、编辑、排序;随熟练提高增加后段困难关频率,从三档扩到五档并做 A/B。[演讲实录](https://www.youxituoluo.com/534534.html) | 内容生成、难度标定和关号编排分开;用问卷解释为什么觉得无聊 |
|
||||
| Arrow Jam / Grand Games | 官方列倒计时、连接箭头、转角和管道;录像可见小局起步、遮挡幕布、围框与 Super Hard 标签。[商店](https://apps.apple.com/us/app/arrow-jam-tap-puzzle/id6762192889)、[录像](https://www.youtube.com/watch?v=6tObwJPw-JA) | 新机关、空间结构、时间压力分别分析,不能把一个标签当真实难度 |
|
||||
| Arrows / Lessmore | 官方强调无计时、避免碰撞与提示;商店截图可见密集折线构成整体轮廓。[商店](https://play.google.com/store/apps/details?id=com.ecffri.arrows&hl=en) | 有辨识度的整体形态与逐步清空;验证密集画面是否仍可跟线 |
|
||||
| Arrow Out | 商店列形状、缩放和辅助工具;二手体验报道讨论颜色分组、星级和章节。商店部分规则文案与报道有差异,未合并成已确认规则。[商店](https://apps.apple.com/us/app/arrow-out/id6754243057?l=zh-Hans-CN)、[报道](https://www.huxiu.com/article/4860736.html) | 把局部视觉分组作为可读性实验;章节奖励与谜题结构分开评价 |
|
||||
| Tap Away / Popcore | 官方说明单向移出方块、旋转立体形状观察角度,逐步改变规模和外形。[商店](https://play.google.com/store/apps/details?id=com.jctswbglsm.SwipeAway&hl=en) | 从拥挤到解开的层次感;其观察视角旋转与我们的底盘换轨作用不同 |
|
||||
| Traffic Escape / FOMO | 官方说明车顶箭头指示路线,按顺序移出、避免车辆碰撞。[商店](https://play.google.com/store/apps/details?id=com.bonnie.trafficescape&hl=en) | 看得懂“谁挡了谁”以及移除后新机会;并行调度细节本轮未实测 |
|
||||
| Unpuzzle / KekGames | 创作者发布页描述逐块拆解,平台说明被挡住时不能拉出、可以有多个解法。[原发布页](https://www.kongregate.com/en/games/kekgames/unpuzzle)、[平台规则](https://poki.com/en/g/unpuzzle) | 用拆解顺序与机制组合提供内容;明确可解、多解与无惩罚的区别 |
|
||||
|
||||
这些产品的“折线箭头有多长”“盘面轮廓是什么”,和本游戏“一枚棋子沿共享轨道行驶多远”不是同一个度量。只能迁移体验问题和组织方法,不能直接照搬它们的箭头数量或线条长度阈值。
|
||||
|
||||
### 有直接观察证据的片段
|
||||
|
||||
本轮定点查看了 IOSTouchplayHD 于 2026-06-02 发布的 Grand Games 录像:
|
||||
|
||||
- [00:20–00:39](https://www.youtube.com/watch?v=6tObwJPw-JA&t=20s):起步阶段的多个小局,适合研究反馈与教学密度。
|
||||
- [01:00](https://www.youtube.com/watch?v=6tObwJPw-JA&t=60s):画面可见 Level 6。
|
||||
- [04:00](https://www.youtube.com/watch?v=6tObwJPw-JA&t=240s):幕布及数字 7;只有画面事实,不能据此编造幕布完整触发规则。
|
||||
- [07:00](https://www.youtube.com/watch?v=6tObwJPw-JA&t=420s):围框箭头与内部簇,提供外层/内层结构对照。
|
||||
- [10:00](https://www.youtube.com/watch?v=6tObwJPw-JA&t=600s):可见 Super Hard 标签;没有验证其实际难度或对应的全局关号位置。
|
||||
|
||||
这是约 12 分钟录像中的抽查,不是连续通关测试。无法从视频准确读出点击是否被缓存、同时在途上限或丢输入情况;因此本轮没有用它宣称竞品已实现何种并行逻辑。
|
||||
|
||||
## 4. 《一箭又一箭》的量产经验,哪些能用
|
||||
|
||||
2026-05-27 的开发者分享,是本轮最贴近千关目标的实践材料。作者称早期简单—中等—困难循环在熟练用户中逐渐失去吸引力,后来增加后段困难关频率,扩充分档、重排大量关卡,并用 A/B 和问卷迭代。公开稿没有给出评分公式、实验分组规模或最优曲线参数。[全文实录](https://www.youxituoluo.com/534534.html)
|
||||
|
||||
由此可支持的项目决策是:
|
||||
|
||||
1. **关卡 ID 与关号分离。** 重新评级后可以调整顺序,同时保留来源、结构和历史表现。
|
||||
2. **结构难度和熟练玩家的体感分离。** 后期是否增加组合与挑战,要看玩家反馈和行为;固定结构难度不保证体感稳定。
|
||||
3. **保留核心,克制增加规则。** 演讲中的巨大箭头、彩色箭头、连击等是不同的新鲜感入口。我们的花瓣、螺旋、编织可以在原规则内提供变化。
|
||||
4. **数据和解释一起采集。** “后期无聊”“看不清”“连点没反应”“只剩重复清理”应触发不同改动。
|
||||
|
||||
演讲中的低频特殊机制、动态计时和商业反馈需要放回其产品目标理解。长路与反差是我们的核心内容,不应因竞品特殊机关低频就降为偶尔奖励;倒计时也不能未经验证进入当前强调巡游观看、免费试路的主线。
|
||||
|
||||
## 5. 长路、反差、花瓣应分别怎样制作
|
||||
|
||||
以下为本项目方案,尚未通过本轮新试玩验证。
|
||||
|
||||
| 内容 | 生成时必须表达 | 验收时看什么 | 在序列中的角色 |
|
||||
| --- | --- | --- | --- |
|
||||
| 长路巡游 | 关键棋子的真实成功路线、转弯与空间展开,明确何时放行 | 实际行进是否成立、是否愿意跟完、多策略是否容易遇到 | 教学、舒缓、中段兑现和收尾都可使用 |
|
||||
| 轻巧反差 | 第一眼预期、目标棋子、简短放行条件 | 模型证明动作轻巧;玩家证据证明预期落差 | 用少量动作带来清楚回报,可与短路或长路结合 |
|
||||
| 花瓣等形状路线 | 可辨认的整体形态与实际可行驶的关键路段 | 图案是否可读、关键路线是否被真实使用、交叉是否清楚 | 成为常见路线家族;高完成度作品可承担章节记忆点 |
|
||||
| 逐层释放 | 带状态条件的阻挡与换路关系、阶段奖励位置 | 哪一步打开哪些机会,是否只靠作者特定解才看得见 | 构成关内进展,并提供组合变化 |
|
||||
|
||||
花瓣需要分别记录三种证据:静态轮廓、实际路线、解开的阶段。轮廓相同可以换清挡/旋转关系;关系相同可以换路线形态。但仅换颜色或整体对称变换,不能自动计成新的体验原型。
|
||||
|
||||
一个花瓣原型至少可以提出三种不同制作意图:开局直接巡游、外侧让路后释放主瓣、一转接通内向长路。是否值得分别进入主线,要看实际释放顺序、路线和玩家感知是否有差别。
|
||||
|
||||
“反差”尤其不能只靠数值打标签。PCG-QD 中的算法 surprise 指结果偏离历史行为预测,与人看到内向箭头后说“原来转一下就行”含义不同。我们需要分别验证操作简洁与玩家预期,而不是套一个 surprise 算法名称。[P02 的概念辨析](level-design-knowledge/02-pcgqd.md)
|
||||
|
||||
## 6. 1000 关生产体系的具体建议
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[体验意图与已教规则] --> C[带状态条件的路线和释放关系]
|
||||
B[花瓣等空间草图与固定路段] --> C
|
||||
C --> D[生成棋子与轨道候选]
|
||||
D --> E{正式规则与回放验证}
|
||||
E -->|冲突或未确定| C
|
||||
E -->|通过| F[分类候选库与类内评审]
|
||||
F --> G[去重和按熟练度编排]
|
||||
G --> H[连续试玩与输入体验检查]
|
||||
H -->|排序不合适| G
|
||||
H -->|奖励或可读性有问题| C
|
||||
H -->|通过| I[版本化发布与持续反馈]
|
||||
I --> H
|
||||
```
|
||||
|
||||
### 先固定真实操作逻辑
|
||||
|
||||
用户已经指出快速连点与并行体验的重要性。生产工具要使用最终约定的输入与运动规则:接受点击的时机、占用何时变化、旋转是否可与运动交叠、队列或并行动画如何表现。记录为 `rulesVersion`,让求解、回放和实际操作对应同一版本。
|
||||
|
||||
如果未来真实并行改变了沿路动态占用,静态顺序求解的证明范围也要重审。即便只是动画串行,快速点击等待仍会影响长路的体感;这类时间应与主动观察、主动观看分别计量。
|
||||
|
||||
### 三个可以分别改动的产物
|
||||
|
||||
| 产物 | 内容 | 何时修改 |
|
||||
| --- | --- | --- |
|
||||
| 原型/骨架库 | 路线语汇、释放关系、固定约束、变化范围 | 需要新体验或发现某类内容无法稳定生成 |
|
||||
| 关卡候选库 | 固定布局、完整回放、体验标签、评审、近似家族 | 生成新布局或修改单关 |
|
||||
| 主线编排表 | 关卡 ID 顺序、目标熟练度、相邻差异、版本 | 难度重新校准、连续体验重复或节奏失衡 |
|
||||
|
||||
评价按规则正确性、体验类型、本类质量和难度证据分别保存。先用已有样关标定可解释的档位,不让现有总分替代全部判断。每次修改筛选规则都保留淘汰原因,检查是否系统性删掉了轻松而漂亮的内容。
|
||||
|
||||
### 难度曲线控制的对象
|
||||
|
||||
推荐控制的是某类玩家连续游玩时的体感,而非强制结构分数单调变化。前期逐步引入箭头起步、沿轨转向、交叉不换轨、清挡和转盘,再增加熟悉关系的组合。后期保持舒缓与挑战的变化,并按熟练度反馈调整挑战出现率。
|
||||
|
||||
长路观看量、推理负担、视觉负担、操作量应该画成不同序列。难关后的舒缓关可以继续有丰富巡游;章节观赏高点也可以是轻松的。一段 **仅用于说明的八关节奏** 可以是:
|
||||
|
||||
| 位置 | 主要内容 | 目标推理负担 | 回报安排 |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | 熟悉入口,直接长路 | 低 | 立即巡游 |
|
||||
| 2 | 清一枚放出目标 | 低至中 | 清楚因果 |
|
||||
| 3 | 已教旋转带来内向出口 | 中 | 轻巧反差 |
|
||||
| 4 | 花瓣形态,宽松放行 | 低 | 丰富观看 |
|
||||
| 5 | 两个熟悉关系组合 | 中 | 分段兑现 |
|
||||
| 6 | 跨区清挡与换路 | 较高 | 完成后充分放行 |
|
||||
| 7 | 开放出口的长绕行 | 低 | 熟练感与舒缓 |
|
||||
| 8 | 另一种形态的整盘释放 | 中 | 阶段收束 |
|
||||
|
||||
这不是发现了竞品的八关周期,也不是要求每段第六关最难。不同段落需要错开长度、峰值和内容顺序,具体节奏应比较后选择。
|
||||
|
||||
### 扩到 1000 的验收顺序
|
||||
|
||||
建议沿用“基准样关 → 首批 100 → 300 → 600 → 1000”的分批思路。基准样关按体验和负担覆盖,不直接当玩家前几十关。每批发布前分别检查:
|
||||
|
||||
1. **全部可验证。** 每关有正式规则下可回放的清盘解;超时或未确定的候选不混入已验证集合。
|
||||
2. **承诺内容成立。** 主长路、反差、形状路线和阶段释放有对应证据;关键效果不是只存在于未使用装饰线。
|
||||
3. **有可感知变化。** 同骨架、同释放节奏和相邻近似关可被查出;不以种子不同代替新内容。
|
||||
4. **连续体验成立。** 按序游玩覆盖开局、中段和收尾,排查重复清理、视觉拥挤、输入等待及熟练后无聊。
|
||||
5. **来源可追踪。** 规则、生成器、模板、评价、编排和试玩记录均有版本。
|
||||
|
||||
一批未通过时,先判断问题在骨架、布子、显示/输入还是排序,再修对应环节。不要靠扩大候选数掩盖评价目标不正确的问题。
|
||||
|
||||
## 7. 对之前 1000 关方案的修正
|
||||
|
||||
| 原有建议 | 研究后的处理 |
|
||||
| --- | --- |
|
||||
| 20 章 × 50 关、固定 D1–D5 数量 | 保留为制作预算假设;没有论文或竞品公开证据证明这些精确配额 |
|
||||
| 后半程平均难度平台 | 改为追求目标玩家的体感稳定;结构要求和困难关频率可随熟练变化 |
|
||||
| 长路、反差、花形的具体覆盖比例 | 不由学术引用背书;先验证识别、观看意愿与连续疲劳,再定频率 |
|
||||
| 先体验骨架再几何 | 保留,同时允许花瓣空间草图与体验关系共同输入 |
|
||||
| 使用质量多样性管理候选 | 支持方向;先检验标签与类内评审是否有效,再决定算法复杂度 |
|
||||
| 原有多维评审与节奏编排 | 保留相邻差异、奖励曝光和熟练度校准,并补充解法特征编排研究及可比较实验 |
|
||||
| 自动化提升制作效率 | 计入模板、评价器、工具和人工评审成本,实测总工时与验收产量 |
|
||||
|
||||
这些修正针对论据和实施方式,不代表本轮已经生成或验收了 1000 关。原始讨论稿继续保留:[1000 关制作方案](1000-level-production-plan.md)。
|
||||
|
||||
## 8. 最值得先做的三组验证
|
||||
|
||||
| 验证 | 控制什么 | 观察什么 | 用结果决定什么 |
|
||||
| --- | --- | --- | --- |
|
||||
| 同一释放结构,换花瓣/环绕等空间;同一形态,换释放结构 | 尽量保持棋子数、输入规则与主要操作负担可比 | 玩家是否感到不同、愿意看哪条路、能否说明关键变化 | 哪些维度真能支持内容扩容 |
|
||||
| 相同候选预算:现有单分筛选与分类后类内评审 | 使用相同规则、候选来源与评审条件 | 合格数量、可感知差异、重复率、人工筛选时间 | 候选档案是否值得进一步实现 QD 搜索 |
|
||||
| 同一批关卡,不同编排序列 | 规则、动画、内容和外部奖励保持一致;按熟练度分组 | 连续游玩、主动观察、奖励识别、疲劳及不继续的解释 | 难度波动、舒缓位置与后期挑战比例 |
|
||||
|
||||
先用小规模观察找机制问题,不能将探索性样本的通关率当精确行业指标。规模化 A/B 前再定义主要指标、样本与停止规则;同时保存反例和定性反馈。实际体验评审应覆盖慢点观看与快速连续点出的玩法,避免只优化其中一种。
|
||||
|
||||
## 9. 研究还没有回答的事情
|
||||
|
||||
- 各竞品真实的千关布局、重复率与难度分布;商店关数声明尚未逐关核对。
|
||||
- Arrow Jam 与《一箭又一箭》的实际点击缓存、并行动画、状态提交与碰撞实现。
|
||||
- 开发者自述中的 AI 技术类型、原始评级公式、A/B 最优参数与效果量。
|
||||
- 本项目玩家对长路长度、花瓣密度、反差和难度波动的偏好分布。
|
||||
|
||||
这些缺口已进入知识库的验证问题。现阶段足够明确的方向是:用有意图的路线和释放结构生成,用分类候选库维护变化,用真人连续体验校准顺序,逐批扩大已验收的内容。
|
||||
@@ -0,0 +1,30 @@
|
||||
# 三关入门序章
|
||||
|
||||
2026-09-12。入口:[开始教学](http://localhost:4173/?campaign=v0.5&tutorial=1)。选关窗口将三个教学入口放在正式章节前,可以随时重玩。
|
||||
|
||||
| 教学 | 棋盘 / 棋子 | 玩家学会什么 | 最少操作 |
|
||||
| --- | --- | --- | --- |
|
||||
| 点一下,出发 | 完整 19 格 / 1 枚 | 箭头决定起步方向,沿弯道自动转向,离场即完成 | 1 次点击 |
|
||||
| 先给它让路 | 同一完整 19 格盘 / 2 枚 | 先移下方挡子,再点上方棋子;可以连续点击 | 2 次点击 |
|
||||
| 转一下,路就通了 | 完整 19 格 / 2 枚 | 旋转轨道打开新出口,棋子位置和箭头不动 | 1 次旋转 + 2 次点击 |
|
||||
|
||||
根据用户反馈,原先的 4 / 4 / 7 格教学盘统一替换为与正式第 1 关相同的完整半径 2 六边形,保留全部 19 个格子和边角,仅减少棋子。三课由规整的直脊和两侧连续圆弯组成,前两课共用同一底板;第二课只增加一个新的阻挡关系。第三课上下对称,左右任一方向转一次都能清盘。主路线经过 6 格、转 5 次弯;第二课的挡子走 2 弯离场。每格的三对轨道全部真实、完整且格内不交叉,统一颜色和线宽。
|
||||
|
||||
界面与操作沿用游戏已有逻辑:教学说明使用原来的限时提示,旋转、撤销、重来和提示使用原有控件。前两课通过关卡数据禁用旋转,第三课允许旋转;不新增或隐藏教学专用控件,不另设布局或配色。每课结算复用原有弹窗;完成第三课后点击“开始第 1 关”,进入原来的正式关卡。
|
||||
|
||||
## 入口与进度
|
||||
|
||||
教学布局位于 `src/tutorial-levels.js`,作为 `campaign.tutorials` 接入,未插入正式的 `levels` 数组。正式 1–1000 的编号、关卡 ID、直接链接和已完成记录都保持原位。
|
||||
|
||||
新玩家无指定关号进入 v0.5 时自动开始教学。未完成的教学可以续玩;有正式关进度的玩家继续原关卡。`?tutorial=1` 至 `?tutorial=3` 明确打开对应教学,`?level=1` 仍直达正式第 1 关。教学使用独立键 `hex-trails-tutorial-v1-v0.5`,完成或重玩教学不计入正式通关数。
|
||||
|
||||
## 已完成的验证
|
||||
|
||||
- 正式 `Game`、`validateLevel`、`trace` 和求解器验证全部三课。第二课点击被挡棋子不耗额度;清挡后的新点击立即可用。第三课验证左右两种旋转和两种清盘顺序。
|
||||
- 本轮 **43 项相关测试通过**,覆盖三课布局与显式 19 格坐标集合、三课衔接、重玩、旧正式关进度、切版本后刷新、从教学进入工坊,以及原快速连点规则。静态构建通过。正式 1000 关的布局和生成流水线未改动。
|
||||
- 390×844 浏览器正常动画下重新依次完成完整棋盘的三课。第二课挡子与主棋子可连续点击;第三课向右旋转一次,两个箭头保持原位并成功离场。教学期间正式存档保持不变,点击开始第 1 关后只更新当前正式关位置,保留原通关集合。[当前操作记录](tutorial-review/playthrough.json)。旧小棋盘截图与操作证据移至 `tutorial-review/initial-small/`,不作为当前布局的验收证据。
|
||||
- 检查 320×568 与 1440×1000 的第三课、390×844 的全部三课与选关入口。[尺寸记录](tutorial-review/responsive.json)。这是浏览器视口与实际指针操作验证,不等同于真机手指误触测试。
|
||||
|
||||
按用户限定的制作范围,已撤回自行添加的缩放按钮显示、教学控件隐藏、常驻提示及专用布局与配色。43 项相关测试再次通过,包含原提示到时消失的验证。390×844 浏览器确认原有控件显示,前两课旋转禁用、第三课启用,选关使用既有按钮样式且能够切换教学,正式第 1 关也无新增缩放按钮。[恢复现有界面后的画面](tutorial-review/ui-restored-mobile.png)。
|
||||
|
||||
以下为恢复界面前的完整棋盘记录,布局与操作验证仍适用,控件样式以最新画面为准:[第一课](tutorial-review/lesson-1-mobile.png) · [第二课](tutorial-review/lesson-2-mobile.png) · [第三课](tutorial-review/lesson-3-mobile.png) · [选关入口](tutorial-review/map-mobile.png) · [小屏](tutorial-review/lesson-3-small.png) · [桌面](tutorial-review/lesson-3-desktop.png)
|
||||
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 73 KiB |
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"earlier": {
|
||||
"actions": [
|
||||
{
|
||||
"lesson": "trail-tutorial-01",
|
||||
"type": "tap",
|
||||
"id": "traveler",
|
||||
"status": "exit",
|
||||
"steps": 4,
|
||||
"time": 462.7000000178814
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-02",
|
||||
"type": "tap",
|
||||
"id": "traveler",
|
||||
"status": "blocked",
|
||||
"steps": 3,
|
||||
"time": 46924.20000001788
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-02",
|
||||
"type": "tap",
|
||||
"id": "gate",
|
||||
"status": "exit",
|
||||
"steps": 1,
|
||||
"time": 47732.20000001788
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-02",
|
||||
"type": "tap",
|
||||
"id": "traveler",
|
||||
"status": "exit",
|
||||
"steps": 4,
|
||||
"time": 47740.40000000596
|
||||
}
|
||||
],
|
||||
"formalBefore": "{\"current\":848,\"completed\":[999,33,848]}"
|
||||
},
|
||||
"opened": {
|
||||
"orientation": "300°",
|
||||
"feedback": "转一转,2 枚棋子的出口打开了!"
|
||||
},
|
||||
"third": {
|
||||
"won": true,
|
||||
"result": "入门 3 / 3\n转一下,路就通了\n\n旋转只改变底盘轨道,棋子的位置和箭头不变。新路线接通,就能出发。\n\n开始第 1 关\n再试一次",
|
||||
"actions": [
|
||||
{
|
||||
"lesson": "trail-tutorial-03",
|
||||
"type": "rotate",
|
||||
"dir": -1,
|
||||
"status": "rotated",
|
||||
"tilesFixed": true
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-03",
|
||||
"type": "tap",
|
||||
"id": "north",
|
||||
"status": "exit",
|
||||
"steps": 4,
|
||||
"time": 779.5
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-03",
|
||||
"type": "tap",
|
||||
"id": "south",
|
||||
"status": "exit",
|
||||
"steps": 4,
|
||||
"time": 891
|
||||
}
|
||||
],
|
||||
"tutorialProgress": "{\"current\":2,\"completed\":[0,1,2]}",
|
||||
"formalAfterTeaching": "{\"current\":848,\"completed\":[999,33,848]}"
|
||||
},
|
||||
"entered": {
|
||||
"header": "LEVEL 01",
|
||||
"moves": "3",
|
||||
"tutorial": false,
|
||||
"formalProgress": "{\"current\":0,\"completed\":[999,33,848]}",
|
||||
"viewport": {
|
||||
"width": 390,
|
||||
"height": 844,
|
||||
"scrollWidth": 390
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
[
|
||||
{
|
||||
"header": "入门 3 / 3",
|
||||
"width": 320,
|
||||
"height": 568,
|
||||
"scrollWidth": 320,
|
||||
"scrollHeight": 568,
|
||||
"notice": {
|
||||
"x": 20,
|
||||
"y": 98,
|
||||
"width": 280,
|
||||
"height": 56,
|
||||
"top": 98,
|
||||
"right": 300,
|
||||
"bottom": 154,
|
||||
"left": 20
|
||||
},
|
||||
"noticeOpacity": "1",
|
||||
"canvas": {
|
||||
"x": 8,
|
||||
"y": 160,
|
||||
"width": 304,
|
||||
"height": 336,
|
||||
"top": 160,
|
||||
"right": 312,
|
||||
"bottom": 496,
|
||||
"left": 8
|
||||
},
|
||||
"rotate": {
|
||||
"x": 210.6640625,
|
||||
"y": 493.3565979003906,
|
||||
"width": 101.3359375,
|
||||
"height": 63.999969482421875,
|
||||
"top": 493.3565979003906,
|
||||
"right": 312,
|
||||
"bottom": 557.3565673828125,
|
||||
"left": 210.6640625
|
||||
}
|
||||
},
|
||||
{
|
||||
"header": "入门 3 / 3",
|
||||
"width": 390,
|
||||
"height": 844,
|
||||
"scrollWidth": 390,
|
||||
"scrollHeight": 844,
|
||||
"notice": {
|
||||
"x": 49.5,
|
||||
"y": 107,
|
||||
"width": 291,
|
||||
"height": 38,
|
||||
"top": 107,
|
||||
"right": 340.5,
|
||||
"bottom": 145,
|
||||
"left": 49.5
|
||||
},
|
||||
"noticeOpacity": "1",
|
||||
"canvas": {
|
||||
"x": 8,
|
||||
"y": 160,
|
||||
"width": 373.9921875,
|
||||
"height": 612,
|
||||
"top": 160,
|
||||
"right": 381.9921875,
|
||||
"bottom": 772,
|
||||
"left": 8
|
||||
},
|
||||
"rotate": {
|
||||
"x": 257.328125,
|
||||
"y": 769.2265014648438,
|
||||
"width": 124.6640625,
|
||||
"height": 64,
|
||||
"top": 769.2265014648438,
|
||||
"right": 381.9921875,
|
||||
"bottom": 833.2265014648438,
|
||||
"left": 257.328125
|
||||
}
|
||||
},
|
||||
{
|
||||
"header": "入门 3 / 3",
|
||||
"width": 1440,
|
||||
"height": 1000,
|
||||
"scrollWidth": 1440,
|
||||
"scrollHeight": 1000,
|
||||
"notice": {
|
||||
"x": 564.75,
|
||||
"y": 130.25,
|
||||
"width": 310.5,
|
||||
"height": 39.5,
|
||||
"top": 130.25,
|
||||
"right": 875.25,
|
||||
"bottom": 169.75,
|
||||
"left": 564.75
|
||||
},
|
||||
"noticeOpacity": "1",
|
||||
"canvas": {
|
||||
"x": 260,
|
||||
"y": 184,
|
||||
"width": 919.9921875,
|
||||
"height": 712,
|
||||
"top": 184,
|
||||
"right": 1179.9921875,
|
||||
"bottom": 896,
|
||||
"left": 260
|
||||
},
|
||||
"rotate": {
|
||||
"x": 873.328125,
|
||||
"y": 895.62353515625,
|
||||
"width": 306.6640625,
|
||||
"height": 72,
|
||||
"top": 895.62353515625,
|
||||
"right": 1179.9921875,
|
||||
"bottom": 967.62353515625,
|
||||
"left": 873.328125
|
||||
}
|
||||
}
|
||||
]
|
||||
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 361 KiB |
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"edition": "complete-19-cell-boards",
|
||||
"formalBefore": "{\"current\":0,\"completed\":[999,33,848]}",
|
||||
"results": [
|
||||
{
|
||||
"header": "入门 1 / 3",
|
||||
"won": true,
|
||||
"moves": "0",
|
||||
"cells": 19
|
||||
},
|
||||
{
|
||||
"header": "入门 2 / 3",
|
||||
"won": true,
|
||||
"moves": "0",
|
||||
"cells": 19
|
||||
},
|
||||
{
|
||||
"header": "入门 3 / 3",
|
||||
"won": true,
|
||||
"moves": "0",
|
||||
"cells": 19
|
||||
}
|
||||
],
|
||||
"actions": [
|
||||
{
|
||||
"lesson": "trail-tutorial-01",
|
||||
"type": "tap",
|
||||
"id": "traveler",
|
||||
"status": "exit",
|
||||
"steps": 6,
|
||||
"time": 64082.79999998212
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-02",
|
||||
"type": "tap",
|
||||
"id": "gate",
|
||||
"status": "exit",
|
||||
"steps": 3,
|
||||
"time": 66306
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-02",
|
||||
"type": "tap",
|
||||
"id": "traveler",
|
||||
"status": "exit",
|
||||
"steps": 6,
|
||||
"time": 66308.79999998212
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-03",
|
||||
"type": "rotate",
|
||||
"dir": 1,
|
||||
"status": "rotated",
|
||||
"tilesFixed": true
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-03",
|
||||
"type": "tap",
|
||||
"id": "north",
|
||||
"status": "exit",
|
||||
"steps": 6,
|
||||
"time": 68922.19999998808
|
||||
},
|
||||
{
|
||||
"lesson": "trail-tutorial-03",
|
||||
"type": "tap",
|
||||
"id": "south",
|
||||
"status": "exit",
|
||||
"steps": 6,
|
||||
"time": 68928
|
||||
}
|
||||
],
|
||||
"formalAfterTeaching": "{\"current\":0,\"completed\":[999,33,848]}",
|
||||
"tutorialProgress": "{\"current\":2,\"completed\":[0,1,2]}",
|
||||
"entered": {
|
||||
"header": "LEVEL 01",
|
||||
"formalProgress": "{\"current\":0,\"completed\":[999,33,848]}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
[
|
||||
{
|
||||
"width": 320,
|
||||
"height": 568,
|
||||
"scrollWidth": 320,
|
||||
"scrollHeight": 568,
|
||||
"cells": 19,
|
||||
"canvas": {
|
||||
"x": 8,
|
||||
"y": 160,
|
||||
"width": 304,
|
||||
"height": 336,
|
||||
"top": 160,
|
||||
"right": 312,
|
||||
"bottom": 496,
|
||||
"left": 8
|
||||
},
|
||||
"bounds": {
|
||||
"top": 29.43674831559187,
|
||||
"bottom": 306.5632516844081
|
||||
},
|
||||
"allRowsVisible": true
|
||||
},
|
||||
{
|
||||
"width": 1440,
|
||||
"height": 1000,
|
||||
"scrollWidth": 1440,
|
||||
"scrollHeight": 1000,
|
||||
"cells": 19,
|
||||
"canvas": {
|
||||
"x": 260,
|
||||
"y": 184,
|
||||
"width": 919.9921875,
|
||||
"height": 712,
|
||||
"top": 184,
|
||||
"right": 1179.9921875,
|
||||
"bottom": 896,
|
||||
"left": 260
|
||||
},
|
||||
"bounds": {
|
||||
"top": 47.69676500219191,
|
||||
"bottom": 664.3032349978081
|
||||
},
|
||||
"allRowsVisible": true
|
||||
}
|
||||
]
|
||||
|
After Width: | Height: | Size: 51 KiB |
@@ -0,0 +1,219 @@
|
||||
# v0.4 · 长路与惊喜:20 关体验与回放
|
||||
|
||||
依据 [新版设计准则](level-design-principles-v2.md),按 4 组 × 5 关编排。制作来源为 [种子与制作卡](../levels/v0.4-seeds.json),运行 `npm run levels:v04` 同步布局、模块和本报告。全部为新种子生成与筛选的布局,没有重用旧版关卡。
|
||||
|
||||
20 关参考解共 199 次成功消除,其中 89 条路径至少转弯 6 次;每条弯轨路径平均 6.89 弯,最长 18 弯。13 关必须旋转,5 关存在开局朝内棋子一次旋转后立即可点击离场的完整体验解。
|
||||
|
||||
“长路”在本批统计中指至少 6 弯,仅用于样关比较。下表路径与旋转来自最少旋转参考解;反差关另有先转盘、再点击目标的完整体验解。结构分会给长路加分,不应把直接可清空的巡游关误判成高推理负担。没有真人用时或满意度数据。
|
||||
|
||||
| 关 | 名称 | 体验 | 格 / 棋子 | 开局可出 | 最少旋转 | 最长弯数 | 长路条数 | 参考 / 体验格外阻挡样本 |
|
||||
| --- | --- | --- | --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| 1 | 跟着它绕出去 | 长路巡游 | 19 / 4 | 4 | 0 | 9 | 2 | 0 / 0 |
|
||||
| 2 | 朝里面,也能出去 | 轻巧反差 | 19 / 5 | 2 | 1 | 6 | 1 | 0 / 1 |
|
||||
| 3 | 让开,长路就通了 | 清挡放行 | 37 / 7 | 5 | 0 | 10 | 4 | 0 / 0 |
|
||||
| 4 | 转出另一段风景 | 旋转换路 | 37 / 9 | 4 | 1 | 14 | 4 | 0 / 0 |
|
||||
| 5 | 尽情绕一圈 | 长路巡游 | 37 / 7 | 7 | 0 | 14 | 4 | 0 / 0 |
|
||||
| 6 | 里面藏着一条长路 | 清挡放行 | 37 / 11 | 1 | 1 | 16 | 6 | 3 / 3 |
|
||||
| 7 | 轻轻一转就放行 | 轻巧反差 | 37 / 7 | 1 | 1 | 15 | 6 | 0 / 0 |
|
||||
| 8 | 转过去,再转回来 | 往返换路 | 37 / 12 | 4 | 2 | 11 | 8 | 5 / 5 |
|
||||
| 9 | 一路弯到出口 | 长路巡游 | 37 / 8 | 8 | 0 | 16 | 3 | 0 / 0 |
|
||||
| 10 | 把整片路打开 | 分段释放 | 37 / 14 | 4 | 2 | 12 | 4 | 4 / 4 |
|
||||
| 11 | 原来近在眼前 | 轻巧反差 | 37 / 8 | 2 | 1 | 16 | 5 | 1 / 1 |
|
||||
| 12 | 小出口,大巡游 | 清挡放行 | 37 / 12 | 6 | 0 | 15 | 5 | 0 / 0 |
|
||||
| 13 | 两次转机 | 分段释放 | 37 / 16 | 4 | 2 | 17 | 7 | 7 / 7 |
|
||||
| 14 | 向内出发,向外远行 | 轻巧反差 | 37 / 8 | 4 | 1 | 12 | 3 | 2 / 1 |
|
||||
| 15 | 给眼睛一段旅行 | 长路巡游 | 37 / 7 | 7 | 0 | 14 | 3 | 0 / 0 |
|
||||
| 16 | 回来时,路已不同 | 往返换路 | 37 / 16 | 4 | 2 | 14 | 6 | 5 / 5 |
|
||||
| 17 | 一个转角,全盘松开 | 轻巧反差 | 37 / 7 | 3 | 1 | 13 | 3 | 2 / 0 |
|
||||
| 18 | 畅通的弯弯长路 | 长路巡游 | 37 / 7 | 7 | 0 | 18 | 3 | 0 / 0 |
|
||||
| 19 | 逐层放出长回廊 | 分段释放 | 37 / 18 | 6 | 2 | 18 | 5 | 8 / 8 |
|
||||
| 20 | 最后,一路盛放 | 长路收束 | 37 / 16 | 4 | 3 | 18 | 7 | 21 / 21 |
|
||||
|
||||
## 验收边界
|
||||
|
||||
两套完整回放均可通关,相邻消除之间最多一次旋转;巡游关开局全可出;反差关目标确实朝内,开局被路线内棋子阻挡,左右其中一次旋转就获得无碰撞出口;清挡关有短路线释放至少 8 弯路径;往返关包含两个相反方向的必要旋转。
|
||||
|
||||
本版恢复多阶段与长绕行,没有沿用 v0.3 全六朝向无闭环、参考状态格外阻挡为零的统一筛选。表中的格外阻挡样本按“决策状态 × 棋子”计,同一阻挡可重复出现;实际阻挡对象与接触反馈继续使用现有引擎。六朝向开局的闭环和擦碰明细保存在 [完整分析](../levels/v0.4-analysis.json),不能宣称所有探索路径都无闭环、无擦碰。替代顺序的可解性另由测试检查,真人可读性与完整动画手感仍需试玩。
|
||||
|
||||
## 逐关制作卡
|
||||
|
||||
### 01 · 跟着它绕出去
|
||||
|
||||
4 枚棋子开局都能离场。用直接可点的长绕行建立“箭头起步、轨道转向”的感受;不要求先找顺序,首关就完整赠送巡游。
|
||||
|
||||
- 提示:先点一枚棋子,看它沿弯弯绕绕的轨道开出去
|
||||
- 关键体验路径:`t0`,9 弯 / 11 格步骤。
|
||||
- 完整体验动作:t0 → t1 → t2 → t3。
|
||||
|
||||
### 02 · 朝里面,也能出去
|
||||
|
||||
右下角的目标朝内,被路线上的另一枚棋子阻挡。一次左转直接放出它,并完整经过多处弯道;几枚外围棋子提供可自由尝试的入口。
|
||||
|
||||
- 提示:留意右下角向上的箭头,向左转一下,再让它出发
|
||||
- 关键体验路径:`t1`,7 弯 / 10 格步骤。
|
||||
- 反差操作:开局左转一次,再点 `t4`(6 弯);箭头确实指向更内侧的六边形环。
|
||||
- 参考换路阶段:剩 2 枚时右转。
|
||||
- 完整体验动作:左转 → t4 → t3 → t2 → t1 → t0。
|
||||
|
||||
### 03 · 让开,长路就通了
|
||||
|
||||
用短出口承担让路作用,清除关键阻挡后放出至少 8 弯的路线。保持无需旋转,集中体验一次消除给后面带来的变化。
|
||||
|
||||
- 提示:交叉处沿同一条线走;先移走挡路棋子,长路就通了
|
||||
- 关键体验路径:`t1`,10 弯 / 14 格步骤。
|
||||
- 清挡证据:参考解第 5 次操作移走 `t6`,为 `t1` 打开 10 弯路径。
|
||||
- 完整体验动作:t2 → t3 → t4 → t5 → t6 → t0 → t1。
|
||||
|
||||
### 04 · 转出另一段风景
|
||||
|
||||
把一次必要换路引入小规模的分段清理。旋转前后都保留长路径的观看回报,避免只有末子为转而转。
|
||||
|
||||
- 提示:先放出能走的棋子,再转动底盘,看看新路线
|
||||
- 关键体验路径:`t0`,14 弯 / 18 格步骤。
|
||||
- 参考换路阶段:剩 5 枚时左转。
|
||||
- 完整体验动作:t4 → t5 → t7 → t8 → 左转 → t3 → t6 → t2 → t1 → t0。
|
||||
|
||||
### 05 · 尽情绕一圈
|
||||
|
||||
本组放气关。全部棋子开局可走,没有先后要求,让多条长路线直接供玩家启动;通过观看内容收束前面的学习。
|
||||
|
||||
- 提示:这些弯路已经畅通,选喜欢的一枚看它走完
|
||||
- 关键体验路径:`t0`,14 弯 / 17 格步骤。
|
||||
- 完整体验动作:t0 → t1 → t2 → t3 → t4 → t5 → t6。
|
||||
|
||||
### 06 · 里面藏着一条长路
|
||||
|
||||
少量初始出口形成明确突破口。清挡和旋转共同打开深处路线,让一枚短路棋子的移除释放长绕行;比上一关增加关系负担。
|
||||
|
||||
- 提示:先找到一枚能出去的,给里面的长路腾出位置
|
||||
- 关键体验路径:`t0`,16 弯 / 21 格步骤。
|
||||
- 清挡证据:参考解第 7 次操作移走 `t7`,为 `t3` 打开 9 弯路径。
|
||||
- 参考换路阶段:剩 9 枚时左转。
|
||||
- 完整体验动作:t10 → t4 → 左转 → t8 → t9 → t6 → t7 → t3 → t5 → t2 → t1 → t0。
|
||||
|
||||
### 07 · 轻轻一转就放行
|
||||
|
||||
用较少棋子表现看似受困的内向箭头。开局一次正确旋转就能直接启动目标的长路径,允许先转后消,降低实际前置操作。
|
||||
|
||||
- 提示:朝内不等于出不去,试着换一个方向
|
||||
- 关键体验路径:`t0`,15 弯 / 19 格步骤。
|
||||
- 反差操作:开局左转一次,再点 `t5`(9 弯);箭头确实指向更内侧的六边形环。
|
||||
- 参考换路阶段:剩 6 枚时左转。
|
||||
- 完整体验动作:左转 → t5 → t3 → t4 → t6 → t2 → t1 → t0。
|
||||
|
||||
### 08 · 转过去,再转回来
|
||||
|
||||
两次相反方向的必要旋转形成完整往返。中间确实移走棋子,因此回到原朝向后新增出口;长轨道贯穿清理过程。
|
||||
|
||||
- 提示:转过去让开位置,再转回来,原来的路就通了
|
||||
- 关键体验路径:`t1`,11 弯 / 13 格步骤。
|
||||
- 参考换路阶段:剩 3 枚时右转 → 剩 2 枚时左转。
|
||||
- 完整体验动作:t6 → t8 → t10 → t11 → t5 → t7 → t2 → t3 → t0 → 右转 → t9 → 左转 → t1 → t4。
|
||||
|
||||
### 09 · 一路弯到出口
|
||||
|
||||
往返判断后的释放关。开局全可出,任意消除顺序都安全;保持长路径内容,减少推理要求。
|
||||
|
||||
- 提示:路都通了,慢慢看它们绕出去
|
||||
- 关键体验路径:`t0`,16 弯 / 19 格步骤。
|
||||
- 完整体验动作:t0 → t1 → t2 → t3 → t4 → t5 → t6 → t7。
|
||||
|
||||
### 10 · 把整片路打开
|
||||
|
||||
用两次必要旋转分段清开棋盘。各阶段持续提供巡游内容,长路线分布在多个成功消除中,避免前段只有准备动作。
|
||||
|
||||
- 提示:每打开一片出口,就让它们先走一段
|
||||
- 关键体验路径:`t1`,12 弯 / 14 格步骤。
|
||||
- 参考换路阶段:剩 7 枚时左转 → 剩 6 枚时左转。
|
||||
- 完整体验动作:t8 → t11 → t12 → t13 → t0 → t10 → t9 → 左转 → t5 → 左转 → t4 → t6 → t7 → t3 → t2 → t1。
|
||||
|
||||
### 11 · 原来近在眼前
|
||||
|
||||
独立展示短路型反差:朝内目标开局一次旋转后只经过 3 弯即可离场。其他棋子保留长路巡游,使轻巧反差不依赖长路线长度。
|
||||
|
||||
- 提示:看似往里走,换条路就近出去了
|
||||
- 关键体验路径:`t0`,16 弯 / 19 格步骤。
|
||||
- 反差操作:开局左转一次,再点 `t7`(3 弯);箭头确实指向更内侧的六边形环。
|
||||
- 参考换路阶段:剩 6 枚时左转。
|
||||
- 完整体验动作:左转 → t7 → t5 → t6 → t4 → t3 → t2 → t1 → t0。
|
||||
|
||||
### 12 · 小出口,大巡游
|
||||
|
||||
无需旋转的清挡组合。开局提供多个入口,一枚短路棋子解除真实路线占用,立即放行长路径;用更深的内容承接短路反差。
|
||||
|
||||
- 提示:先放走短路棋子,后面的长回廊就打开了
|
||||
- 关键体验路径:`t0`,15 弯 / 17 格步骤。
|
||||
- 清挡证据:参考解第 2 次操作移走 `t7`,为 `t2` 打开 10 弯路径。
|
||||
- 完整体验动作:t6 → t7 → t8 → t9 → t10 → t11 → t2 → t4 → t5 → t1 → t3 → t0。
|
||||
|
||||
### 13 · 两次转机
|
||||
|
||||
两次必要旋转与较多棋子形成中段小峰。不是延长空转,而是在每次旋转后获得可消除出口,并将多条长绕行组织进清场。
|
||||
|
||||
- 提示:清开一段,转出一段,再接着解开
|
||||
- 关键体验路径:`t0`,17 弯 / 22 格步骤。
|
||||
- 参考换路阶段:剩 11 枚时左转 → 剩 10 枚时左转。
|
||||
- 完整体验动作:t9 → t13 → t14 → t15 → t12 → 左转 → t10 → 左转 → t7 → t11 → t6 → t8 → t5 → t4 → t3 → t2 → t1 → t0。
|
||||
|
||||
### 14 · 向内出发,向外远行
|
||||
|
||||
看似朝内的目标开局一次旋转即可出发,接上一条长绕行;基准朝向的布局全部可出,发现方向后进入持续放行。
|
||||
|
||||
- 提示:这个朝内的箭头,一转也能接上长路
|
||||
- 关键体验路径:`t0`,12 弯 / 16 格步骤。
|
||||
- 反差操作:开局左转一次,再点 `t0`(12 弯);箭头确实指向更内侧的六边形环。
|
||||
- 参考换路阶段:剩 3 枚时左转。
|
||||
- 完整体验动作:左转 → t0 → t1 → t2 → t3 → t4 → t5 → t6 → t7。
|
||||
|
||||
### 15 · 给眼睛一段旅行
|
||||
|
||||
本组观看回报关。全盘开局可出,直接放送更长的绕行与多条巡游,收回上一段的操作与判断负担。
|
||||
|
||||
- 提示:先不用转盘,把这段长风景看完
|
||||
- 关键体验路径:`t0`,14 弯 / 19 格步骤。
|
||||
- 完整体验动作:t0 → t1 → t2 → t3 → t4 → t5 → t6。
|
||||
|
||||
### 16 · 回来时,路已不同
|
||||
|
||||
复习往返换路,扩大剩余棋子关系。转过去处理关键阻挡,再回到原方向形成新的放行条件;不靠增加棋盘面积表现进展。
|
||||
|
||||
- 提示:同一个方向,少了一枚挡路棋子,就不一样了
|
||||
- 关键体验路径:`t0`,14 弯 / 18 格步骤。
|
||||
- 参考换路阶段:剩 10 枚时右转 → 剩 9 枚时左转。
|
||||
- 完整体验动作:t11 → t12 → t14 → t15 → t8 → t9 → 右转 → t13 → 左转 → t10 → t6 → t7 → t0 → t5 → t4 → t3 → t1 → t2。
|
||||
|
||||
### 17 · 一个转角,全盘松开
|
||||
|
||||
用一次旋转把明显受阻的内向目标变成可直接消除的棋子。基准朝向保留大量同时可出的路线,让反差之后衔接连续长路巡游。
|
||||
|
||||
- 提示:轻轻一转,朝内的棋子也有了出口
|
||||
- 关键体验路径:`t0`,13 弯 / 15 格步骤。
|
||||
- 反差操作:开局左转一次,再点 `t0`(13 弯);箭头确实指向更内侧的六边形环。
|
||||
- 参考换路阶段:剩 4 枚时左转。
|
||||
- 完整体验动作:左转 → t0 → t1 → t2 → t3 → t4 → t5 → t6。
|
||||
|
||||
### 18 · 畅通的弯弯长路
|
||||
|
||||
在最后的组合关前安排明确放气。全盘开局畅通,多枚长轨棋子任意点击离场,增加观看内容而不增加清挡门槛。
|
||||
|
||||
- 提示:不用解结了,让它们一条条绕出去
|
||||
- 关键体验路径:`t0`,18 弯 / 22 格步骤。
|
||||
- 完整体验动作:t0 → t1 → t2 → t3 → t4 → t5 → t6。
|
||||
|
||||
### 19 · 逐层放出长回廊
|
||||
|
||||
以两次必要旋转和多层占用组织较完整的清场。保留开局入口与多条长路径,让不同阶段都有实际离场回报。
|
||||
|
||||
- 提示:给短路让位,长回廊会一层层打开
|
||||
- 关键体验路径:`t0`,18 弯 / 21 格步骤。
|
||||
- 参考换路阶段:剩 9 枚时左转 → 剩 6 枚时左转。
|
||||
- 完整体验动作:t11 → t12 → t13 → t14 → t16 → t17 → t2 → t9 → t10 → 左转 → t15 → t6 → t5 → 左转 → t7 → t8 → t3 → t4 → t1 → t0。
|
||||
|
||||
### 20 · 最后,一路盛放
|
||||
|
||||
20 关收束:三次必要旋转之间都有消除进展,后段连续释放多条至少 10 弯的路线。以清开整盘后获得的长绕行完成庆祝。
|
||||
|
||||
- 提示:最后几枚,也藏着长长的出口
|
||||
- 关键体验路径:`t8`,18 弯 / 20 格步骤。
|
||||
- 参考换路阶段:剩 11 枚时右转 → 剩 3 枚时右转 → 剩 2 枚时右转。
|
||||
- 完整体验动作:t12 → t13 → t14 → t15 → t9 → 右转 → t7 → t11 → t6 → t3 → t0 → t5 → t10 → t8 → 右转 → t4 → 右转 → t2 → t1。
|
||||
@@ -0,0 +1,80 @@
|
||||
# v0.5 千关浏览与操作检查
|
||||
|
||||
检查日期:2026-09-12。状态:**最终冻结批次的浏览器与操作检查已完成**。
|
||||
|
||||
正式 `pipelineHash`:`ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d`。
|
||||
|
||||
范围修订(2026-09-12):用户明确要求只制作关卡,界面与操作沿用原游戏。已撤回 v0.5 的缩放按钮强制显示与其 48 px 留白,以及教学关专用的控件隐藏、布局和配色。下文第 3 节的缩放按钮检查属于已撤回方案的历史记录,不代表当前界面;关卡数据和原有操作逻辑未变。
|
||||
|
||||
显示修订(2026-09-12):用户指出正式游戏只有设计主路线较粗,其他可行驶轨道像辅助线。已从主游戏移除 `trackEmphasis`,所有真实轨道恢复原游戏统一的线宽和颜色;制作审核页仍可用强调模式查看造型。关卡布局、行走规则和流水线哈希未变。第 5 关及其旋转后画面均有 57 对标准轨道,第 1000 关有 273 对标准轨道;390×844 视口无横向溢出。相关 22 项回归与静态构建通过。[绘制记录](v0.5-review/tracks-unified.json) · [第 5 关新画面](v0.5-review/tracks-unified-level-5-mobile.png) · [第 1000 关新画面](v0.5-review/tracks-unified-level-1000-mobile.png)。下文原截图中的轨道强调样式属于修订前记录,操作结果仍适用。
|
||||
|
||||
扩展策略审核后,最终批次相较开发快照重制了 790 关。本轮强制刷新浏览器模块,在浏览器内重新计算六个现场样本的规范布局 SHA-256,并与冻结配方逐一核对;第 1、4、34、849 关已重跑,第 3、1000 关布局哈希完全相同,保留其已有正常速度操作证据。20 张联系表全部重新导出。[浏览器哈希核对](v0.5-review/final-browser-batch.json) · [新旧布局对照](v0.5-review/layout-verification.json)
|
||||
|
||||
原开发记录的相关日志与画面保存在 `docs/v0.5-review/pre-final/`,不代替本批次记录。
|
||||
|
||||
本报告记录实际浏览器操作与画面检查。关卡全量求解、二十种策略回放和整体分布由生产报告记录;这里没有把自动化点击视为真人体验评价。
|
||||
|
||||
## 1. 接入与浏览
|
||||
|
||||
- v0.5 注册为新访客默认版本;已有版本选择继续沿用。v0.1–v0.4 的关卡与独立存档保留。
|
||||
- 主游戏接受 `?campaign=v0.5&level=1000` 等链接,关号从 1 开始。越界关号不会写入进度。
|
||||
- 主选关弹窗按章显示,每页最多 50 关。实测第 1 章索引 0–49,第 20 章索引 950–999;隐藏侧栏同样只生成当前章的 50 个按钮。
|
||||
- 直接前往 501 关成功。切到 v0.4 后再回 v0.5,恢复第 501 关;旧版位置保持独立。[操作记录](v0.5-review/navigation.json)
|
||||
- 正式展示使用制作分档与“预估”字样;长路格数、弯数单独描述观看内容。生产关不再运行旧的“长路加分”分析来显示难度。静态旧版分析和当前状态提示各有缓存。
|
||||
|
||||
主选关截图:[390×844 视口](v0.5-review/map-mobile.png)。截图像素可能按设备像素比放大,文中尺寸均指 CSS 视口。
|
||||
|
||||
## 2. 原操作逻辑现场检查
|
||||
|
||||
这些操作通过主游戏的真实鼠标/指针事件与旋转按钮完成。记录器只包装 `Game.tap` / `Game.rotate` 返回值,没有替代碰撞、移除或动画逻辑。使用正常动态效果;测试等待轨道和离场动画实际结束,再触发需要等待的旋转或结算操作。
|
||||
|
||||
| 样本 | 操作与现场结果 | 证据 |
|
||||
| --- | --- | --- |
|
||||
| 第 1 关,长路巡游 | 点击 t0 后 109.6 ms 再点 t1,两次都立即返回 `exit`,剩余数量 3→2→1;t0 原动画时长约 2627 ms,第二枚已在它结束前启动 | [连点日志](v0.5-review/rapid-tap.json)、[画面](v0.5-review/main-mobile-rapid.png) |
|
||||
| 第 3 关,清挡放行 | t0 初始被挡。移走 t1 后 t0 状态变为 `exit`,35.6 ms 后可立即启动,剩余 5→4→3 | [清挡与反差日志](v0.5-review/gate-contrast.json) |
|
||||
| 第 4 关,轻巧反差 | t0 初始被挡;右转至 60° 后点击 t0,沿 10 格轨道成功离场 | [清挡与反差日志](v0.5-review/gate-contrast.json)、[画面](v0.5-review/main-mobile-contrast.png) |
|
||||
| 第 34 关,分段释放 | 最终保存的 10 步路线全部执行,8 枚棋子清空,实际出现胜利弹窗 | [完整回放日志](v0.5-review/full-replays.json) |
|
||||
| 第 849 关,重制后的舒缓关 | 61 格编织盘、8 枚棋子;新保存的 8 步路线全部成功离场,正常播放结束后出现胜利弹窗 | [完整回放日志](v0.5-review/full-replays.json)、[完成画面](v0.5-review/level-849-complete.png) |
|
||||
| 第 1000 关,分段释放 | 14 次成功离场、右转及左转各一次,共 16 步全部执行。最后一枚动画结束后出现胜利弹窗;点击“完成旅程 · 回到第一关”后显示 `LEVEL 01` | [完整回放日志](v0.5-review/full-replays.json)、[完成画面](v0.5-review/level-1000-complete.png) |
|
||||
|
||||
原 `rapid-tap-app` 回归还覆盖重复点击、阻挡反馈、运动时释放新棋子、重置、撤销、旋转期间缓存点击,以及切关取消旧动画。
|
||||
|
||||
## 3. 大盘与小屏(缩放按钮方案已撤回,保留历史记录)
|
||||
|
||||
以第 1000 关的 91 格盘面,在 390×844 视口检查。最终布局哈希与此操作记录的布局相同,因此保留本组正常速度的界面证据:
|
||||
|
||||
- 默认完整显示棋盘,无页面横向溢出,棋子几何直径约 37.8 CSS px。
|
||||
- 现有样式曾隐藏所有缩放按钮。本次仅为 v0.5 恢复缩小、比例重置、放大控件,并为控件预留 48 px 区域,使它不会挡住棋盘上侧的棋子。
|
||||
- 两次放大后显示 154%,棋子几何直径约 58.3 CSS px;这是该视口与盘面下的缩放上限,不是所有设备的统一值。实际横向拖动改变画面,棋子数量仍为 14;点击比例重置后恢复 100%。[拖动与重置记录](v0.5-review/pan-reset.json)
|
||||
- 放大后右转 60°,再点击可见棋子 t13,成功离场,数量 14→13。主轨道强调随棋盘旋转;纯函数回归另外验证所有六个朝向都只强调对应真实配对。
|
||||
|
||||
[大盘原尺寸](v0.5-review/r5-mobile-fit.png) · [放大局部](v0.5-review/r5-mobile-zoom.png) · [旋转后局部](v0.5-review/r5-mobile-zoom-rotated.png) · [尺寸与点击记录](v0.5-review/r5-mobile.json)
|
||||
|
||||
这些结果证明控件与点击路径可用;手指误触、连续跟线负担及长时间观看舒适度仍需真机与真人试玩。放大视图会裁去棋盘两侧,重置比例可回到全盘。
|
||||
|
||||
## 4. 制作审核页
|
||||
|
||||
入口:[千关制作记录](../labs/campaign-review/index.html)。页面按章节浏览,可筛选体验与难度预估、直接跳关、下载单关 JSON、逐步或连续播放制作时保存的清盘路线。
|
||||
|
||||
- 390×844 与 1440×1000 视口均无横向溢出,每章只创建 50 张卡片,进入视野时才绘制缩略图。
|
||||
- 第 1 章筛选“轻巧反差”得到 5 关;输入 1000 跳至第 20 章并打开对应详情,显示 16 步记录。
|
||||
- 审核页第 1 关的连续回放完成 3 步,界面确认 3 枚棋子全部离场。[回放状态](v0.5-review/review-replay.json)
|
||||
- 自动记录从 `levels/v0.5-analysis.json` 读取;后续人工记录从独立 `levels/v0.5-reviews.json` 合并为 `manualReview`,不覆盖生成时快照。
|
||||
- 最终重新加载第 1000 关详情,确认独立文件有 1000 条人工记录、批次哈希一致,详情中的 `manualReview` 与对应文件记录逐字段一致。记录明确区分章节总览目检、浏览器抽查与尚未进行的真人校准。[合并读取证据](v0.5-review/manual-review-load.json)
|
||||
- 章节总览导出不受筛选或缩略图懒绘制影响。每张包含本章 50 关,5 列×10 行,1524×3876 像素;关号、名称、体验、结构预估和巡游指标同时保留。
|
||||
|
||||
[桌面审核页](v0.5-review/review-desktop.png) · [手机宽度审核页](v0.5-review/review-mobile.png)
|
||||
|
||||
最终批次在关闭浏览器网络缓存后的本地加载观测:关卡模块 9,622,010 字节,资源耗时 42.5 ms,页面 `loadEventEnd` 约 178.7 ms。此处没有开启移动网络限速,也不是低端手机性能测试;不能据此推断线上下载时间或冷启动预算。[加载记录](v0.5-review/load-metrics.json)
|
||||
|
||||
## 5. 回归与联系表
|
||||
|
||||
相关自动回归命令:
|
||||
|
||||
```sh
|
||||
node --test tests/campaign-browser.test.js tests/campaign-versions.test.js tests/rapid-tap-app.test.js
|
||||
```
|
||||
|
||||
22 项通过,覆盖版本注册、独立进度、URL 定位、章节边界、静态分析缓存、六方向配对强调,以及原快速连点行为。
|
||||
|
||||
20 张最终联系表位于 `docs/v0.5-review/contact-01.png` 至 `contact-20.png`,全部从上述冻结批次重新导出。[图像清单与 SHA-256](v0.5-review/contact-manifest.json)记录每张图片对应的章节、关号与尺寸。前 500 关与后 500 关的目视结论分别记录在对应视觉审核文档;联系表目检不等于逐关真人通关。第 849 关已替换为编织巡游,第 850 关保留章节收束花瓣。
|
||||
@@ -0,0 +1,118 @@
|
||||
# v0.5「千段轨迹」1000 关制作报告
|
||||
|
||||
日期:2026-09-12。首版已经冻结 1000 个可玩布局,20 章 × 50 关,直接接入原游戏运行时。旧版布局与独立进度保留。当前交付是经过规则、策略和静态画面检查的试玩版本;没有把自动通过当作已证明千关长期体验优良。
|
||||
|
||||
- [从第 1 关开始](http://localhost:4173/?campaign=v0.5&level=1)
|
||||
- [第 1000 关](http://localhost:4173/?campaign=v0.5&level=1000)
|
||||
- [制作审核页](http://localhost:4173/labs/campaign-review/index.html)
|
||||
|
||||
## 实际产出与验收
|
||||
|
||||
| 项目 | 本批结果 |
|
||||
| --- | ---: |
|
||||
| 冻结布局 / 独立求解成功 | 1000 / 1000 |
|
||||
| 忽略颜色、名称并整体旋转/镜像归一后的不同布局 | 1000 |
|
||||
| 完整回放(作者解 + 最少旋转解 + 20 种策略) | 22000 |
|
||||
| 通过回放的成功操作 | 273702 |
|
||||
| 需要旋转 / 不需要旋转 | 432 / 568 |
|
||||
| 最少旋转数的最高值 | 2 |
|
||||
| 最少旋转解中有长路的关卡 | 1000 |
|
||||
| 最少旋转解中单次最长格步骤 / 最多转弯 | 95 / 65 |
|
||||
| 每关 20 策略中出现长路的最低次数 | 16 |
|
||||
| 每关 20 策略中出现指定主长路的最低次数 | 10 |
|
||||
|
||||
长路的统计带是至少 6 次转弯;主目标还须满足该关制作卡的最低转弯数。格步骤允许一条路经过同一格的不同轨道,不等于不同格子的数量。以上是本引擎模型中的观察量,不是玩家通关率、观看率或平均时长。
|
||||
|
||||
## 形态、体验和难度
|
||||
|
||||
| 路线家族 | 关数 | 体验类型 | 关数 |
|
||||
| --- | ---: | --- | ---: |
|
||||
| 花瓣 | 183 | 长路巡游 | 285 |
|
||||
| 环绕 | 164 | 清挡放行 | 283 |
|
||||
| 螺旋 | 163 | 轻巧反差 | 120 |
|
||||
| 回折 | 164 | 旋转换路 | 172 |
|
||||
| 编织 | 164 | 分段释放 | 140 |
|
||||
| 双叶交叉 | 162 | 合计 | 1000 |
|
||||
|
||||
这六类是可变开口、可变规模和布子的路线家族,不是 1000 种独立美术外形。花瓣与编织使用棋子真正可以行驶的轨道配对。作者主棋子走过的配对中,属于强调造型的最低比例为 100.0%;完整作者清盘覆盖全盘强调配对的最低比例为 10.4%。两个分母不同:主路确实属于造型,不代表每关会把整朵花的所有路线走遍。
|
||||
|
||||
结构难度 D1–D5 的实际数量为 319 / 239 / 288 / 145 / 9。分数使用必要旋转、放行深度、开局可走比例和扫掠阻挡,不加入长路转弯数;全部标记为未经玩家校准的结构预估。后期继续有直接巡游和小盘,不把关号、盘面尺寸或棋子数直接等同于难度。
|
||||
|
||||
| 章节 | 关号 | D1 / D2 / D3 / D4 / D5 | 棋子数范围 | 需旋转关数 | 画面 |
|
||||
| --- | --- | --- | --- | ---: | --- |
|
||||
| 1 · 初见弯路 | 1–50 | 21 / 12 / 14 / 3 / 0 | 3–11 | 20 | [总览](v0.5-review/contact-01.png) |
|
||||
| 2 · 朝内的出口 | 51–100 | 19 / 10 / 11 / 9 / 1 | 3–11 | 22 | [总览](v0.5-review/contact-02.png) |
|
||||
| 3 · 绕行花园 | 101–150 | 22 / 11 / 10 / 6 / 1 | 4–14 | 20 | [总览](v0.5-review/contact-03.png) |
|
||||
| 4 · 轻轻让路 | 151–200 | 16 / 15 / 13 / 6 / 0 | 4–14 | 21 | [总览](v0.5-review/contact-04.png) |
|
||||
| 5 · 环里的风景 | 201–250 | 13 / 11 / 17 / 9 / 0 | 4–14 | 23 | [总览](v0.5-review/contact-05.png) |
|
||||
| 6 · 花瓣初开 | 251–300 | 19 / 10 / 14 / 6 / 1 | 4–14 | 20 | [总览](v0.5-review/contact-06.png) |
|
||||
| 7 · 交织之间 | 301–350 | 15 / 12 / 16 / 7 / 0 | 6–14 | 22 | [总览](v0.5-review/contact-07.png) |
|
||||
| 8 · 两岸来信 | 351–400 | 15 / 12 / 15 / 7 / 1 | 5–14 | 21 | [总览](v0.5-review/contact-08.png) |
|
||||
| 9 · 回旋的发现 | 401–450 | 15 / 9 / 21 / 4 / 1 | 6–14 | 23 | [总览](v0.5-review/contact-09.png) |
|
||||
| 10 · 层层放行 | 451–500 | 15 / 15 / 12 / 7 / 1 | 6–14 | 23 | [总览](v0.5-review/contact-10.png) |
|
||||
| 11 · 走进花心 | 501–550 | 14 / 14 / 11 / 10 / 1 | 6–14 | 24 | [总览](v0.5-review/contact-11.png) |
|
||||
| 12 · 曲径相逢 | 551–600 | 15 / 11 / 13 / 11 / 0 | 6–14 | 21 | [总览](v0.5-review/contact-12.png) |
|
||||
| 13 · 另一侧的出口 | 601–650 | 15 / 16 / 11 / 8 / 0 | 7–14 | 20 | [总览](v0.5-review/contact-13.png) |
|
||||
| 14 · 编织新路 | 651–700 | 15 / 9 / 17 / 9 / 0 | 7–15 | 23 | [总览](v0.5-review/contact-14.png) |
|
||||
| 15 · 旋开的花园 | 701–750 | 15 / 16 / 13 / 6 / 0 | 7–15 | 21 | [总览](v0.5-review/contact-15.png) |
|
||||
| 16 · 从容穿行 | 751–800 | 15 / 11 / 15 / 9 / 0 | 7–16 | 21 | [总览](v0.5-review/contact-16.png) |
|
||||
| 17 · 旧路新发现 | 801–850 | 14 / 14 / 15 / 6 / 1 | 8–16 | 21 | [总览](v0.5-review/contact-17.png) |
|
||||
| 18 · 花与回声 | 851–900 | 17 / 9 / 17 / 6 / 1 | 7–16 | 20 | [总览](v0.5-review/contact-18.png) |
|
||||
| 19 · 千回百转 | 901–950 | 15 / 12 / 16 / 7 / 0 | 7–17 | 23 | [总览](v0.5-review/contact-19.png) |
|
||||
| 20 · 一路盛放 | 951–1000 | 14 / 10 / 17 / 9 / 0 | 9–17 | 23 | [总览](v0.5-review/contact-20.png) |
|
||||
|
||||
## 制作逻辑与质量修正
|
||||
|
||||
先构造有形态的开放路线,再逆向布子并保存完整构造解。换路关与反差关包含旋转前互相阻挡、旋转后可放行的核心棋子;分段关使用经正式碰撞与求解器验证的两次换路锁组。每个槽位在同一家族和体验内比较合格候选,避免只追求一个总分。
|
||||
|
||||
每个清挡关的指定短路门在开局即可移走,移走后主棋子立刻获得长路;作者回放从这个关键动作开始。巡游关开局可连续点选。反差关主棋子朝内,旋转一次即可走上长路;分段关的最少解也必须有至少两次旋转。
|
||||
|
||||
独立审核曾发现旧候选中“另一枚长路替主目标过检”、关键长路过晚及随机探索大量绕过的问题。本批增加了指定主棋子的单独门槛:核心六策略至少四条走到主长路,20 条中至少 16 条有长路、至少 10 条走到主长路;清挡与反差另查实际兑现的放行事件。这个筛选阈值是制作约束,不是研究证明的最优比例。
|
||||
|
||||
视觉审核还退回了过于相似的 849/850 连排:849 改为中盘编织巡游,850 保留为章末重瓣分段释放。小盘布子受到实际容量限制,避免通过堆积棋子延长关卡。
|
||||
|
||||
## 操作顺序的证据边界
|
||||
|
||||
四种“先清所有可出棋子再转”的常规策略可能得到相同统计,不能视作四份独立玩家证据。表中每行只是一个确定的策略。14 条额外随机探索与核心策略分别记录;额外的未参与筛选种子由独立质量审核报告说明。
|
||||
|
||||
| 策略 | 回放数 | 清盘数 | 出现长路数 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| outer-first | 1000 | 1000 | 1000 |
|
||||
| short-first | 1000 | 1000 | 1000 |
|
||||
| long-first | 1000 | 1000 | 1000 |
|
||||
| blocker-first | 1000 | 1000 | 1000 |
|
||||
| rotate-early | 1000 | 1000 | 991 |
|
||||
| seeded-random | 1000 | 1000 | 982 |
|
||||
| seeded-random-2 | 1000 | 1000 | 912 |
|
||||
| seeded-random-3 | 1000 | 1000 | 924 |
|
||||
| seeded-random-4 | 1000 | 1000 | 913 |
|
||||
| seeded-random-5 | 1000 | 1000 | 929 |
|
||||
| seeded-random-6 | 1000 | 1000 | 923 |
|
||||
| seeded-random-7 | 1000 | 1000 | 918 |
|
||||
| seeded-random-8 | 1000 | 1000 | 896 |
|
||||
| seeded-random-9 | 1000 | 1000 | 924 |
|
||||
| seeded-random-10 | 1000 | 1000 | 926 |
|
||||
| seeded-random-11 | 1000 | 1000 | 916 |
|
||||
| seeded-random-12 | 1000 | 1000 | 910 |
|
||||
| seeded-random-13 | 1000 | 1000 | 922 |
|
||||
| seeded-random-14 | 1000 | 1000 | 900 |
|
||||
| seeded-random-15 | 1000 | 1000 | 917 |
|
||||
|
||||
## 画面、浏览器与尚未验证的范围
|
||||
|
||||
- [前 500 关静态审阅](v0.5-visual-audit-early.md)、[后 500 关静态审阅](v0.5-visual-audit-late.md):20 张逐章联系表的全局目检,不冒充 1000 次手玩。
|
||||
- [浏览器记录](v0.5-browser-review.md):快速连点、清挡即发、反差、分段解、第 1000 关结算、选关/版本/缩放的实际样本与尺寸。
|
||||
- [独立质量审核](v0.5-quality-audit.md):全量复查、主奖励出现时机、未参与筛选的策略与后续复审项。
|
||||
- `levels/v0.5-reviews.json` 单独保存 AI 辅助静态审阅与浏览器样本状态;布局分析中的 `visual: pending` 是生成时快照,审核页会并列显示后续记录。
|
||||
|
||||
客户端读取冻结关卡,不在进入每关时实时生成。当前实现按章显示 50 项,但关卡模块仍一次载入全部数据;本地加载验证不等同于移动网络性能验证。真人新手/熟练玩家的连续游玩、疲劳、图案辨识度及留存尚未测量。原生 Cocos/Android/iOS 运行与实机触控没有在本轮验收。
|
||||
|
||||
## 文件与复现
|
||||
|
||||
布局全集:`levels/v0.5.json`;分章:`levels/v0.5/chapter-01.json` 至 `chapter-20.json`;浏览器模块:`src/levels-v05.js`。逐关配方在 `levels/v0.5-recipes.json`,策略与实际路径在 `levels/v0.5-analysis.json`,本批独立验证在 `levels/v0.5-validation.json`。
|
||||
|
||||
流水线 SHA-256:`ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d`。
|
||||
|
||||
`npm run levels:v05` 离线重新生产;`npm run levels:v05:verify` 重求解并回放冻结数据;`node scripts/write-production-report.mjs` 只对已通过对应哈希验证的数据更新本报告。源码指纹改变时不允许混用旧检查点。
|
||||
|
||||
方法与最初假设见[千关制作方案](1000-level-production-plan.md)、[设计准则](level-design-principles-v2.md)和[论文与竞品知识库](level-design-knowledge/README.md)。
|
||||
@@ -0,0 +1,203 @@
|
||||
# v0.5 千关质量独立审核
|
||||
|
||||
审核日期:2026-09-12。对象:正式冻结的 1000 关,流水线标识 `ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d`。
|
||||
|
||||
**结论:1000 关通过本轮规则、回放与既定自动体验门槛。旧版“别枚长路冒充主目标”和“清完大部分棋子才让指定门生效”的问题已修复。本轮未发现必须按规则或既定自动门槛退回的关卡;视觉辨识、动画观看感受、真人难度与长期新鲜感仍未由这些数据证明。** 下文列出继续试玩时应优先观察的具体关卡。
|
||||
|
||||
## 1. 数据与审核方法
|
||||
|
||||
直接读取 [1000 关冻结布局](../levels/v0.5.json)、[逐关回放与评价](../levels/v0.5-analysis.json)、[生成配方及源码哈希](../levels/v0.5-recipes.json)。核对清单中的全部源码哈希与当前文件一致。本审核没有修改布局、生成器或筛选门槛。
|
||||
|
||||
本次独立检查包括:
|
||||
|
||||
- 每关重新调用正式 `solveRotations`,检查有效数据、无搜索触顶、最少旋转数,以及整体旋转/镜像归一后的精确重复。
|
||||
- 用正式 `Game` 重放每关的参考解、作者解及 20 种策略,共 **22,000 套回放、273,702 个成功动作**。全部清盘,存档中的逐棋子弯数、步骤数、动作序号与朝向均和实际执行一致。
|
||||
- 验证每关在 20 策略中至少 16 条出现任意长路、至少 10 条出现指定主长路;前 6 策略至少 4 条出现指定主长路。清挡关至少 8/20 兑现指定主棋子的轨道内清挡长路,反差关至少 6/20 兑现指定主反差。原有前 6 策略门槛同时核验。
|
||||
- 对全部 283 个清挡关额外核验:开局指定挡子可走,只移去这枚挡子,主棋子即能离场。对反差关与分段关分别核验必须旋转、至少两次旋转。
|
||||
- 另挑 30 关扩展至 32 策略;其中后 12 个种子未参与本批逐候选筛选,单独列为扩展检查。
|
||||
|
||||
这里的“长路”统一用 **至少 6 弯**作统计带;生产中指定主奖励仍按各配方的 `minHeroBends` 核验。这个分界是本轮诊断口径,不是论文给出的质量标准。
|
||||
|
||||
“首次可点长路”是在一条完整回放的每个动作前,用真实剩余棋子和底盘朝向检查是否已存在可成功离场的长路。它表示**沿该顺序首次可点的时点**,不声称已经穷尽所有操作,找到全局最快的奖励解。
|
||||
|
||||
所有策略能读取精确可出信息,并按有限规则选择点击与旋转;它们没有模拟人看错轨道、误触、注意力转移和动画遮挡。回放次数不是玩家人数,也不等于相互独立的解法数量。
|
||||
|
||||
## 2. 正式版的可靠性与奖励曝光
|
||||
|
||||
| 项目 | 结果 |
|
||||
| --- | ---: |
|
||||
| 数据有效、独立可解、无搜索触顶 | 1000/1000 |
|
||||
| 精确整体对称去重后的布局 | 1000 |
|
||||
| 作者解及参考解完整清盘 | 各 1000/1000 |
|
||||
| 已存策略完整清盘 | 20000/20000 |
|
||||
| 参考解至少出现一条长路 | 1000/1000 |
|
||||
| 每关 20 策略的任意长路出现次数范围 | 16–20 |
|
||||
| 每关 20 策略的指定主长路出现次数范围 | 10–20 |
|
||||
| 清挡关指定清挡长路兑现次数范围 | 8–19/20 |
|
||||
| 反差关指定长路反差兑现次数范围 | 9–20/20 |
|
||||
| 必须旋转的关卡 | 432/1000 |
|
||||
| 最少旋转数上限 | 2 |
|
||||
|
||||
长路与主长路应分开看:
|
||||
|
||||
| 策略组 | 回放数 | 任意长路出现 | 指定主长路出现 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 外圈优先、短路优先、长路优先、挡子优先 | 4000 | 4000 | 4000 |
|
||||
| 较早旋转 | 1000 | 991 | 952 |
|
||||
| 第一组固定种子的随机探索 | 1000 | 982 | 875 |
|
||||
| 其余 14 组固定种子的随机探索 | 14000 | 12830 | 11592 |
|
||||
| 全部 | 20000 | 18803 | 17419 |
|
||||
|
||||
四种常规策略虽然点击次序不同,但都先清当前能走的棋子再旋转。本游戏中成功消除只减少占用,因此它们能清掉的集合常常相同;本批四者路径分类总数完全一致。这是规则与策略造成的相关性,不能视为四份独立玩家证据。所有比例均只描述指定算法的执行结果。
|
||||
|
||||
精确去重覆盖整体棋盘、轨道、棋子和箭头的同步对称变换,并忽略名称、ID 与颜色。只转底盘会改变规则状态,未被误当成整体等价变换。**1000 个精确不同布局仍不自动证明有 1000 种独特体验。**
|
||||
|
||||
## 3. 回报时点和实际行进构成
|
||||
|
||||
参考解的 10208 次成功离场中:
|
||||
|
||||
| 行进类型 | 次数 | 占成功离场比例 |
|
||||
| --- | ---: | ---: |
|
||||
| 直出,0 弯 | 6181 | 60.6% |
|
||||
| 1 弯 | 1734 | 17.0% |
|
||||
| 2–5 弯 | 730 | 7.2% |
|
||||
| 至少 6 弯 | 1563 | 15.3% |
|
||||
|
||||
共有 673 关的参考解恰好只有一条长路。单路径弯数最高 65,步骤数最高 95,两项分别取最大值。直出棋子可以承担让路、教学和收尾作用,不能仅按弯数淘汰;同时,“1000 关都有长路”也不能被解读成多数点击都在长路行进。
|
||||
|
||||
323 关开局已经有可直接点击的长路。沿最少旋转参考解,343 关需要先完成至少一半消除,才首次出现可点长路;沿作者解为 221 关,沿外圈优先策略为 554 关。三者差异说明:**奖励是否早已可获得,与玩家/回放是否选择先去获得,是两件事。**
|
||||
|
||||
| 体验类型 | 关数 | 平均棋子数 | 参考顺序中先消除至少一半才出现可点长路 | 参考解首条长路是最后一枚 |
|
||||
| --- | ---: | ---: | ---: | ---: |
|
||||
| 长路巡游 | 285 | 8.16 | 0 | 0 |
|
||||
| 清挡放行 | 283 | 11.28 | 0 | 10 |
|
||||
| 轻巧反差 | 120 | 10.57 | 111 | 0 |
|
||||
| 旋转换路 | 172 | 10.17 | 127 | 0 |
|
||||
| 分段释放 | 140 | 11.92 | 105 | 2 |
|
||||
|
||||
关键判断:
|
||||
|
||||
- **清挡已从结构上变轻巧。** 全部 283 关都能开局先清指定挡子,立即点击主棋子。第 3、6、9 关沿作者解都是一次清挡后可点长路。外圈策略可能晚点这个挡子,那是顺序选择,不能再说关卡强制先清其余棋子。
|
||||
- **反差可以早兑现。** 全部反差关作者解都先做一次旋转再点目标。参考解先清免费出口,导致 111/120 关的首次长路偏后,不代表这些关必须先完成那些消除。
|
||||
- **旋转与分段关仍需检查连玩节奏。** 第 697 关沿参考和作者顺序都先消除 12/14 枚,才出现可点长路;其中 13 枚为直出。第 949 关沿参考顺序先消除 13/14 枚,作者顺序先消除 12/14 枚。这里的时点不排除其他旋转顺序更早兑现,但值得优先观察是否显得前段过于机械。分段关当前意图是“至少两次换路后放出主路线”,没有宣称每个阶段都出现长路。
|
||||
|
||||
## 4. 未参与筛选种子的扩展检查
|
||||
|
||||
取第 1、4、8、12、16、20 章各五种体验,共 30 关,六种路线家族各 5 关。每组先优先补足较少覆盖的家族,再取原 20 策略中主长路曝光较低、关号较早的关卡。**这是偏向薄弱处的目的抽样,不是随机代表样本。**
|
||||
|
||||
30 关扩展到 32 策略后,960 次策略回放全部清盘。前 20 种和生产筛选重合;真正新增的后 12 种共 360 次:
|
||||
|
||||
| 范围 | 回放数 | 任意长路出现 | 指定主长路出现 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| 这 30 关已参与筛选的 20 策略 | 600 | 546(91.0%) | 459(76.5%) |
|
||||
| 这 30 关未参与本批筛选的后 12 策略 | 360 | 291(80.8%) | 231(64.2%) |
|
||||
|
||||
后 12 种全部为随机探索,而前 20 种还包括相关性很高的常规策略,组别构成也不同。因此,两行差值同时包含未参与筛选的种子变化和策略构成差异,不能直接当作一个“过拟合百分比”,更不能换算成玩家概率。
|
||||
|
||||
下表最后一列只在清挡/反差关记录“指定目标实际兑现对应长路”的次数:
|
||||
|
||||
| 关号 | 体验/路线 | 已筛选20种:任意长路 | 新增12种:任意长路 | 新增12种:主长路 | 新增12种:主清挡/反差 |
|
||||
| --- | --- | ---: | ---: | ---: | ---: |
|
||||
| 1 | 长路巡游/回折 | 16/20 | 6/12 | 6/12 | — |
|
||||
| 13 | 清挡放行/编织 | 16/20 | 8/12 | 2/12 | 2/12 |
|
||||
| 12 | 轻巧反差/环绕 | 20/20 | 11/12 | 5/12 | 4/12 |
|
||||
| 46 | 旋转换路/双叶跨区 | 17/20 | 8/12 | 8/12 | — |
|
||||
| 39 | 分段释放/螺旋 | 20/20 | 12/12 | 12/12 | — |
|
||||
| 158 | 长路巡游/花瓣 | 18/20 | 11/12 | 11/12 | — |
|
||||
| 166 | 清挡放行/编织 | 19/20 | 11/12 | 10/12 | 2/12 |
|
||||
| 161 | 轻巧反差/回折 | 20/20 | 11/12 | 5/12 | 5/12 |
|
||||
| 189 | 旋转换路/双叶跨区 | 17/20 | 9/12 | 7/12 | — |
|
||||
| 164 | 分段释放/螺旋 | 20/20 | 12/12 | 12/12 | — |
|
||||
| 367 | 长路巡游/环绕 | 20/20 | 12/12 | 12/12 | — |
|
||||
| 366 | 清挡放行/花瓣 | 20/20 | 12/12 | 12/12 | 5/12 |
|
||||
| 357 | 轻巧反差/环绕 | 17/20 | 8/12 | 5/12 | 5/12 |
|
||||
| 368 | 旋转换路/螺旋 | 20/20 | 12/12 | 7/12 | — |
|
||||
| 352 | 分段释放/花瓣 | 20/20 | 12/12 | 12/12 | — |
|
||||
| 563 | 长路巡游/双叶跨区 | 16/20 | 7/12 | 5/12 | — |
|
||||
| 554 | 清挡放行/编织 | 16/20 | 9/12 | 4/12 | 3/12 |
|
||||
| 553 | 轻巧反差/回折 | 16/20 | 7/12 | 3/12 | 3/12 |
|
||||
| 576 | 旋转换路/编织 | 16/20 | 10/12 | 8/12 | — |
|
||||
| 557 | 分段释放/回折 | 19/20 | 10/12 | 9/12 | — |
|
||||
| 771 | 长路巡游/双叶跨区 | 18/20 | 6/12 | 4/12 | — |
|
||||
| 790 | 清挡放行/花瓣 | 19/20 | 10/12 | 8/12 | 6/12 |
|
||||
| 769 | 轻巧反差/回折 | 18/20 | 8/12 | 4/12 | 3/12 |
|
||||
| 782 | 旋转换路/螺旋 | 19/20 | 10/12 | 10/12 | — |
|
||||
| 773 | 分段释放/环绕 | 20/20 | 12/12 | 12/12 | — |
|
||||
| 951 | 长路巡游/双叶跨区 | 16/20 | 6/12 | 4/12 | — |
|
||||
| 978 | 清挡放行/编织 | 16/20 | 10/12 | 6/12 | 5/12 |
|
||||
| 953 | 轻巧反差/环绕 | 17/20 | 7/12 | 4/12 | 3/12 |
|
||||
| 952 | 旋转换路/花瓣 | 20/20 | 12/12 | 12/12 | — |
|
||||
| 968 | 分段释放/螺旋 | 20/20 | 12/12 | 12/12 | — |
|
||||
|
||||
**优先试玩观察:**
|
||||
|
||||
- 第 13 关:单门立即放行确实成立,但额外旋转探索中指定主长路和主清挡都只有 2/12;任意长路为 8/12。观察玩家是否能辨认指定挡子,以及主动换路后是否仍有足够回报。
|
||||
- 第 553 关:新增策略主长路与主反差都是 3/12,任意长路为 7/12。检查“一转就懂”的视觉提示与不同旋转方向的体验。
|
||||
- 第 1、771、951 关:新增策略任意长路各 6/12。它们开局已有长路,常规点击能够兑现;弱点主要发生在主动旋转后的替代路线。不能据此直接否定直接巡游关,也不应称所有探索方式都能保留同一奖励。
|
||||
|
||||
这些是后续体验检查优先级,不是本轮规则失败。若之后使用这些额外种子继续调参,它们便不再是下一批的未参与筛选种子,下一批应换一组独立记录的检查种子。
|
||||
|
||||
## 5. 难度曲线、工作量与相邻变化
|
||||
|
||||
结构档位为 D1 319、D2 239、D3 288、D4 145、D5 9。评分只使用最少旋转、放行层次、开局出口约束及侧擦碰阻挡等结构量;长路弯数没有直接加到难度分中。所有关卡仍标记 `structural-estimate`、`playerCalibrated: false`。
|
||||
|
||||
| 章 | 平均结构档位 | 平均棋子数 | 必须旋转 | 参考顺序中长路偏后 |
|
||||
| --- | ---: | ---: | ---: | ---: |
|
||||
| 1 | 1.98 | 7.22 | 20/50 | 17/50 |
|
||||
| 2 | 2.26 | 7.54 | 22/50 | 18/50 |
|
||||
| 3 | 2.06 | 8.24 | 20/50 | 18/50 |
|
||||
| 4 | 2.18 | 8.96 | 21/50 | 18/50 |
|
||||
| 5 | 2.44 | 8.90 | 23/50 | 18/50 |
|
||||
| 6 | 2.20 | 8.76 | 20/50 | 15/50 |
|
||||
| 7 | 2.30 | 9.82 | 22/50 | 16/50 |
|
||||
| 8 | 2.34 | 9.78 | 21/50 | 17/50 |
|
||||
| 9 | 2.34 | 10.12 | 23/50 | 18/50 |
|
||||
| 10 | 2.28 | 10.92 | 23/50 | 14/50 |
|
||||
| 11 | 2.40 | 10.24 | 24/50 | 21/50 |
|
||||
| 12 | 2.40 | 10.72 | 21/50 | 15/50 |
|
||||
| 13 | 2.24 | 10.92 | 20/50 | 15/50 |
|
||||
| 14 | 2.40 | 11.34 | 23/50 | 18/50 |
|
||||
| 15 | 2.20 | 11.48 | 21/50 | 17/50 |
|
||||
| 16 | 2.36 | 11.78 | 21/50 | 17/50 |
|
||||
| 17 | 2.32 | 11.88 | 21/50 | 15/50 |
|
||||
| 18 | 2.30 | 11.80 | 20/50 | 17/50 |
|
||||
| 19 | 2.30 | 12.10 | 23/50 | 19/50 |
|
||||
| 20 | 2.42 | 11.64 | 23/50 | 20/50 |
|
||||
|
||||
第一章平均结构档位 1.98,第 20 章 2.42,中间有波动;平均棋子数从 7.22 增至 11.64。**后期工作量的增加,比结构档位的增加更明显。** 这条曲线是当前编排与估计器的结果,尚不能说已匹配熟练玩家的成长。
|
||||
|
||||
同一种主体验连续最多 2 关;同一结构档位连续最多 3 关。相邻粗粒度体验签名相同的只有 1→2、195→196,均是巡游关,但路线家族不同。这适合保留作连续观感检查,不构成精确重复。反过来,签名不同也不能证明视觉上一定新鲜。
|
||||
|
||||
有 141 个相邻位置跨越至少 3 个结构档位,包含挑战到舒缓及舒缓到挑战两个方向。不能把这些跳动都判为坏节奏,也不能说已形成平滑真人难度曲线;应优先连续试玩第 31–40 关、第 49–56 关及后期章节交界。档位是序数估计,表中均值只用于比较当前编排轮廓。
|
||||
|
||||
## 6. 形状证据的边界
|
||||
|
||||
主棋子已行驶轨道中属于设计形状轨道的比例最低为 100%。这说明主路线没有依赖未标记的装饰轨道来满足长度,但**不等于每关把整朵花或整幅图形都走了一遍**。整盘已行驶的设计轨道比例最低为 10.4%,分母不同。
|
||||
|
||||
本报告没有逐一观看 1000 关动态图像,也没有检查全部手机尺寸下的触控、连点后的视觉遮挡和超长路线的跟随感。上述数字不能替代视觉辨识与实际播放检查。第 849 关现为编织巡游,第 850 关为花瓣分段释放;数据层面的类别差异已确认,视觉修改的效果应由单独的画面评审确认。
|
||||
|
||||
## 7. 旧版问题与本轮修复依据
|
||||
|
||||
本节仅描述旧流水线 `a2188a0951cf3985337e2d3cfaff5ca97f5dcd25c426c5373512f6b0e6684193`,其数字**未混入以上正式版指标**。
|
||||
|
||||
旧版虽有 1000 个可解布局和 22000 套可完成回放,仍有 61 关的前 6 策略一次也不走指定主长路;其他棋子的长路撑住了总指标。旧第 965 关沿参考解先清 16 枚,才出现唯一长路;32 策略只有 10 条出现任意长路,27 种随机探索没有一次兑现指定主清挡长路。这些结果推动了主棋子身份、即刻清挡和更广策略保留条件的修订。
|
||||
|
||||
正式版重验的具体变化:
|
||||
|
||||
- 四种常规策略现在分别在 1000/1000 关走到指定主长路。
|
||||
- 第 965 关作者解改为第 1 个动作清挡、第 2 个动作启动 11 弯主路;20 策略任意长路 18 次、指定主长路 12 次、指定主清挡长路 10 次。
|
||||
- 第 361 关指定主长路为 17/20;第 773 关为 20/20;第 798 关为 17/20。它们没有再用另一枚长路掩盖指定主目标的落空。
|
||||
- 首次可点长路偏后的关数,沿参考顺序从 593 降至 343;这项变化也包含布局、棋子数量及回放顺序修改,不能单独归因于某一项算法。
|
||||
|
||||
这一轮证明了“可解”与“主体验确实出现”必须分开验收,也证明了门槛需要在实际候选上接受反例检查。它没有证明目前 16/20、10/20 等阈值是长期最优配置。
|
||||
|
||||
## 8. 可追溯标识
|
||||
|
||||
- 布局文件 SHA-256:`b3d599e637c1aa9820cbb9186cd9be49421d81b3e2ad206f4bfa1ee366f39017`
|
||||
- 分析文件 SHA-256:`a691edd0cc78e750953934868e6bfc21e4c79c55088bbfa8d93c2eb0ba4b33c4`
|
||||
- 生成流水线 SHA-256:`ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d`
|
||||
- 正式重复核验入口:[verify-production-levels.mjs](../scripts/verify-production-levels.mjs)
|
||||
- 策略、对称去重与评价定义:[campaign-evidence.js](../src/campaign-evidence.js)
|
||||
- 设计依据:[现行关卡准则](level-design-principles-v2.md)、[关卡知识库](level-design-knowledge/README.md)
|
||||
|
||||
后续版本更换布局、规则或策略后,应重新核验并另存版本标识,不直接沿用本报告数字。
|
||||
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
@@ -0,0 +1,185 @@
|
||||
{
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"files": [
|
||||
{
|
||||
"chapter": 1,
|
||||
"first": 1,
|
||||
"last": 50,
|
||||
"path": "docs/v0.5-review/contact-01.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "7d427f9540b3a2357358367f47d2b83e4cc52fecf88b733bc3f8f0829421495c"
|
||||
},
|
||||
{
|
||||
"chapter": 2,
|
||||
"first": 51,
|
||||
"last": 100,
|
||||
"path": "docs/v0.5-review/contact-02.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "ba33ac284f23d8d1dd197b259ccf9ace37f9d24c41ef31a81dd091124d92ac1e"
|
||||
},
|
||||
{
|
||||
"chapter": 3,
|
||||
"first": 101,
|
||||
"last": 150,
|
||||
"path": "docs/v0.5-review/contact-03.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "04edcf0acd252cfd7039320be1360e21bb22d7972d4a66ea56d2c81e9d599e19"
|
||||
},
|
||||
{
|
||||
"chapter": 4,
|
||||
"first": 151,
|
||||
"last": 200,
|
||||
"path": "docs/v0.5-review/contact-04.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "325b1ccdbb9c24af981eb1560ad5f1b4f7a98e2bf0882ddd0c00062b045fb8a6"
|
||||
},
|
||||
{
|
||||
"chapter": 5,
|
||||
"first": 201,
|
||||
"last": 250,
|
||||
"path": "docs/v0.5-review/contact-05.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "4d117b50cc82b720be9ecd94c72ce8a29cc336eafe26d91f4fd8a0a7c258e375"
|
||||
},
|
||||
{
|
||||
"chapter": 6,
|
||||
"first": 251,
|
||||
"last": 300,
|
||||
"path": "docs/v0.5-review/contact-06.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "1c83dd3c799886099ff39c1a883753e20c7dcd9e404505a85638ebecb8987063"
|
||||
},
|
||||
{
|
||||
"chapter": 7,
|
||||
"first": 301,
|
||||
"last": 350,
|
||||
"path": "docs/v0.5-review/contact-07.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "0d943a96cf661409357d18dd2429fb806f4da738665ac201a4d43d0ad9713917"
|
||||
},
|
||||
{
|
||||
"chapter": 8,
|
||||
"first": 351,
|
||||
"last": 400,
|
||||
"path": "docs/v0.5-review/contact-08.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "f892fd7a96b7a9793ce14d63f8b636d2a48aeb53ad3b907b1d8b715afd44ec0f"
|
||||
},
|
||||
{
|
||||
"chapter": 9,
|
||||
"first": 401,
|
||||
"last": 450,
|
||||
"path": "docs/v0.5-review/contact-09.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "e27b08364f9c3f20ccd9cf804e61cb480dfa583d933136a5fbf6a2eb86bf43a3"
|
||||
},
|
||||
{
|
||||
"chapter": 10,
|
||||
"first": 451,
|
||||
"last": 500,
|
||||
"path": "docs/v0.5-review/contact-10.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "e47a2b9fbff70c3699f6c7ddf4cad64d60e066630daf25e05d2014a4eb1dcb47"
|
||||
},
|
||||
{
|
||||
"chapter": 11,
|
||||
"first": 501,
|
||||
"last": 550,
|
||||
"path": "docs/v0.5-review/contact-11.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "9e5ecd87383af7c008ddcffaed930eb7a0b5e726526fcfdc8cd3dde93e4adbe4"
|
||||
},
|
||||
{
|
||||
"chapter": 12,
|
||||
"first": 551,
|
||||
"last": 600,
|
||||
"path": "docs/v0.5-review/contact-12.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "183c8cf1348a8c5f4a2505e98f6152b2d986a06a6cb4c112f132b2264491759a"
|
||||
},
|
||||
{
|
||||
"chapter": 13,
|
||||
"first": 601,
|
||||
"last": 650,
|
||||
"path": "docs/v0.5-review/contact-13.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "4a70031fd760f440a20dba999f132c0bca4e7c3fb451c78ae4e37a9646fe6add"
|
||||
},
|
||||
{
|
||||
"chapter": 14,
|
||||
"first": 651,
|
||||
"last": 700,
|
||||
"path": "docs/v0.5-review/contact-14.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "5e65d366050cd7b3a259b7e6e6e465adffbb0f18063e2448971472087757d6fd"
|
||||
},
|
||||
{
|
||||
"chapter": 15,
|
||||
"first": 701,
|
||||
"last": 750,
|
||||
"path": "docs/v0.5-review/contact-15.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "a72dfe42b728ccbabd09c8fca4172d725f37766391af872d89163b04c3551389"
|
||||
},
|
||||
{
|
||||
"chapter": 16,
|
||||
"first": 751,
|
||||
"last": 800,
|
||||
"path": "docs/v0.5-review/contact-16.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "d8dda5c1d53d35078bb15a67b615101e011562a42737b404bb017f664bf316ee"
|
||||
},
|
||||
{
|
||||
"chapter": 17,
|
||||
"first": 801,
|
||||
"last": 850,
|
||||
"path": "docs/v0.5-review/contact-17.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "811b59cd004b0e33046ba7c96109a2868ef6a206daa93d07f185dd4098ad31d3"
|
||||
},
|
||||
{
|
||||
"chapter": 18,
|
||||
"first": 851,
|
||||
"last": 900,
|
||||
"path": "docs/v0.5-review/contact-18.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "078ccf07931bac8893fca74019089cd5e46f7dfe1b0ccf13c1d81d8fd3f0d968"
|
||||
},
|
||||
{
|
||||
"chapter": 19,
|
||||
"first": 901,
|
||||
"last": 950,
|
||||
"path": "docs/v0.5-review/contact-19.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "77ac13cf98305b694f6f1b820dc5f272fb956f3984d7a76ba2b48700587228dd"
|
||||
},
|
||||
{
|
||||
"chapter": 20,
|
||||
"first": 951,
|
||||
"last": 1000,
|
||||
"path": "docs/v0.5-review/contact-20.png",
|
||||
"width": 1524,
|
||||
"height": 3876,
|
||||
"sha256": "5aec4c5b52cda1185ce8a8aad088d3674b4b192816b9f9fe0690646fa2fe14ae"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"levels": 1000,
|
||||
"samples": [
|
||||
{
|
||||
"number": 1,
|
||||
"id": "trail-v05-0001",
|
||||
"name": "回折 · 长路巡游",
|
||||
"layoutHash": "d40409ef64404be3faaddd00576309648439d7d5b34a991f91a10a76f62090a0",
|
||||
"expected": "d40409ef64404be3faaddd00576309648439d7d5b34a991f91a10a76f62090a0",
|
||||
"verified": true
|
||||
},
|
||||
{
|
||||
"number": 3,
|
||||
"id": "trail-v05-0003",
|
||||
"name": "花瓣 · 清挡放行",
|
||||
"layoutHash": "9b6259948949878233b94977dffccc9a2cd1a22b2ae7961b723af67ec85a9d49",
|
||||
"expected": "9b6259948949878233b94977dffccc9a2cd1a22b2ae7961b723af67ec85a9d49",
|
||||
"verified": true
|
||||
},
|
||||
{
|
||||
"number": 4,
|
||||
"id": "trail-v05-0004",
|
||||
"name": "螺旋 · 轻巧反差",
|
||||
"layoutHash": "aaa748bc33cb199f27478a76b23e71959082f5974a93b8173bde29c7466ca833",
|
||||
"expected": "aaa748bc33cb199f27478a76b23e71959082f5974a93b8173bde29c7466ca833",
|
||||
"verified": true
|
||||
},
|
||||
{
|
||||
"number": 34,
|
||||
"id": "trail-v05-0034",
|
||||
"name": "环绕 · 分段释放",
|
||||
"layoutHash": "31736443aaa234fe34fee7a6263d75a679ab46d37dd548f28304085d650b6927",
|
||||
"expected": "31736443aaa234fe34fee7a6263d75a679ab46d37dd548f28304085d650b6927",
|
||||
"verified": true
|
||||
},
|
||||
{
|
||||
"number": 849,
|
||||
"id": "trail-v05-0849",
|
||||
"name": "编织 · 长路巡游",
|
||||
"layoutHash": "82243dd0eee425b1ce2bc640ca184046712959fe3090d0f8287f0e0645367838",
|
||||
"expected": "82243dd0eee425b1ce2bc640ca184046712959fe3090d0f8287f0e0645367838",
|
||||
"verified": true
|
||||
},
|
||||
{
|
||||
"number": 1000,
|
||||
"id": "trail-v05-1000",
|
||||
"name": "花瓣 · 分段释放",
|
||||
"layoutHash": "c855ba95f504d7280b81820c2af64010fddcfc731041c3b176e7d88301249ba9",
|
||||
"expected": "c855ba95f504d7280b81820c2af64010fddcfc731041c3b176e7d88301249ba9",
|
||||
"verified": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,393 @@
|
||||
[
|
||||
{
|
||||
"number": 34,
|
||||
"tiles": 8,
|
||||
"cells": 37,
|
||||
"layoutHash": "31736443aaa234fe34fee7a6263d75a679ab46d37dd548f28304085d650b6927",
|
||||
"actions": [
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t7"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t6"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t5"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t4"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t3"
|
||||
},
|
||||
{
|
||||
"type": "rotate",
|
||||
"direction": 1
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t1"
|
||||
},
|
||||
{
|
||||
"type": "rotate",
|
||||
"direction": -1
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t0"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t2"
|
||||
}
|
||||
],
|
||||
"kind": "stages",
|
||||
"entry": "LEVEL 34",
|
||||
"reduced": false,
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"events": [
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t7",
|
||||
"status": "exit",
|
||||
"remaining": 7
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t6",
|
||||
"status": "exit",
|
||||
"remaining": 6
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t5",
|
||||
"status": "exit",
|
||||
"remaining": 5
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t4",
|
||||
"status": "exit",
|
||||
"remaining": 4
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t3",
|
||||
"status": "exit",
|
||||
"remaining": 3
|
||||
},
|
||||
{
|
||||
"method": "rotate",
|
||||
"value": 1,
|
||||
"status": "rotated",
|
||||
"remaining": 3
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t1",
|
||||
"status": "exit",
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"method": "rotate",
|
||||
"value": -1,
|
||||
"status": "rotated",
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t0",
|
||||
"status": "exit",
|
||||
"remaining": 1
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t2",
|
||||
"status": "exit",
|
||||
"remaining": 0
|
||||
}
|
||||
],
|
||||
"remaining": "0",
|
||||
"wonDialog": true
|
||||
},
|
||||
{
|
||||
"number": 849,
|
||||
"tiles": 8,
|
||||
"cells": 61,
|
||||
"layoutHash": "82243dd0eee425b1ce2bc640ca184046712959fe3090d0f8287f0e0645367838",
|
||||
"actions": [
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t0"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t7"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t6"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t5"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t4"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t3"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t2"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t1"
|
||||
}
|
||||
],
|
||||
"kind": "tour",
|
||||
"entry": "LEVEL 849",
|
||||
"reduced": false,
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"events": [
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t0",
|
||||
"status": "exit",
|
||||
"remaining": 7
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t7",
|
||||
"status": "exit",
|
||||
"remaining": 6
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t6",
|
||||
"status": "exit",
|
||||
"remaining": 5
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t5",
|
||||
"status": "exit",
|
||||
"remaining": 4
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t4",
|
||||
"status": "exit",
|
||||
"remaining": 3
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t3",
|
||||
"status": "exit",
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t2",
|
||||
"status": "exit",
|
||||
"remaining": 1
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t1",
|
||||
"status": "exit",
|
||||
"remaining": 0
|
||||
}
|
||||
],
|
||||
"remaining": "0",
|
||||
"wonDialog": true
|
||||
},
|
||||
{
|
||||
"number": 1000,
|
||||
"tiles": 14,
|
||||
"actions": [
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t13"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t12"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t11"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t10"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t9"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t8"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t7"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t6"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t5"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t4"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t3"
|
||||
},
|
||||
{
|
||||
"type": "rotate",
|
||||
"direction": 1
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t1"
|
||||
},
|
||||
{
|
||||
"type": "rotate",
|
||||
"direction": -1
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t0"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t2"
|
||||
}
|
||||
],
|
||||
"kind": "stages",
|
||||
"entry": "LEVEL 1000",
|
||||
"reduced": false,
|
||||
"events": [
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t13",
|
||||
"status": "exit",
|
||||
"remaining": 13
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t12",
|
||||
"status": "exit",
|
||||
"remaining": 12
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t11",
|
||||
"status": "exit",
|
||||
"remaining": 11
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t10",
|
||||
"status": "exit",
|
||||
"remaining": 10
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t9",
|
||||
"status": "exit",
|
||||
"remaining": 9
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t8",
|
||||
"status": "exit",
|
||||
"remaining": 8
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t7",
|
||||
"status": "exit",
|
||||
"remaining": 7
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t6",
|
||||
"status": "exit",
|
||||
"remaining": 6
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t5",
|
||||
"status": "exit",
|
||||
"remaining": 5
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t4",
|
||||
"status": "exit",
|
||||
"remaining": 4
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t3",
|
||||
"status": "exit",
|
||||
"remaining": 3
|
||||
},
|
||||
{
|
||||
"method": "rotate",
|
||||
"value": 1,
|
||||
"status": "rotated",
|
||||
"remaining": 3
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t1",
|
||||
"status": "exit",
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"method": "rotate",
|
||||
"value": -1,
|
||||
"status": "rotated",
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t0",
|
||||
"status": "exit",
|
||||
"remaining": 1
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t2",
|
||||
"status": "exit",
|
||||
"remaining": 0
|
||||
}
|
||||
],
|
||||
"remaining": "0",
|
||||
"wonDialog": true,
|
||||
"nextButton": "完成旅程 · 回到第一关 ",
|
||||
"returnedLevel": "LEVEL 01",
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"layoutHash": "c855ba95f504d7280b81820c2af64010fddcfc731041c3b176e7d88301249ba9",
|
||||
"retainedByIdenticalLayoutHash": true,
|
||||
"replaySource": "development-snapshot-witness"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"gate": {
|
||||
"number": 3,
|
||||
"heroBefore": "blocked",
|
||||
"tiles": 5,
|
||||
"kind": "gate",
|
||||
"heroAfterGate": "exit",
|
||||
"events": [
|
||||
{
|
||||
"id": "t1",
|
||||
"status": "exit",
|
||||
"at": 345,
|
||||
"routeCells": 2,
|
||||
"remaining": 4
|
||||
},
|
||||
{
|
||||
"id": "t0",
|
||||
"status": "exit",
|
||||
"at": 380.59999999403954,
|
||||
"routeCells": 13,
|
||||
"remaining": 3
|
||||
}
|
||||
],
|
||||
"layoutHash": "9b6259948949878233b94977dffccc9a2cd1a22b2ae7961b723af67ec85a9d49",
|
||||
"retainedByIdenticalLayoutHash": true,
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d"
|
||||
},
|
||||
"contrast": {
|
||||
"number": 4,
|
||||
"tiles": 5,
|
||||
"kind": "contrast",
|
||||
"heroBefore": "blocked",
|
||||
"loadMs": 168.5,
|
||||
"orientation": "60°",
|
||||
"events": [
|
||||
{
|
||||
"id": "t0",
|
||||
"status": "exit",
|
||||
"at": 2039.9000000059605,
|
||||
"routeCells": 10,
|
||||
"duration": 1995.229284140118,
|
||||
"remaining": 4
|
||||
}
|
||||
],
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"layoutHash": "aaa748bc33cb199f27478a76b23e71959082f5974a93b8173bde29c7466ca833"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"previousPipelineHash": "a2188a0951cf3985337e2d3cfaff5ca97f5dcd25c426c5373512f6b0e6684193",
|
||||
"changed": 790,
|
||||
"samples": [
|
||||
{
|
||||
"number": 1,
|
||||
"previous": "e808ef41665cca5b44d01acdfacf5a24d0b058c011389ca7f9b89097d7690158",
|
||||
"final": "d40409ef64404be3faaddd00576309648439d7d5b34a991f91a10a76f62090a0",
|
||||
"unchanged": false
|
||||
},
|
||||
{
|
||||
"number": 3,
|
||||
"previous": "9b6259948949878233b94977dffccc9a2cd1a22b2ae7961b723af67ec85a9d49",
|
||||
"final": "9b6259948949878233b94977dffccc9a2cd1a22b2ae7961b723af67ec85a9d49",
|
||||
"unchanged": true
|
||||
},
|
||||
{
|
||||
"number": 4,
|
||||
"previous": "5a3d8fd6909bc341cf6bee6586c8d785fba4c1ecfb90b5a5d4018ff2e53c1e08",
|
||||
"final": "aaa748bc33cb199f27478a76b23e71959082f5974a93b8173bde29c7466ca833",
|
||||
"unchanged": false
|
||||
},
|
||||
{
|
||||
"number": 34,
|
||||
"previous": "f7fc41f08ea89a58eee51a217190be08450c1f2933578821cb8892a041996e7d",
|
||||
"final": "31736443aaa234fe34fee7a6263d75a679ab46d37dd548f28304085d650b6927",
|
||||
"unchanged": false
|
||||
},
|
||||
{
|
||||
"number": 849,
|
||||
"previous": "f7846fbc3361fda6c5e2670c3cea2b0b9887da3145140bd7fe4eed83b594f125",
|
||||
"final": "82243dd0eee425b1ce2bc640ca184046712959fe3090d0f8287f0e0645367838",
|
||||
"unchanged": false
|
||||
},
|
||||
{
|
||||
"number": 1000,
|
||||
"previous": "c855ba95f504d7280b81820c2af64010fddcfc731041c3b176e7d88301249ba9",
|
||||
"final": "c855ba95f504d7280b81820c2af64010fddcfc731041c3b176e7d88301249ba9",
|
||||
"unchanged": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 251 KiB |
|
After Width: | Height: | Size: 240 KiB |
|
After Width: | Height: | Size: 224 KiB |
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"viewport": {
|
||||
"width": 1440,
|
||||
"height": 1000
|
||||
},
|
||||
"loadMs": 178.69999998807907,
|
||||
"moduleMs": 42.5,
|
||||
"moduleBytes": 9622010,
|
||||
"cacheDisabled": true,
|
||||
"environment": "local HTTP, no mobile network throttling"
|
||||
}
|
||||
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 55 KiB |
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"entries": 1000,
|
||||
"level": "trail-v05-1000",
|
||||
"manualLoaded": true,
|
||||
"manualReview": {
|
||||
"id": "trail-v05-1000",
|
||||
"number": 1000,
|
||||
"layoutHash": "c855ba95f504d7280b81820c2af64010fddcfc731041c3b176e7d88301249ba9",
|
||||
"visual": "chapter-overview-reviewed",
|
||||
"browserPlay": "complete-browser-replay-passed: 16 actions, victory, campaign ending; mobile zoom/pan/rotate sampled",
|
||||
"playerCalibration": "not-tested",
|
||||
"sources": [
|
||||
"docs/v0.5-review/contact-20.png",
|
||||
"docs/v0.5-visual-audit-late.md",
|
||||
"docs/v0.5-browser-review.md",
|
||||
"docs/v0.5-review/final-browser-batch.json"
|
||||
]
|
||||
},
|
||||
"dialogOpen": true,
|
||||
"title": "花瓣 · 分段释放"
|
||||
}
|
||||
|
After Width: | Height: | Size: 144 KiB |
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"first": {
|
||||
"chapter": "0",
|
||||
"buttons": 50,
|
||||
"sideButtons": 50,
|
||||
"first": "0",
|
||||
"last": "49"
|
||||
},
|
||||
"last": {
|
||||
"buttons": 50,
|
||||
"first": "950",
|
||||
"last": "999",
|
||||
"overflow": false
|
||||
},
|
||||
"jumped": "LEVEL 501",
|
||||
"old": {
|
||||
"version": "v0.4",
|
||||
"level": "LEVEL 01"
|
||||
},
|
||||
"restored": {
|
||||
"version": "v0.5",
|
||||
"level": "LEVEL 501"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"changed": true,
|
||||
"remainingBefore": "14",
|
||||
"remainingAfter": "14",
|
||||
"zoomDuringPan": "154%",
|
||||
"resetZoom": "100%",
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"layoutHash": "c855ba95f504d7280b81820c2af64010fddcfc731041c3b176e7d88301249ba9",
|
||||
"retainedByIdenticalLayoutHash": true
|
||||
}
|
||||
@@ -0,0 +1,290 @@
|
||||
[
|
||||
{
|
||||
"number": 34,
|
||||
"tiles": 8,
|
||||
"actions": [
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t7"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t6"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t5"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t4"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t3"
|
||||
},
|
||||
{
|
||||
"type": "rotate",
|
||||
"direction": 1
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t1"
|
||||
},
|
||||
{
|
||||
"type": "rotate",
|
||||
"direction": -1
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t0"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t2"
|
||||
}
|
||||
],
|
||||
"kind": "stages",
|
||||
"entry": "LEVEL 34",
|
||||
"events": [
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t7",
|
||||
"status": "exit",
|
||||
"remaining": 7
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t6",
|
||||
"status": "exit",
|
||||
"remaining": 6
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t5",
|
||||
"status": "exit",
|
||||
"remaining": 5
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t4",
|
||||
"status": "exit",
|
||||
"remaining": 4
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t3",
|
||||
"status": "exit",
|
||||
"remaining": 3
|
||||
},
|
||||
{
|
||||
"method": "rotate",
|
||||
"value": 1,
|
||||
"status": "rotated",
|
||||
"remaining": 3
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t1",
|
||||
"status": "exit",
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"method": "rotate",
|
||||
"value": -1,
|
||||
"status": "rotated",
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t0",
|
||||
"status": "exit",
|
||||
"remaining": 1
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t2",
|
||||
"status": "exit",
|
||||
"remaining": 0
|
||||
}
|
||||
],
|
||||
"remaining": "0",
|
||||
"wonDialog": true,
|
||||
"reduced": false
|
||||
},
|
||||
{
|
||||
"number": 1000,
|
||||
"tiles": 14,
|
||||
"actions": [
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t13"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t12"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t11"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t10"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t9"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t8"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t7"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t6"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t5"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t4"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t3"
|
||||
},
|
||||
{
|
||||
"type": "rotate",
|
||||
"direction": 1
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t1"
|
||||
},
|
||||
{
|
||||
"type": "rotate",
|
||||
"direction": -1
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t0"
|
||||
},
|
||||
{
|
||||
"type": "tap",
|
||||
"id": "t2"
|
||||
}
|
||||
],
|
||||
"kind": "stages",
|
||||
"entry": "LEVEL 1000",
|
||||
"reduced": false,
|
||||
"events": [
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t13",
|
||||
"status": "exit",
|
||||
"remaining": 13
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t12",
|
||||
"status": "exit",
|
||||
"remaining": 12
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t11",
|
||||
"status": "exit",
|
||||
"remaining": 11
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t10",
|
||||
"status": "exit",
|
||||
"remaining": 10
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t9",
|
||||
"status": "exit",
|
||||
"remaining": 9
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t8",
|
||||
"status": "exit",
|
||||
"remaining": 8
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t7",
|
||||
"status": "exit",
|
||||
"remaining": 7
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t6",
|
||||
"status": "exit",
|
||||
"remaining": 6
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t5",
|
||||
"status": "exit",
|
||||
"remaining": 5
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t4",
|
||||
"status": "exit",
|
||||
"remaining": 4
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t3",
|
||||
"status": "exit",
|
||||
"remaining": 3
|
||||
},
|
||||
{
|
||||
"method": "rotate",
|
||||
"value": 1,
|
||||
"status": "rotated",
|
||||
"remaining": 3
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t1",
|
||||
"status": "exit",
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"method": "rotate",
|
||||
"value": -1,
|
||||
"status": "rotated",
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t0",
|
||||
"status": "exit",
|
||||
"remaining": 1
|
||||
},
|
||||
{
|
||||
"method": "tap",
|
||||
"value": "t2",
|
||||
"status": "exit",
|
||||
"remaining": 0
|
||||
}
|
||||
],
|
||||
"remaining": "0",
|
||||
"wonDialog": true,
|
||||
"nextButton": "完成旅程 · 回到第一关 ",
|
||||
"returnedLevel": "LEVEL 01"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"gate": {
|
||||
"number": 3,
|
||||
"heroBefore": "blocked",
|
||||
"tiles": 5,
|
||||
"kind": "gate",
|
||||
"heroAfterGate": "exit",
|
||||
"events": [
|
||||
{
|
||||
"id": "t1",
|
||||
"status": "exit",
|
||||
"at": 345,
|
||||
"routeCells": 2,
|
||||
"remaining": 4
|
||||
},
|
||||
{
|
||||
"id": "t0",
|
||||
"status": "exit",
|
||||
"at": 380.59999999403954,
|
||||
"routeCells": 13,
|
||||
"remaining": 3
|
||||
}
|
||||
]
|
||||
},
|
||||
"contrast": {
|
||||
"number": 4,
|
||||
"heroBefore": "blocked",
|
||||
"tiles": 5,
|
||||
"kind": "contrast",
|
||||
"orientation": "60°",
|
||||
"events": [
|
||||
{
|
||||
"id": "t0",
|
||||
"status": "exit",
|
||||
"at": 912.1000000238419,
|
||||
"routeCells": 10,
|
||||
"remaining": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 53 KiB |
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"events": [
|
||||
{
|
||||
"id": "t0",
|
||||
"status": "exit",
|
||||
"at": 356.19999998807907,
|
||||
"routeCells": 14,
|
||||
"duration": 2818.0381373993723,
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"id": "t1",
|
||||
"status": "exit",
|
||||
"at": 390.7999999821186,
|
||||
"routeCells": 3,
|
||||
"duration": 779.6152422706633,
|
||||
"remaining": 1
|
||||
}
|
||||
],
|
||||
"remaining": "1",
|
||||
"resultOpen": false,
|
||||
"overflow": false
|
||||
}
|
||||
|
After Width: | Height: | Size: 181 KiB |
|
After Width: | Height: | Size: 193 KiB |
|
After Width: | Height: | Size: 204 KiB |
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"before": {
|
||||
"width": 390,
|
||||
"height": 844,
|
||||
"zoom": "100%",
|
||||
"visible": "flex",
|
||||
"overflow": false,
|
||||
"canvas": {
|
||||
"x": 8,
|
||||
"y": 208,
|
||||
"width": 373.9921875,
|
||||
"height": 564,
|
||||
"top": 208,
|
||||
"right": 381.9921875,
|
||||
"bottom": 772,
|
||||
"left": 8
|
||||
},
|
||||
"toolbar": {
|
||||
"x": 228.3515625,
|
||||
"y": 163,
|
||||
"width": 143.640625,
|
||||
"height": 42,
|
||||
"top": 163,
|
||||
"right": 371.9921875,
|
||||
"bottom": 205,
|
||||
"left": 228.3515625
|
||||
}
|
||||
},
|
||||
"zoom": "154%",
|
||||
"tile": {
|
||||
"id": "t13",
|
||||
"x": 106.1888882483258,
|
||||
"y": 387.45427199526,
|
||||
"pieceDiameter": 58.31673161276606,
|
||||
"fitPieceDiameter": 37.77674172794118
|
||||
},
|
||||
"orientation": "60°",
|
||||
"tap": {
|
||||
"id": "t13",
|
||||
"status": "exit",
|
||||
"remaining": 13
|
||||
},
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"layoutHash": "c855ba95f504d7280b81820c2af64010fddcfc731041c3b176e7d88301249ba9",
|
||||
"retainedByIdenticalLayoutHash": true
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"number": 1,
|
||||
"tiles": 3,
|
||||
"kind": "tour",
|
||||
"heroBefore": "exit",
|
||||
"loadMs": 183.5,
|
||||
"events": [
|
||||
{
|
||||
"id": "t0",
|
||||
"status": "exit",
|
||||
"at": 356.09999999403954,
|
||||
"routeCells": 13,
|
||||
"duration": 2627.2810841634755,
|
||||
"remaining": 2
|
||||
},
|
||||
{
|
||||
"id": "t1",
|
||||
"status": "exit",
|
||||
"at": 465.7000000178814,
|
||||
"routeCells": 1,
|
||||
"duration": 318.5640646055102,
|
||||
"remaining": 1
|
||||
}
|
||||
],
|
||||
"remaining": "1",
|
||||
"resultOpen": false,
|
||||
"overlapConfirmed": true,
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"layoutHash": "d40409ef64404be3faaddd00576309648439d7d5b34a991f91a10a76f62090a0"
|
||||
}
|
||||
|
After Width: | Height: | Size: 317 KiB |
|
After Width: | Height: | Size: 172 KiB |
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"status": "3 步回放完成,3 枚棋子全部离场。",
|
||||
"actions": 3,
|
||||
"active": "放出棋子 t1",
|
||||
"pipelineHash": "ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d",
|
||||
"layoutHash": "d40409ef64404be3faaddd00576309648439d7d5b34a991f91a10a76f62090a0"
|
||||
}
|
||||
|
After Width: | Height: | Size: 180 KiB |
|
After Width: | Height: | Size: 138 KiB |
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"date": "2026-09-12",
|
||||
"change": "Main game renders all real tracks uniformly; route emphasis remains in design review only.",
|
||||
"smallRotated": {
|
||||
"level": "LEVEL 05",
|
||||
"orientation": "60°",
|
||||
"strokes": {
|
||||
"#89867D / 1": 19,
|
||||
"#F2EEE5 / 6.51984375": 57,
|
||||
"#435F78 / 4.07490234375": 57
|
||||
}
|
||||
},
|
||||
"large": {
|
||||
"level": "LEVEL 1000",
|
||||
"viewport": {
|
||||
"width": 390,
|
||||
"height": 844,
|
||||
"scrollWidth": 390
|
||||
},
|
||||
"strokes": {
|
||||
"#89867D / 1": 91,
|
||||
"#F2EEE5 / 4": 273,
|
||||
"#435F78 / 2.5": 273
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
# v0.5 前 500 关:章节总览目检
|
||||
|
||||
审阅日期:2026-09-12。最终流水线:`ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d`。范围:`docs/v0.5-review/contact-01.png` 至 `contact-10.png`,10 张联系表,每张 50 关,覆盖 1–500。冻结后重新导出的每张图均已重新实际查看,取代早期开发快照的目检结论。
|
||||
|
||||
这是 AI 辅助的静态缩略图全局审阅:原图 1524×3876,本次显示为 805×2048;不是 500 次逐关手玩,也不验证路线动画中的碰撞感知。
|
||||
|
||||
## 观察
|
||||
|
||||
- 1–100 关的花瓣、双叶、回折、编织、环绕和螺旋在总览中可以区分,主线与灰色次轨的层级清楚。第 3、8、50、100 关能看到单层花瓣组织,第 6、14、24 关是双叶结构,回折与横向编织穿插出现。
|
||||
- 101–250 关开始混合棋盘尺寸。第 150、200、250 关的重瓣结构能形成章节结尾的视觉变化;后续第 256、274、282、300 关也使用更密集的重瓣。第 124、132、140 等巡游关仍保持留白。
|
||||
- 251–500 关在大盘之间继续穿插小盘,如第 299、340、369、403、471、485 关,视觉规模没有随关号持续扩大。第 338/348、363/391、388/400 展示不同布局密度或布子位置。
|
||||
- 没有从这些联系表中发现整盘出画、棋子完全遮住另一枚、缺失图块或无法辨认的标题。六类形态经常复现,属于同一套路线语言的变体;不能据此宣称有 500 种独立外形。
|
||||
|
||||
## 需要结合实际界面判断的点
|
||||
|
||||
重瓣大盘(如 150、256、274、282、300、350、388、400、425、450、468、500)的交叉密度高于普通花瓣。缩略图能辨认整体花形,但不能据此确认手机上每个箭头和交叉都容易辨读。[浏览器审核](v0.5-browser-review.md)另有第 1000 关大盘缩放和点击样本,不能把总览通过当作所有关卡的移动设备点击精度通过。
|
||||
|
||||
同一家族同一尺寸有明显轮廓重复;新鲜感主要来自开口与放行关系。是否能连续玩数百关仍有趣,要靠章节连续试玩与玩家回访,静态联系表无法证明。
|
||||
|
||||
结论:前 500 关的静态全局排版和形态层次可供首版试玩;本轮未据缩略图判出必须删除的关卡。逐步回放、自动策略及具体浏览器样本见其他独立验收记录。
|
||||
@@ -0,0 +1,74 @@
|
||||
# v0.5 后 500 关缩略图视觉审阅
|
||||
|
||||
审阅日期:2026-09-12。状态:最终冻结版复核完成。范围:第 501–1000 关,共 500 个开局画面,重新逐张查看最终版第 11–20 章的全部 10 张联系表,未沿用旧图的审阅结果。
|
||||
|
||||
**最终版未发现必须剔除的单关布局视觉错误;原第 849/850 关的相邻重瓣重复已修复,重新目检确认 849 编织巡游与 850 重瓣分段释放有清楚的视觉区分。** 这是 500 关缩略图的全局目检,不是逐关试玩,也不是 500 关的交叉跟线、触控和动态行进验收。
|
||||
|
||||
## 审阅材料与可见范围
|
||||
|
||||
- 来源为本目录 [v0.5-review](v0.5-review/) 中 `contact-11.png` 至 `contact-20.png`,每张 5 列 × 10 行,每格有对应关号、名称与制作指标。十张均实际打开查看。
|
||||
- 联系表原尺寸为 1524 × 3876;本次图像查看工具将整表呈现为 805 × 2048。可以检查整体形态、版面、棋子分布与明显遮挡,无法据此逐个判读大盘的六端口或测量手机点按准确率。
|
||||
- 联系表使用“突出设计路线,保留次要轨道”的绘制方式。本文不将这一结果外推为所有轨道等强度显示时也同样清晰。
|
||||
- 最终管线指纹:`ef59b3d561147031a8cbfd059c67fabe01054039e89cba4c27c7b6408d05b03d`。已核对浏览器最终批次记录:[final-browser-batch.json](v0.5-review/final-browser-batch.json)。全量重导的背景见 [layout-verification.json](v0.5-review/layout-verification.json);因新旧有 790 个布局变化,此次重新查看了全部后 10 章。
|
||||
- 对第 849/850 关另只读核对了最终关卡数据。核对数据:[levels/v0.5.json](../levels/v0.5.json),最终文件 SHA-256:`b3d599e637c1aa9820cbb9186cd9be49421d81b3e2ad206f4bfa1ee366f39017`。文件内容指纹与上一项管线指纹用途不同。
|
||||
- 本次没有修改生成管线、关卡布局、编号或解法记录。
|
||||
|
||||
## 全部十张联系表的观察
|
||||
|
||||
| 联系表 | 已查看关号 | 观察与定位 |
|
||||
| --- | --- | --- |
|
||||
| [第 11 章](v0.5-review/contact-11.png) | 501–550 | 环绕、螺旋、编织、回折与双叶轮廓可分辨;523/545 的单层花瓣轮廓清楚。527/531/541/550 的重瓣中心更密,仍能辨认外围叶瓣,没有整片深色糊块。 |
|
||||
| [第 12 章](v0.5-review/contact-12.png) | 551–600 | 棋盘大小交替,图案均留在画框内。556/564/574 的叶瓣清楚;582/592/600 呈现较密的重瓣,不能靠整表缩略图确认中央每个交叉的跟线负担。 |
|
||||
| [第 13 章](v0.5-review/contact-13.png) | 601–650 | 601/619/633 的花瓣具有完整的叶形,610/624/628 的双叶也能辨认。637/647/650 的主轨虽多,仍保有整体花形。未见缺图或被裁掉的边缘棋子。 |
|
||||
| [第 14 章](v0.5-review/contact-14.png) | 651–700 | 纵向回折、横向编织和环绕有清楚的轮廓差异。662/666/680/688 可见较疏的单层花瓣;652/670/698/700 是密集重瓣。两种规模不能使用相同的细节清晰度结论。 |
|
||||
| [第 15 章](v0.5-review/contact-15.png) | 701–750 | 703/739/743/750 的花瓣都有可辨的外形。716/720/734/748 的大盘双叶主轮廓较窄,周围次要网格占比高;这不是布局出错,但值得与较小的双叶盘比较跟线负担。 |
|
||||
| [第 16 章](v0.5-review/contact-16.png) | 751–800 | 大小盘与不同主形态继续交替。754/772/786/794/800 的重瓣不因棋子覆盖而完全失去轮廓。777/779/782/796 等大盘棋子分布较多,需要在实际视口看清箭头和接触关系。 |
|
||||
| [第 17 章](v0.5-review/contact-17.png) | 801–850 | 全章无明显裁切或缺图。最终 849 为中盘横向编织,8 枚棋子;850 为大盘重瓣,14 枚棋子。二者的方向、密度、轮廓和规模均能区分,旧版相邻视觉重复项已关闭。820 的棋子较集中在右下区域,仍有清楚的单枚边界。 |
|
||||
| [第 18 章](v0.5-review/contact-18.png) | 851–900 | 花瓣、螺旋与直向通道仍可区分。新版 875 的棋子已分布在盘面多处,不再沿用旧版“右下缘集中”的描述。856/864/892/896/900 的重瓣完整可见,没有大面积糊块。 |
|
||||
| [第 19 章](v0.5-review/contact-19.png) | 901–950 | 911/919/933/947/950 的花瓣外形成立;919 的大盘留出较多无遮挡主轨,933 的棋子更密,适合做可读性对照。未观察到棋子完全盖住另一枚箭头的硬遮挡。 |
|
||||
| [第 20 章](v0.5-review/contact-20.png) | 951–1000 | 到最后一章仍保持形态与规模切换,未出现后段整体变成密集糊块。962/988/1000 的重瓣可辨,998 是较疏的花瓣。1000 延续既有章尾重瓣母题,并非独有的新轮廓。 |
|
||||
|
||||
## 退回项、已修复证据与适用限制
|
||||
|
||||
### 单关布局硬退货:本范围未发现
|
||||
|
||||
本次没有看见画面缺失、底盘出框、大面积主轨融成不可分辨色块、棋子完全遮住另一枚棋子,或标为花瓣但完全缺少叶瓣轮廓的关卡。因此,没有仅凭这些联系表就需要删除的单关布局编号。
|
||||
|
||||
这一判断不包含实际可解性、六端口配对、擦碰合理性或手机触控精度;这些分别需要规则验证、放大查看和实际操作。
|
||||
|
||||
### 已修复:第 849/850 关相邻重瓣重复
|
||||
|
||||
首次审阅发现旧版 849、850 连续呈现非常相近的大盘重瓣,并建议退回 849 的主线编排。主任务随后重制 849,为章尾 850 提供不同形态的铺垫。最终版重新打开第 17 章整张联系表后,确认此项已解决。
|
||||
|
||||
旧版问题依据(仅解释修复原因,不描述当前布局):
|
||||
|
||||
- 两关连续出现,均为半径 5 的重瓣花形、14 枚棋子、分段释放,正式求解都需要至少 2 次旋转。
|
||||
- 91 格中有 88 格的六端口配轨一致;两关各有 177 个标记路段,其中 170 个一致。整体缩略图非常接近。
|
||||
- 棋子位置、箭头、部分接线与主目标不同;主目标的参考长路与反差记录也不同。**不能据此称为同一谜题或重复文件。**
|
||||
- 连续游玩的新鲜感没有在此次目检中被测量。建议调整的依据是相邻画面的相似度及相同体验标签,不是未经执行的玩家实验。
|
||||
|
||||
最终版复核结果:
|
||||
|
||||
| 关号 | 当前形态与体验 | 当前结构记录 | 视觉复核 |
|
||||
| --- | --- | --- | --- |
|
||||
| 849 | 编织 · 长路巡游 | 半径 4,61 格,8 枚;最少 0 次旋转;记录最长巡游 37 格、35 弯 | 横向带状曲线、中盘与较少棋子清楚可辨;没有延续旧版重瓣外形。 |
|
||||
| 850 | 花瓣 · 分段释放 | 半径 5,91 格,14 枚;最少 2 次旋转;记录最长巡游 57 格、34 弯 | 大盘重瓣与更密的放行对象形成可见变化,章尾花形保留。 |
|
||||
|
||||
上述结构记录来自最终关卡数据,不能当作本次实际试玩耗时。布局指纹分别为:849 `82243dd0eee425b1ce2bc640ca184046712959fe3090d0f8287f0e0645367838`;850 `dfc5b9d2cfd759cc0071962cdd49f5dd5e1fee7f2ef0a7201fb0dc4ed9cd83d9`。849 的浏览器批次样本与冻结数据一致。
|
||||
|
||||
处置状态:**已修复并完成最终缩略图复核;没有剩余的必改编排项。** 连续游玩是否更有新鲜感,仍属于玩家体验校准问题,不用这一静态审阅代替。
|
||||
|
||||
### 放大与手机尺寸复核:不据此直接退货
|
||||
|
||||
| 关号 | 优先看什么 | 为什么单靠本次目检不能下最终结论 |
|
||||
| --- | --- | --- |
|
||||
| 531、582、637、700、743、772、988、1000 | 重瓣中心的交叉、弯线和主目标箭头;行进时能否跟随目标 | 主形状看得见,但整表缩小后无法逐端口跟线。 |
|
||||
| 720、734、748、775、818、863 | 大盘双叶与次要网格的主次关系;是否需要这么大的底板 | 主轮廓较窄,剩余网格多。是否造成困扰需要实际观看与操作,而非只按线条占比判断。 |
|
||||
| 516、659、715、820 | 集中在部分边缘或局部区域的棋子是否容易分清、连续点击是否准确 | 最终缩略图可分清单枚边界;触控目标是否够用取决于正式视口及命中规则。 |
|
||||
| 849→850 | 修复后的形态和放行方式变化是否使连续体验更丰富 | 当前静态视觉重复已排除,体验改善的程度仍需连续试玩。 |
|
||||
|
||||
## 对这 500 关的适用结论
|
||||
|
||||
这批缩略图具有稳定的绘制质量,六个路线家族在多数画面中能直接辨认。单层花瓣与重瓣都有实际可见的轮廓;没有出现“只在名称中称为花瓣、画面只剩随机线段”的普遍偏差。
|
||||
|
||||
整体外形仍围绕六个家族反复展开,尤其大盘重瓣在各章反复出现。不同布子和放行关系可以使同一形状有价值,但缩略图本身无法证明这些变体玩起来持续新鲜。不要将本记录写成“后 500 关全部经过逐关试玩”或“500 关都已确认好玩”。本次确认的是全量开局缩略图中没有明显的整体视觉失效,并提供了可定位的编排和细读复核对象。
|
||||