帰り道の燃料：五つの独立したPython/Pyxel教材

01_travel_cost.py → 02_cargo_route.py → 03_finite_supply.py → 04_return_forecast.py → 05_undo.py
日本語本文はLESSON.md。各.pyを単独で別のフォルダーへ置いて起動できます。
各.pyに原作LICENSE.txt全文をコメントとして保持。実行時assetsは不要。

準備: Python 3.11以上 / Pyxel 2.9.9 / GUI・OpenGL対応PC。
共通原作READMEの3.11以上を採用。検証実行はLinux/Python3.12.14/Pyxel2.9.9。
Python3.11は構文解析のみ。Windows/macOS実機GUIは未検証。
以下のインストールは利用者側の手順です。今回の制作では追加インストールしていません。

Windows（教材ZIP全体を展開した場所）:
py -3 --version
py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe 01_travel_cost.py

macOS/Linux（教材ZIP全体を展開した場所）:
python3 --version
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python 01_travel_cost.py

既にPyxel2.9.9の環境があるならそのPythonを利用。以降は末尾の.pyを替えます。
別の作業場所から実行する場合はPythonと.pyのパスを指定し、空白入りは引用符で囲みます。
仮想環境は各PCで作成します。通常プレイはオフライン、初回導入だけネットが必要です。

操作:
01: 左右で距離、上下で荷重、Z/Spaceで燃料消費。
02以降: 矢印で札、Z/Spaceで確定。札は左右±1、上下±5で循環。
03以降: REFUEL札で現在地の有限補給。
04以降: 1/2/3で状況を初期化して切替。
05: Xで成立した一操作をUndo。結果後も可能。カーソルは戻さない。
全段階: R初期化、Esc終了。キーは一つずつ押して離します。
重要: ソース編集→保存→Escで古い画面を終了→同じ.pyを再起動。
Rはロード済みコードの状態リセットだけです。

表示語: FUEL=燃料、LOAD=荷重、VALUE=荷台の価値、SPENT=消費累計、OIL=現地の油。
T/TRUCK=荷台、PICK=拾う、DROP=置く、REFUEL=補給、HISTORY=履歴件数。
WON=価値目標達成の帰還、SHORT=価値不足の帰還。どちらも遠征終了。
HOME COSTは補給なしの最短帰路消費。KEEP/DROPの可否は有限補給込み。
「帰還案あり」は価値目標達成や追加回収の計画ではありません。

検証（-Bで配布物にキャッシュを作らない）:
python -B test_stages.py
python -B qa/cp932_check.py
python -B qa/runtime_checks.py 新しい出力フォルダー
python -B qa/verify_freeze.py
実Pyxel再描画にはPyxelが必要。論理試験は標準ライブラリーだけ。
原作照合は環境変数RETURN_FUEL_CANONICALで原作フォルダーを指定した場合に追加。
指定なしでも同梱参照のAST・全有限遷移ダイジェストと照合します。

自動描画の例（既存ファイルへ上書きしません）:
python 05_undo.py --headless-smoke --demo-checkpoint --screenshot checkpoint.png --state-json checkpoint.json
--frames Nはheadless専用、1〜10000。デモに短すぎる値は明示的に拒否。
全出力はPyxelを読み込む前の作業ディレクトリ基準で解決されます。
指定先の親フォルダーは先に作成。PNG/JSONの拡張子と既存ファイルを検査。

qa/REVIEW.md、qa/final-results.json、qa/rendered/の10枚が今回の確認結果。
ブラウザー、人のデスクトップ操作、音声聴取、人の学習効果・楽しさは未検証。
原作UIを完全再現する教材ではなく、最終段階でも簡略学習UIです。
音は実装していません。Noto字形は使いませんが原作の第三者通知/OFLを保持。
FROZEN_SHA256.jsonは自身だけを除く全配布ファイルのSHA-256台帳。
課題でソースを編集すると照合不一致になるのが正常です。
