022 ことばの橋 — 独立した5段階の日本語教材

01_terrain.py → 02_movement.py → 03_atomic_swap.py → 04_preview.py → 05_word_bridge.py
必要環境: Python 3.11以上 / Pyxel 2.9.9（3.11実機では未確認、検査は3.12.14）。
起動: python 01_terrain.py
Pyxelが未導入なら: python -m pip install -r requirements.txt
各Pythonは単独で実行でき、画像・フォント・原作model.pyは不要です。
別名や日本語/空白のフォルダーでも同じPython環境で実行できます。パスは引用符で囲みます。
LESSON.mdが本文、lessons.jsonは同じ5章、lesson_meta.jsonは操作と原作差分です。

操作は「押す→操作キーを全部離す」で一回。Spaceで表紙を閉じたあとも必ず離します。
01の矢印は地形調査枠。水へも入れます。Spaceは実験用のFLOAT/SINK切替。
02以降の矢印は一押し一歩。02は初期Lで移動だけ。ゲーム中Spaceは未使用。
03のSpaceは陸で即交換。04/05はSpace予告→全解放→Space確定→全解放。
04/05の予告中は歩けずZで取消。石上でも予告は開けますが、変更確定は拒否。
05の通常時のZは最後に成功した移動または交換を一手戻す。拒否や予告は履歴に入りません。
05の表紙で左右はA/B/C、Pは停止/再開、成功後Nは次の川、成功後Zは最後の一歩を戻す。
Rは同じ配置を最初から。Qは表紙へ。同じ配置でSpaceなら続き、05で左右を押すと初期化。
停止中にQで戻ると停止も保持されます。Spaceで川へ戻った後、全解放→Pで解除します。
Escは終了。編集後はUTF-8で保存→Escで終了→対象Pythonを再実行します。
Rはゲーム状態の初期化で、コードを読み直す操作ではありません。

CURRENTは現在、PROPOSEDは確定前の案。点線は次に浮く石、vは次に沈む石。
L=軽い石、H=重い石、S=出発点、G=到着点、ISLE=乾いた島。座標は0始まり。
MOVESは通れた歩数、CHANGESは交換回数、05のHISTORYは戻せる確定行動数です。
配達荷物の見た目は重量や速度を変えません。時間制限・残機・点数罰・LLM・通信はありません。
原作の無音設計を継承し、この教材に音の出力は追加していません。

原作差分: 01地形だけ、02初期Lの移動、03原作A初期H・即交換、04予告/取消、05原作全モデル・Game。
全段階512×480 ASCII。原作の日本語字形、景色、詳しい配達演出、動画・自動メディア記録は省略。
05には原作三配置と予告、Undo、停止、次の川があります。保存/読込機能はありません。
A: 岸で交換→右6。B: 右3→島で交換→右3。どちらもMOVES 6、CHANGES 1。
C: 右2→下2→島(2,4)で交換→右4→上2→右1。MOVES 11、CHANGES 1。
04/05の各交換はSpaceを二回、各回すべて離します。各歩行キーも毎回離します。

再現用QA（出力先は新規、親フォルダーは先に作る）:
python -B test_stages.py
python -B qa/exercise_checks.py
python -B qa/cp932_check.py
python -B qa/reference_check.py --original "/path/to/original/022_word_bridge"
python -B qa/runtime_checks.py "/tmp/word_bridge_runtime_new"
python -B qa/render_boundaries.py "/tmp/word_bridge_edges_new"
python -B qa/render_exercises.py "/tmp/word_bridge_edits_new"
python -B qa/verify_freeze.py
各編集課題: python -B exercises/01_edit_control.py （02〜05も同様）

単独診断例:
python 05_word_bridge.py --headless-smoke --demo-checkpoint --screenshot new.png --state-json new.json
05のみ--case A/B/Cを指定可能です。--case Cのように一つ指定します。
診断例は短い入力列の記録で、指定した配置の全攻略ではありません。
出力は呼出時の作業フォルダー基準で、Pyxel import前に絶対化・検査します。
空文字、既存出力、拡張子違い、親なし、headlessなしの診断指定は拒否します。
qa内はこの教材の作者証拠です。原作の既存証拠・独立レビューとは区別してください。
検査対象はLinux実Pyxel headless描画と合成入力。物理キー、Windows/macOS GUI、ブラウザー、
人の初見理解や学習効果は未確認。cp932模擬検査もWindows実機検査ではありません。

LICENSE.txtは原作告知をそのまま保持。原作コードをMITと書き換えていません。
assets/NOTO-LICENSE.txtは原作のOFL全文を保持。日本語字形そのものは教材に含めていません。
原作LICENSE.txt・assets/NOTO-LICENSE.txtと、今回の教材配布向けDISTRIBUTION_PERMISSION.txtを併読してください。
Pyxelのライセンスと原作コードの告知は別です。
