002 おばけ洗濯日和
Pyxel 2.9.9 / Python 3.10以降 / 独立して遊べる75秒アーケード

はじめ方
Windows：setup_windows.bat を一度実行し、play_windows.bat を開く。
macOS/Linux：sh setup.sh のあと sh play.sh。
Python/Pyxel導入済みなら python app.py。
ブラウザー版：web/ghost_laundry.html（初回はPyxel公式のCDN配信を読み込むためインターネット必要）。
この配布物は外部サイトに公開していない。

遊び方
ENTER：開始。P：練習開始。開始前に3秒カウント。
←→ / A D：左右移動。白いシーツが地面に着く場所で受け止める。
左右のかごに近づいてSPACE：持ち物を確定点にする。
1枚10点。束の追加点は最大12点。最大8枚。積むほど移動が少し遅くなる。
黒い×付き汚れ玉に当たると、持ち物の半分（端数切り上げ）を落とす。
一度にすべての大きな束は失わない。被弾後1.2秒は連続被弾しない。
地面の×と進行バーは、束の裏にも隠れない落下予告。白い短線が布の着地点。
落下中に風が変わっても、その物の着地点は変わらない。
75秒以内に220点で目標達成。時間切れの持ち物は得点にならない。
R：同じ配置で再挑戦。N：別の配置で再挑戦。ESC：表紙（表紙でESCは終了）。
練習中Q：途中で結果へ。M：消音切替（起動時は消音）。
音は補助のみ。このクラウド環境では音声出力を確認できていない。

品質の位置付け
技術確認と自動制御の得点は、人が楽しいと感じた証拠ではない。
第三者の楽しさ評価は未確認。検証の詳細は QA_NOTES.md を参照。
同一seedの再挑戦で「何枚で帰るか」を変えられる。
途中のN/Rは現在のラウンドを破棄する。

技術
model.py はPyxelに依存しない固定30 Hzの状態遷移。
app.py は表示・入力・音・粒子演出。描画は判定を変更しない。
test_model.py：python -m unittest -v test_model.py
policy_probe.py：到達可能な落下物を追う自動制御比較。人の上達や楽しさの代用ではない。
app.py --demo --headless：実際のPyxel描画による自動操作映像。自動プレイ表示あり。
media/automated_policy_silent.mp4 はそのGIFから無音で変換。
同名の「手動操作」映像として扱わない。

権利
ゲームコードと自作図形はMIT。LICENSE参照。
日本語bitmap文字はNoto Sans CJK由来、SIL Open Font License 1.1。
assets/NOTO-LICENSE.txtを同梱。音楽・外部画像は使用していない。
