Files
kidgo/.workbuddy/memory/2026-10-21.md
T
2026-10-21 13:54:25 +08:00

25 lines
2.2 KiB
Markdown

# 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。