2.2 KiB
2.2 KiB
2026-10-21
修完 j2 VERTICAL HELL(最后一个不可达关卡)
- 新增
js/levels/needle.js的well():之字踏石竖井生成器(每级升 2 格、台阶宽 5 且相邻两级重叠 2 格、顶台与上层地板同高相接、靠地板侧井壁底部留 3 格入口)。 - 用
well()重写 j2 的四段竖井(右-左-右-左),并修正:- L1 地板改成 cols 2..57(不覆盖右井内腔),L2/L4 地板改成 cols 9..65(盖住右井井底)。
- L1/L3 的压顶垂刺改成 cols 10..54,避开左井 x2..9(之前垂刺正好挡住井内起跳)。
- L2 刺毯缩短到 col 56,让右井底部 cols 57..65 净空可以站位起跳。
找到可达性 BFS 的建模 bug(关键)
tools/lib-reach.mjs 的 jump() 里水平方向被墙挡住时把 vx 永久清零了,而真实 js/player.js 是「本帧没推动、下一帧按住方向键 vx 仍是 ±3」。
这导致所有「贴着墙上升、越过台面边缘后再横移」的路线全部丢失——j2 的竖井就是靠这条路线过的。改成不清零后 j2 状态数 451 → 1268,全关通过。
统一诊断工具参数
reach() 的 RELSET 默认值 [0,8,14] 与 solve.mjs 的 [0,4,8,14] 不一致,reach-diag.mjs 会输出误导性结果。提取 DEF_DJ/DEF_REL 并让 reach-diag.mjs 也读 DJ/REL 环境变量。
降低「重复跳跃套路」+ 加密
jump.js顶部的carpet()从固定「每 4 格一缺口」改成 4/3 格交替(跳 3 格 / 跳 4 格轮换),所有复用它的关卡一起变节奏,全关仍可达。- 加密低密度关卡:j1 加上下夹缝+对刺门+垂刺;j5 加夹缝/对刺门/浮块区压顶;j7 每层改用交替刺毯+两端留落脚净空+压顶垂刺;j4 加宽冰坑+压顶垂刺;j8 收尾段加垂刺。
- 踩坑:j7 层两端必须留 2 格净空(上一层是二段跳跃入的),否则落点正好在刺上;j5 浮块区压顶只能放在 R-9(R-7 会让高块单跳就撞死)。
- 刺密度:j1 3.8% / j2 10.7% / j3 6.2% / j4 4.2% / j5 4.1% / j6 11.6% / j7 6.2% / j8 4.7% / j9 8.2% / j10 9.2%。
验证
check / solve / save-test / key-test / smoke / dom-smoke 全部通过;http://localhost:8123/ 上 index.html 与各模块均 200。