067 伝言は三文字：原作Bから学ぶ5段階
必要：Python 3.11以上、Pyxel 2.9.9（requirements.txtで固定）。
通常プレイにはGUI対応PCが必要です。初回のpipインストールにはネット接続が必要です。
ZIPは全展開し、README.txt・requirements.txt・5本の.pyが並ぶフォルダーでターミナルを開いてください。
以下のコマンドはそのフォルダーから実行します。Escで1本を閉じてから次の段階へ進んでください。

Windows:
py -3 --version
py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe -B 01_sets.py
.venv\Scripts\python.exe -B 02_draft.py
.venv\Scripts\python.exe -B 03_send.py
.venv\Scripts\python.exe -B 04_confirm.py
.venv\Scripts\python.exe -B 05_two_requests.py

macOS/Linux:
python3 --version
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -B 01_sets.py
.venv/bin/python -B 02_draft.py
.venv/bin/python -B 03_send.py
.venv/bin/python -B 04_confirm.py
.venv/bin/python -B 05_two_requests.py

バージョン表示が3.11未満なら、先にPythonを更新してください。
各.pyは独立し、他の段階や原作のmodel.py、画像やフォントを読み込みません。
1本だけ別フォルダーへ移しても、Python/Pyxelがあれば動きます。
コードを配るときはファイル先頭のMIT全文と著作権表記を保持してください。
読む順番：LESSON.mdの画面と意味表 → 01〜05の各節と対応コード → diffsの隣接差分。

目的と段階:
8枚の札を使って相手の用事を絞り、依頼票の正しい用事を確認する集合パズルです。
現実の日本語を一般的に自動解釈するものではありません。字順は不問です。
01は集合の実験（枚数制限なし、同じ数字で札を外す）、02は3枚の下書き編集。
01と02はその場で候補のプレビューを表示し、送信・消費はありません。
03は初回送信まで。04は追伸と確認で工房1件を完了。05は受付への2件目とUndo。
最終05は原作B「青の意味が違う」通常設定のモデルを保持します。
A/C、札が毎件戻る比較、元のメニュー・記録保存・日本語フォント・動画ツールは省略。

操作:
1〜8：対応する字札を下書きへ。キーと札の意味・用事番号は画面の左表で確認できます。
左右：外す下書き位置（1〜3）、Space：その位置の字を外す（02以降）。
Enter：送信（03以降）／正しい一意候補を確認（04以降）。
C：一緒に全文確認。追加2往復で正しく完了、追加札消費なし（04以降）。
X：直前の判断全体へ戻す。成功後も有効（05のみ）。R：履歴ごと初期化。Esc：終了。
1回押して離すと1判断。操作キーの同時押しは無効です。無入力で進む時計や制限時間はありません。
下書きは初回3枚まで。送信後の追伸は候補が複数の時だけ、1枚ずつ最大2回です。
候補が一つでも依頼と違うなら実行しません。候補ゼロにも追伸できません。CかR、05ならXも使えます。

画面:
WORKSHOP＝工房、RECEPTION＝受付。TARGETは依頼票、星印・緑色は残った候補です。
BLUE＝青は工房では東机の印、受付では荷物の色です。用事番号は相手ごとに意味が違います。
DRAFT＝下書き、SENT＝送信済み、AVAILABLE＝残る札番号、USED＝消費済み。
ERASE SLOT＝削除位置、ROUNDS＝往復、POSTS＝追伸、DONE＝相手と用事を保存した結果。
詳しい全8札の日英対応と候補表はLESSON.mdを参照してください。

05の攻略例（各キーを押して離す）:
1 → 3 → Enter → Enter → 2 → 4 → Enter → Enter
2件成功、ROUNDS 2。Xなら最後の確認前へ戻ります。
C → Cでも2件を正しく確認した成功です。ROUNDS 4、札の消費は0です。

テスト（元の原作もウィンドウも不要）:
Windows: .venv\Scripts\python.exe -B -m unittest -v test_stages.py
macOS/Linux: .venv/bin/python -B -m unittest -v test_stages.py
同梱qa/canonical_reference.jsonを使うので、testsだけ抜き出さず教材フォルダー全体を保持してください。

実Pyxelの自動描画:
.venv/bin/python -B 05_two_requests.py --headless-smoke --screenshot initial.png --report initial.json
.venv/bin/python -B 05_two_requests.py --headless-replay 13EE24EE --screenshot won.png --report won.json
Windowsでは先頭を.venv\Scripts\python.exeに置き換えてください。
1〜8＝札、E＝Enter、D＝Space、L/T＝左右の位置、C＝全文確認、X＝Undo、R＝初期化。
各段階でまだない操作はコマンドエラーになります。入力数×2+2（最低12）フレームで終了します。
これは合成入力を実Pyxelで描く検証補助です。OSの本物のキー入力や人のプレイではありません。

困ったとき:
・python/pyが見つからない：Python 3.11以上を公式の方法で導入し、新しいターミナルを開きます。
・No module named pyxel：上記の.venv内Pythonでpip installし、同じ.venv内Pythonで起動します。
・venvを作れない：LinuxのPython導入でvenvが利用可能か確認してください。
・can't open file：ZIPを全展開し、.pyのあるフォルダーへ移動してから実行します。
・画面が開かない：GUIのある端末で実行してください。headless-smokeは画面を表示しません。
・キーが反応しない：ゲーム画面をクリックしてフォーカスし、一度すべての操作キーを離します。
・日本語が画面に出ない：この教材のUIはASCII設計です。日本語の説明はLESSON.mdにあります。
・テストでfixtureがない：qaフォルダーを含めて展開し直してください。原作は必要ありません。
・音が出ない：音声再生処理はありません。音声の障害ではありません。

権利と検証範囲:
LICENSEと各.py先頭に原作MIT全文を保持しています。元のNoto例外案内も原文を保持しますが、
この教材にはNotoフォントや字形データを含めません。Pyxelは外部依存で同梱していません。
クラウドLinuxの実Pyxel headless描画と合成Controllerを検証。Windows/macOS実機、Python3.11実行、
人による面白さ評価、ブラウザ、音声は未検証です。詳細はQA.txtとqa/にあります。

開発者向け・任意の原作直接比較:
python -B tools/verify_original.py --source /path/to/original/067_three_letters/model.py
原作がある場合だけ実行します。通常テストはこの手順を必要としません。
原作は読み取り専用で、-Bによりそのフォルダーへpycを作りません。
教材内のqa/canonical_comparison.jsonを更新します。--write-referenceは教材の参照fixtureを再生成する開発用です。

全15画面と単独起動検証を再実行（既にPyxelを入れた.venvを使用）:
.venv/bin/python -B tools/render_qa.py
Windowsでは.venv\Scripts\python.exeを使用してください。qa内の検証用PNG/JSON/logを更新します。
凍結時の配布ファイルを確かめる：python -B tools/check_freeze.py
検証を再実行すると日時を含むログ等が変わる場合があります。変更後は元の凍結チェックと区別してください。
