引っ越しカニ合戦 037：独立五段階Python/Pyxel教材

まずLESSON.mdを開いてください。五本を順に起動し、所有表のOWNERとOCCUPANT、空の殻の色、IF TIDE NOWとTOTALの違いを読みます。

必要: Python 3.11以上、Pyxel 2.9.9、GUI/OpenGL対応PC。
実測環境: Linux / Python 3.12.14 / Pyxel 2.9.9。
Windows/macOSのGUI、OSキーボード、人間の学習効果は未検証。
3.11は構文だけ検査、3.11実行環境は未検証。

Windows（初回、ネット接続が必要）:
py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe 01_carry_home.py

macOS/Linux（初回、ネット接続が必要）:
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python 01_carry_home.py

次のファイル:
01_carry_home.py       小殻とカニを一緒に移動、固定tickの待ち時間
02_empty_bases.py      退去しても残る所有、再入居、裸/小殻/大殻の速度
03_food_influence.py   地形の最短距離、同距離の争い、空拠点の勢力
04_same_tick_rival.py  原作Bで旧盤面を読む相手AIと同時移動
05_three_tides.py      原作全三面、450tick×三回の累計採点と勝敗

単独.pyだけでも動き、ファイル名を変えても大丈夫です。
教材の実行中にコードを編集したら、保存→終了→再実行。
Rは初期状態へ戻すだけで、編集済みソースを読み直しません。

操作:
矢印を押し続けて移動。二方向以上はPだけ待機。
02以降Zで出る/入る。長押しは一回。Z+矢印はZ。
P停止/再開、R同じ浜の状態をリセット。変更後は全部のキーを離す。
解放待ちの最中はRもすぐには通りません。
05で1/2/3は浜A/B/C、停止中は選択しません。Esc終了。
Undoなし。01〜04には満潮/累計/終了なし。

試験（Pyxel不要）:
python -B test_stages.py
python -B qa/cp932_check.py

原作照合を含める場合はPYXEL_ORIGINAL_DIRに原作037のディレクトリーを設定。
未設定なら参照比較一件だけskip。原作を書き換えません。

実Pyxelで検証を再実行（各出力先は新しいディレクトリー名）:
python -B qa/runtime_checks.py NEW_RUNTIME_OUTPUT
python -B qa/relative_output_check.py NEW_RELATIVE_OUTPUT
python -B qa/render_outcomes.py NEW_DRAW_OUTPUT 0
python -B qa/render_outcomes.py NEW_LOST_OUTPUT 1
python -B qa/verify_freeze.py

通常の起動はファイル名だけ。QA用オプション例:
python 03_food_influence.py --headless-smoke --demo-checkpoint --screenshot new.png --report new.json
--screenshot/--reportはheadless専用、新規ファイルのみ。既存ディレクトリーが必要。
出力はPyxel import前に絶対パスへ解決し、起動したcwdを基準にします。
QAは合成入力と無音の実Pyxel処理であり、OSのキー操作ではありません。
final-results.jsonとREVIEW.mdで実測数・画像範囲・未検証範囲を確認。

各段階の詳細な説明、予想結果、よくある間違い、コード編集/実技課題はLESSON.mdとlessons.json。
隣接差分はdiffs/。FROZEN_SHA256.jsonは自身とキャッシュを除く台帳。
ファイル編集後にfreeze照合が失敗するのは正常です。
LICENSE/ LICENSE.txt と assets 内の権利表記を残してください。
この検証では既存仮想環境だけを使用し、依存の新規インストールはしていません。
