009 ふたりで一つの傘
Python 3.10+ / Pyxel 2.9.9。100本計画の009。1人用、音なし。

起動
Windows: setup.batを一度実行し、その後play.bat。失敗は画面を閉じず表示。
macOS/Linux: bash setup.sh、その後bash play.sh。
必要な実行時依存はrequirements.txtのPyxelのみ。assets/glyphs.jsonを同梱する。
配布フォルダ全体を置く。日本語・空白を含むパスを想定。任意作業ディレクトリから起動可。
launch.shは検証環境専用。一般配布はplay.sh/play.batを使う。

操作
タイトル: 左右でA/B/Cを選び、Vで左右反転、SPACEで開始、Qで終了。
歩行: 左右は二人の中心、上は寄る、下は離す。
SPACEは傘の寄せ先を中央→左→右→中央と選択。押し続けても連続変更しない。
傘は瞬間移動せず、選んだ側へ滑らかに動く。6キーの同時押しを要求しない。
Pで停止して操作確認。Rで同じ道を最初から。Tで現在区間の進入配置と濡れ0へ戻して3秒準備。
練習後は記録に練習と表示。Qは選択へ戻る（ESCも対応）。結果Nで次の道。

見方とルール
橙の横線が今の足元。上の帯がこれから来る地面。今／次の帯名も表示。
縦の短い雨筋は雨、青い横波の地面は水たまり。緑枠が傘の保護範囲。
人物の身体全体が枠に入る必要がある。足が水たまりに触れるとその帯で一人1回、濡れ+20。
雨に当たって傘に入らなければ毎秒7.2濡れる。乾いた場所では濡れない。
濡れで歩行速度は落ちない。100では止まり、区間練習かそのまま帰るかを選べる。
風は実装しておらず「風なし」と明記。傘と雨の隠れたずれはない。
橋は手すりが見え、入口の先細りを予告する。身体が道外なら入口で安全停止。
横に戻れば再開する。手すりからの強制ワープ・不可避の押出しダメージはない。
濡れても家に帰れば終了。無傷の帰宅は任意の上達目標で、隠れた合格点はない。

3状況
A 寄って歩く: 全面雨と細い水たまり。傘中央のまま、距離を変える導入。
  広い道の端を歩く安全な別解も認める。わざと罰を足して禁止しない。
B 片側だけの雨: 幅56の橋と幅28の水たまり。離れて跨ぎ、雨側の一人へ傘を寄せる。
C 戻る準備: 橋から全面雨へ寄り直し、次の橋では離す。乾いた移行帯を使う。
左右反転は同一規則の対称性。無制約ランダム生成はしない。

検証
python -m unittest -v
python experiment.py
python tools/test_portability.py
--baselineで幅128の橋を持つ比較基準版を実行できる。
--demo --headlessは自動操作のPyxel描画を25秒記録する検証用。
media内は自動プレイと明記した実エンジン描画。人のプレイ／面白さ評価ではない。
Windowsの標準文字コードcp932を模した読み込み試験済み。Windows実機GUIは未検証。
日本語字形はNoto Sans CJKから必要な文字だけ作成。ライセンスはassets/NOTO-LICENSE.txt。
コードMIT: LICENSE.txt。字形再生成のみPillowとNotoフォントが必要、遊ぶ時は不要。
