007 ころがる切手 — 日本語5段階教材 / Python 3.11+ / Pyxel 2.9.9

原作Aの一本道だけを使う中級入口の教材です。B/Cを含む3面完成版ではありません。
説明は日本語、実行画面はASCIIと図形。音・画像・字体ファイルは不要です。
各01〜05は単体で実行可能。原作model.pyや他の段階をimportしません。
はじめにLESSON.mdを読み、01から順番に進めてください。

このREADMEがあるフォルダーで実行します。初回のみネット接続が必要です。
macOS / Linux:
  python3.11 -m venv .venv
  .venv/bin/python -m pip install -r requirements.txt
  .venv/bin/python -B 01_position.py
  .venv/bin/python -B 02_inertia.py
  .venv/bin/python -B 03_fold_drag.py
  .venv/bin/python -B 04_collision.py
  .venv/bin/python -B 05_delivery.py
  .venv/bin/python -B -m unittest -v test_stages

Windows PowerShell / コマンドプロンプト:
  py -3.11 -m venv .venv
  .venv\Scripts\python.exe -m pip install -r requirements.txt
  .venv\Scripts\python.exe -B 01_position.py
  .venv\Scripts\python.exe -B 02_inertia.py
  .venv\Scripts\python.exe -B 03_fold_drag.py
  .venv\Scripts\python.exe -B 04_collision.py
  .venv\Scripts\python.exe -B 05_delivery.py
  .venv\Scripts\python.exe -B -m unittest -v test_stages

操作:
  左右 / A D: 傾ける。03以降は上下 / W Sも使用。
  P: 一時停止/再開。R: 初期化。Esc: 終了。
  原作と違い、タイトル・面選択はありません。起動後すぐ実験できます。
  赤い線は速度。切手と封筒を2倍で描き、数値は論理pxで表示します。

ヘッドレス検査（初期12更新。人の試遊ではありません）:
  .venv/bin/python -B 01_position.py --headless-smoke --screenshot qa/01_initial.png
  .venv/bin/python -B 02_inertia.py --headless-smoke --screenshot qa/02_initial.png
  .venv/bin/python -B 03_fold_drag.py --headless-smoke --screenshot qa/03_initial.png
  .venv/bin/python -B 04_collision.py --headless-smoke --screenshot qa/04_initial.png
  .venv/bin/python -B 05_delivery.py --headless-smoke --screenshot qa/05_initial.png
  .venv/bin/python -B 05_delivery.py --headless-smoke --demo --screenshot qa/05_delivered.png
Windowsでは上記 .venv/bin/python を .venv\Scripts\python.exe に置き換えます。
--demo を付けると各段階の合成入力列を実行し、その後12更新して終了します。
--screenshot は --headless-smoke と一緒に指定。JSON状態が標準出力へ出ます。

最終版の再現できる成功手順:
  R → 右を約4秒（右壁で停止）→ 左を約0.2秒 → 離して待つ。
  合成入力では右240更新、左12更新、無入力120更新。273更新目で配送。
  手動タイミングには誤差があるためHOLDと速度を見て調整します。
  壁なしで封筒へ進み、手前で逆入力して止まる遊び方もできます。

テスト:
  test_stages.pyはPython標準ライブラリのみ。モデル・入力処理を検査します。
  原作がない配布先では原作照合2件をSKIP。失敗ではなく未実行として表示。
  原作照合する場合は環境変数PYXEL_ORIGINAL_007に原作フォルダーを指定します。
  qa/QA.mdに実施済み項目と未実施項目、画像とログを分けて記録。
  -Bでバイトコードを書かず、原作の全ファイルSHA-256も比較しています。

配布範囲:
  5本の.py / LICENSE / requirements.txt / README.txt / LESSON.md /
  lessons.json / lesson_meta.json / test_stages.py / diffs / qa
  .venvは同梱しません。コードの原作MIT全文を各.pyの先頭コメントに保持。
  LICENSEは原作LICENSE.txtの原文です。そこにあるNoto通知は原作の通知を保持したもの。
  この教材にはNoto由来の字体を含めません。Pyxelは外部依存です。
