066 雨粒ドラム：独立実行できる五段階教材

最初にLESSON.mdを開いてください。01_score_clock.pyから順に実行します。
各.pyは別ファイルを必要としません。requirements.txtはpyxel==2.9.9です。

必要: Python3.11以上、Pyxel2.9.9、GUI/OpenGL対応PC。
作者検証: Linux/Python3.12.14/Pyxel2.9.9。Windows/macOSの実機検証は未実施。
初回だけ環境を準備します（ネット接続が必要）。
Windows: py -3 -m venv .venv
         .venv\Scripts\python.exe -m pip install -r requirements.txt
         .venv\Scripts\python.exe 01_score_clock.py
macOS/Linux: python3 -m venv .venv
             .venv/bin/python -m pip install -r requirements.txt
             .venv/bin/python 01_score_clock.py

01 主拍の受付と60刻時計。02 任意装飾と入力補正。
03 譜面刻から予約する屋根の返事。04 重複返事の抑制と三譜面。
05 停止・現在/前小節のやり直し。

Enter: 表紙→STEP、演奏中AUTO/STEP。Space: STEPで一刻。
A/S/D: 木/瓦/トタン。01/02ではAだけ。長押し連打なし。
同時押しはA→S→Dの順で一打。操作後の全キー解放待ちあり。
表紙の左右: 02以降、判定補正-6～+6。
表紙の1/2/3・B・V: 04以降、譜面・トタン返事15/45・速度75/100%。
P/X: 05で現在/前小節へ再開。P一回目は停止、二回目で現在小節。
R: 設定を維持して最初から。Esc: 終了。

編集は保存→ゲーム終了→同じ.pyを再実行。Rはソースを読み直しません。
100%では1論理刻=1/60秒。state.tickは次に処理する刻です。
手動音は入力raw刻、判定だけraw+補正、返事は譜面slot+15/+45。
主拍75%以上で基本完成、装飾は任意。03だけ同時返事を全部送る未完成段階。
同一チャンネルへの複数playは後が前を置き換えます。04/05は原作どおり先約だけ。

テスト: python -B test_stages.py
CP932既定ファイル読み取りの模擬: python -B qa/cp932_check.py
実Pyxel: python -B qa/runtime_checks.py 新しい出力フォルダー
相対パス保護: python -B qa/relative_output_check.py 新しい出力フォルダー
台帳照合: python -B qa/verify_freeze.py
qa/REVIEW.mdとqa/final-results.jsonに実施範囲があります。
出力は新規ファイルのみ、スクリプトの隣への保存は禁止です。

音定義は原作と同一ですが、dummy音声ドライバーによるAPI実行だけを確認し、
音を聞いた・人が演奏した・ブラウザーで動いたとは主張しません。
原作は全フォルダーを維持してapp.pyを起動します。本文は原作ZIPの案内を参照。
MITのLICENSE/同一のLICENSE.txtを保持。Noto由来字形は別のSIL OFL、
assets/NOTO-LICENSE.txtとassets/PYXEL-LICENSE.txtを改変せず収録しています。
