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>
47 lines
2.1 KiB
HTML
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>
|