031 静かな足音：学習用5ステップ
必要：Python 3.11以上、Pyxel 2.9.9（requirements.txtで固定）。
通常操作にはGUI対応のPCが必要です。初回のpipインストールにはネット接続が必要です。
ZIPは全展開し、README.txt・requirements.txt・5本の.pyが並ぶZIPルートでターミナルを開いてください。
以下はすべてそのフォルダーから実行するコマンドです。5画面を同時に開かず、Escで閉じて次へ進みます。

Windows（Pythonの表示が3.11以上であることを確認）：
py -3 --version
py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe -B 01_grid.py
.venv\Scripts\python.exe -B 02_sight.py
.venv\Scripts\python.exe -B 03_sound.py
.venv\Scripts\python.exe -B 04_memory.py
.venv\Scripts\python.exe -B 05_undo.py

macOS/Linux（Pythonの表示が3.11以上であることを確認）：
python3 --version
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -B 01_grid.py
.venv/bin/python -B 02_sight.py
.venv/bin/python -B 03_sound.py
.venv/bin/python -B 04_memory.py
.venv/bin/python -B 05_undo.py

各.pyは独立した完成したプログラムで、前の段階のファイルや原作フォルダーをimportしません。
1本だけを別フォルダーへコピーしてもPyxelがあれば動きます。再配布時はMIT権利表記を保持してください。
読む順番：LESSON.mdの導入 → 01から05の各節 → 対応.py → diffsの隣接差分。

操作：
矢印1押下＝1マス、Space＝音を出さず1ターン待つ、R＝同じ初期状態へ戻る、Esc＝終了。
03以降のZ＝床の値+2の音を出す。05のX＝1手戻す。押しっぱなしの自動連打はありません。
無入力ではターンが進みません。移動キーの同時押しは無効です。R後は操作キーを全て離してください。
UIはASCII表記。青丸が自分、黄色の帳面を取って緑のEへ。赤四角が見張り。接触だけが捕縛です。
赤茶の床は見張りが移動した後の視野（次ターンの予告）。黄色の小輪は直前の届いた音の経路。
04以降の大きな輪は記憶した注目点。水色の次歩印は「新しい観測がなければ」の予告です。
音はゲーム内部の数値・位置情報です。音源・BGM・効果音の再生処理はありません。

05の検証済み攻略例（Rのあと各キーを1回ずつ押して離す）：
下 下 右 右 右 右 上 右 Z 下 左 左 左 左 左
音源を覚える様子が分かる別解：
上 右 右 Z 下 下 下 右 右 上 右 下 左 左 左 左 左
帳面を出口へ持ち帰ればWON。途中で捕まっても05はXで戻せます。
原作の音を利用しない静かな攻略も有効で、音を出すこと自体は成功条件ではありません。

原作との違い：
原作A「棚の角」の9×7マップだけです。B「見えているうちは」、C「遠い金属、近い布」は省略。
01は見張りなし、02は音なし・追跡記憶なし、03は追跡記憶なし、04と05は原作Aの通常モデルと同じ規則です。
05で全状態Undoを加えます。最終版でもタイトル、3面選択、P停止、Mメニュー、N次面、F12記録、日本語フォント、
比較用金属半径3のUI、ソルバー、元のデモ動画作成ツールは省略しています。
UIで音や記憶が見えることと、見張りの判断に隠れたプレイヤー位置を渡すことは別です。

テスト（原作ファイルもPyxelウィンドウも不要）：
Windows: .venv\Scripts\python.exe -B -m unittest -v test_stages.py
macOS/Linux: .venv/bin/python -B -m unittest -v test_stages.py
原作Aから生成したqa/canonical_reference.jsonに対して04・05の全状態hashも比べます。

12フレームだけ実Pyxelで描画する補助：
Windows: .venv\Scripts\python.exe -B 05_undo.py --headless-smoke --screenshot smoke.png
macOS/Linux: .venv/bin/python -B 05_undo.py --headless-smoke --screenshot smoke.png
最終段階の音観測を12フレーム内で描画：
.venv/bin/python -B 05_undo.py --headless-smoke --actions URRS --screenshot hear.png --report hear.json
長い攻略の自動描画：
.venv/bin/python -B 05_undo.py --headless-replay URRSDDDRRURDLLLLL --screenshot won.png --report won.json
Windowsでは先頭を.venv\Scripts\python.exeに置き換えてください。
U/D/L/R＝上下左右、W＝待機、S＝踏み鳴らす、X＝Undo、K＝リセット。Rはリプレイ文字列内では右です。
--actionsは最大12手、--headless-replayは入力数+2（最低12）フレームで終了します。
これらは合成入力を実Pyxelで描画する検証で、人のプレイ・ネイティブOS入力・ブラウザ操作・音声確認ではありません。
検証範囲とPNGはQA.txtおよびqa/へ。Windows/macOSの実GUIと人による面白さ確認は未実施です。

コード・図形はMIT。LICENSEと各.pyに原作のMIT全文を保持しています。
原作LICENSE末尾のNoto案内も原文を保持していますが、この教材にNoto字形やフォント資産は含まれません。
Pyxelは外部依存です。教材は学習用派生版で、原作完成版を置き換えるものではありません。
