消防水路：5段階教材
架空の25マスの整数ゲームです。現実の消火、防火、避難の手順として使わないでください。

Python 3.11以上 / Pyxel 2.9.9。検査環境はLinux / Python 3.12.14 / Pyxel 2.9.9。
ZIPを全展開し、このREADMEのあるフォルダで起動します。
Windows:
py -3 -m venv .venv
.venv\Scripts\python -m pip install -r requirements.txt
.venv\Scripts\python 01_flow.py
.venv\Scripts\python 05_undo.py
macOS/Linux:
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python 01_flow.py
.venv/bin/python 05_undo.py
Windows/macOSのGUI実測は行っていません。
各.pyは完全な単一ファイル。別名や別フォルダでも動作し、外部画像・音・フォント不要です。

01: 水4を盤面に置き、一刻一マスで下端へ流す。Spaceのみ。
02: 有限貯水、二口、地形優先、石、溜まり、合流、排水。
03: 火、蒸気、同期延焼、灰。濡れと家はまだない。全鎮火でCLEAR。
04: 濡れ2、家の被害、原作Aの勝敗。
05: 原作A/B/C、全StateのUndo。本文はLESSON.md。

操作: 左右でW/E、上で量2、下で量1。Zで放水して一刻。Spaceは放水せず一刻。
X: 05のUndo。1/2/3: 05のA/B/C切替と初期化。R: 現在状況を初期化。Esc: 終了。
操作キーは毎回離してください。同時押しは拒否、新しいRは初期化を優先します。
選択や予告は刻を消費しません。時間制限はありません。

最短の確認:
01: Space五回でGRID 0/DRAIN 4。
02: 上→Z→Space二回でT3、(1,3)に水2。
03: 上→Z→SpaceでT2/CLEAR、STOCK 2/GRID 1/STEAM 1。
04: Z→SpaceでT2/WON、三家保護、STOCK 3/STEAM 1。
05: 2→右→Z→Space五回でBのWON、XでT5へ戻る。
BのE1だけ、Cの三刻待つ→E1→三刻待つも確認済み。

保存式: STOCK + GRID + STEAM + DRAIN = 初期の水量。
濡れ残は再使用可能な水ではなく着火を防ぐ残り時間。保存式へ足しません。
火は旧火だけが一マス延焼し、新しい火は次の刻から働きます。
水で消えた草は再燃可能。自然に燃え尽きた灰は再燃しません。
全鎮火で家の保護目標を判定。結果後は残水を勝手に排水しません。
原作の表紙・停止・比較Bキー・M・日本語字形・再現ファイル保存は省略しています。

検査: python -B test_stages.py
標準ライブラリだけで実行可能。原作ファイルがなくても同梱fixture比較を実行します。
任意の直接比較は環境変数PYXEL046_ORIGINALに原作model.pyまたはフォルダを指定。
未指定なら任意比較一件は理由付きskip。五つのゲーム自体は原作ファイル不要です。
全三状況の5206到達状態/31236候補遷移、別にAの濡れ0比較1894状態/11364遷移。
任意の新しい面や全入力履歴まで検証した主張ではありません。
qa/verify_freeze.pyは同梱ファイルのSHA-256と過不足を検査します。

実描画用の有界QA引数:
python 05_undo.py --headless-smoke --screenshot initial.png
python 05_undo.py --headless-smoke --demo-checkpoint --screenshot checkpoint.png
既定は12フレーム、デモはキー列の終了までの固定フレームで終了します。
--demo-checkpointと--screenshotは--headless-smoke必須。画像は.pngのみ。
長さや回数を任意入力する引数はありません。不正引数はPyxel読込前に終了2。

困ったとき:
No module named pyxel: 起動する同じ.venvのPythonでrequirements.txtを導入。
画面が動かない: フォーカスとキー解放を確認。放置ではTは進みません。
STOCK: 水不足。拒否では時間も水も減りません。
03のW1で再着火: 濡れを省いた練習。04のW1との比較箇所です。
赤いHが戻らない: 家の被害は鎮火しても残ります。
Cの三家を守れない: 設計上の目標は二家で、全探索でも最高二家。
GUI/OpenGLエラー: GUI対応環境で起動。headless成功は全OSのGUI保証ではありません。

未確認: ブラウザー、Windows/macOS GUI、OSキー入力、人の学習効果/面白さ、音声。
音は実装していません。権利文書は原作MIT全文と参照先assets/NOTO-LICENSE.txtを保持。
教材の表示はASCIIと図形のみで、外部Noto字形データは使いません。
