一枚足りない写真: 五段階のPython / Pyxel教材

01_observe.py       残る写真の比較と固定された証拠
02_candidates.py    移動規則と候補集合
03_weather.py       雨・到着先の布・濡れの持続
04_reasons.py       選んだ根拠だけで十分かを検査
05_undo.py          判断全体のUndoと128件の上限

各.pyは独立して動きます。原作app.pyとは別の教材です。元の原作ソースを変更していません。詳しい日本語説明、実操作、リテラル編集課題はLESSON.md。段階データはlessons.json、原作との違いはlesson_meta.jsonです。

必要: Python 3.11以上、Pyxel 2.9.9、GUI/OpenGL対応PC。初回導入にネットが必要です。
Windows:
py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install pyxel==2.9.9
.venv\Scripts\python.exe 01_observe.py

macOS/Linux:
python3 -m venv .venv
.venv/bin/python -m pip install pyxel==2.9.9
.venv/bin/python 01_observe.py

操作: 左右でカーソル、Zで写真二枚選択/札切替、Tabで欄変更、Enterで提出、上下で比較の濃さ。03以降は1/2/3でA/B/C、05のみXでUndo。Rは今の状況を初期化、Escは終了。各キーを完全に離す。同時押しは無効。ゲーム画面は英語ラベル、日本語説明はLESSON.mdにあります。

原作と同じ核: 欠けた写真を一枚に決め打ちせず、四候補のうち可能な集合を残す。A/BはQ、CはP/Q/R。公開証拠から計算し、唯一の隠し写真を保存していません。提出結果や矛盾説明は推論情報を示します。全UIの秘密保持を検証した教材ではありません。

教材で省いたもの: タイトル/説明停止/注目レイヤー/比較版切替/記録書出し/日本語字形。05のモデルは有効意味入力で原作と全フィールド照合。UIの入力規則は全解放待ちへ簡素化しています。

追試:
python -B test_stages.py -v
python -B qa/reproduce.py --out ../photo_evidence_new
出力先は新規。原作照合はPHOTO_ORIGINAL_SOURCEへ原作フォルダーを指定したときのみ実行します。指定なしでは任意4件がSKIPです。

qa/VERIFICATION.md: 実行件数と検証範囲
qa/evidence/: 生ログ、16枚の実Pyxel画像、実行環境、独立コピー
qa/cp932_default_read.py: encoding未指定の読込を実際にCP932にして負対照付き検査
diffs/: 隣接段階の厳密な差分
FROZEN_SHA256.json: 自身とキャッシュを除く配布物のハッシュ

検証はPython 3.12.14 / Pyxel 2.9.9、Linux headless、SDL音声dummyの自動操作。画像は表示して確認済み。ブラウザー・Windows/macOSの実GUI・音声・人間の学習効果は未検証です。全写真遷移は網羅、128件までの全履歴組合せは網羅していません。

LICENSEとLICENSE.txtは原作と同一。各.py内にも全文。assets/NOTO-LICENSE.txtは原作由来の同一権利文書です。教材は追加字形を読みませんが、権利表記を保って配布してください。Pyxel本体は同梱していません。
