Files
HexTrails/labs/d5/index.html
cabinwandClaude Opus 5 643cba0ed9 feat(levels): D5 three-rotation prototype
The shipped 1000 levels have a hole: 568 of them need no rotation at all, and
none needs more than two — the mechanic the game is built on is mostly
decoration. This fills the empty band with levels that need at least three.

createDeepLock builds a four-piece chain where each link only releases at a
later orientation, and growDeepLevel packs the rest of the board around it
without opening a shortcut. Candidate pools are built per orientation and left
untruncated; ranking by bend count first starved the packer and capped levels
at four to six pieces instead of twelve.

deadTurnAudit enumerates every reachable (orientation, remaining-set) state to
prove no dead ends exist, and counts how long a player can be left with
nothing to do — solvable and feeling solvable are different things, which is
what "level 2 is impossible" turned out to be about.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 14:00:33 +08:00

47 lines
2.1 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>三转锁 · D5 构造原型</title>
<link rel="stylesheet" href="./style.css">
</head>
<body>
<main>
<header>
<a class="back" href="../../">← 返回主线</a>
<span class="badge">D5 · 三转链式锁 · 原型</span>
</header>
<section class="intro">
<p class="eyebrow">THREE TURNS TO CLEAR</p>
<h1>三转锁 <small>深旋转</small></h1>
<p>开局几乎全锁。转一次放一层,转两次放一层,转回来放主角。</p>
</section>
<div class="picker">
<label for="level">关卡</label>
<select id="level" aria-label="选择原型关卡"></select>
<span class="meta" id="meta"></span>
</div>
<div class="status"><span>待离场 <strong id="remaining">0</strong></span><span id="progress">已放行 0 / 0 · 旋转 0</span></div>
<div class="board-wrap"><canvas id="board" aria-label="三转锁原型棋盘,点击箭头棋子离场"></canvas></div>
<p class="message" id="message" role="status">先找找有没有能直接走的棋子——多半没有。转一下。</p>
<nav class="controls" aria-label="棋盘操作">
<button id="left" type="button">↶ <span>左转</span></button>
<button id="undo" type="button">↩ <span>撤销</span></button>
<button id="hint" type="button">✧ <span>提示</span></button>
<button id="reset" type="button">↻ <span>重来</span></button>
<button id="right" type="button">↷ <span>右转</span></button>
</nav>
<section class="evidence">
<h2>结构证据</h2>
<dl id="evidence"></dl>
<p class="witness" id="witness"></p>
</section>
<footer>
<p>数据来自 <code>levels/prototypes/d5.json</code>,由 <code>scripts/prototype-d5.mjs</code> 生成;规则、碰撞与求解与主游戏共用。此页只用于验证构造,不写入主线存档。</p>
</footer>
</main>
<script type="module" src="./app.js"></script>
</body>
</html>