097 鏡の国の小競り合い — 独立した5段階の日本語教材

01_movement.py → 02_action_budget.py → 03_enemy_flag.py → 04_mirror_equipment.py → 05_forecast_history.py
各ファイルはPython 3.12 / Pyxel 2.9.9で単独実行。python 01_movement.py
Pyxelが未導入の場合: python -m pip install -r requirements.txt
追加の画像・フォント・model.pyは実行に不要。別名・日本語/空白のフォルダーでも同じPythonで実行できます。

LESSON.mdが本文。lessons.jsonは5段階の同じ説明、lesson_meta.jsonは原作差分と操作です。
初期画面は表紙。Spaceを押して離して開始。上下で候補、Enterを押して離して一行動確定。
左右/Tabで味方(02+)。表紙で1/2/3配置(03+)、B比較(04+)。T表示(04+)。
05のXは一味方行動Undo、S/Lは起動作業フォルダーのsave_097.jsonへ保存/読込。
Sは同名のゲーム保存を更新します。ソース編集の保存ではありません。
H/P説明を開いている間は停止。同じキーを押して離して閉じます。
R/M/Escは再試行/表紙/終了の確認。離してEnterで確定、Xで取消。全キーを毎回離すこと。
編集したらUTF-8で保存→Escを離してEnterで終了→pythonを再実行。Rは状態だけ戻しコード再読込ではありません。

原作差分: 01単一駒、02だけ近接練習配置・敵静止、03素手、04装備、05原作モデル・Controller。
表示は720×520 ASCII、0始まり座標。原作日本語画像、詳細イベント、F12保存、自動記録/GIFは未移植。
05のFUTUREは選択一行動＋残りを待つ仮定。TのFUTURE IF EQUIPPEDも仮定で、CURRENTではありません。
原作の音なし設計を継承。この教材は音の出力を追加しません。

自動検査（出力先は新規、親フォルダーは先に作る）:
python -B test_stages.py
python -B qa/exercise_checks.py
python -B qa/cp932_check.py
python -B qa/reference_check.py "/path/to/original/097_mirror_skirmish"
python -B qa/runtime_checks.py "/tmp/mirror_runtime_new"
python -B qa/render_boundaries.py "/tmp/mirror_edges_new"
python -B qa/verify_freeze.py

単独描画例: python 05_forecast_history.py --headless-smoke --demo-checkpoint --screenshot new.png --state-json new.json
出力は呼出時の作業フォルダー基準でPyxel初期化前に絶対化。既存ファイル、拡張子違い、親なし、headlessなしは起動前に拒否。
qa/*.jsonとqa/REVIEW.mdに作者による検査結果。独立レビューや原作の既存証拠とは別物です。
検査は実Pyxel Linux headlessと合成入力。物理キー、Windows/macOS GUI、ブラウザー、音の実聴、人の学習効果は未確認。

ライセンス: LICENSEとLICENSE.txtは原作の完全なMITおよび例外告知を保持。
各単独Pythonの先頭にもMIT全文。Pyxel全文はassets/PYXEL-LICENSE.txt。
Noto字形はこのASCII教材に含めませんが、原作告知が参照するassets/NOTO-LICENSE.txtを正確に保持します。
