081 交代灯台守
非対称ソロ / 日本語 / Pyxel 2.9.9 + Python標準ライブラリ

見た船の予定を覚えて階下へ。灯りを向けたまま充電し、戻ると港が空いている。
「今なら見張りを離れられる」という段取りの手応えを試す作品です。
現実の航海・救難・灯台業務のシミュレーションではありません。

起動
Windows: Python 3を用意し、setup.batを一度実行。その後play.bat。
Linux/macOS: bash setup.sh の後、bash play.sh。
セットアップのみPyxel取得に通信が必要。起動時の外部通信・アカウントは不要。
実機確認はクラウドLinux。Windows/macOSは未検証。
launch.shは制作環境専用。配布先ではplay.sh/play.batを使います。

遊び方
左右で操作を選びZ/Enterで確定。選んでいるだけなら時刻は進みません。
Spaceは待機。Tabは階段確認（Z/Enterで実行、他のキーで取消）。
灯りの向き変更、階段、待機はそれぞれ1刻。階下でも灯りの向きは保持。
船の通過刻に向きが一致し電池が1以上なら入港し、電池を1使います。
灯りを点けたままでも、通過成功以外には電池を消費しません。
階下の充電は「開始」「仕上げ」の2刻。+3、上限4。中止すると増えません。
仕上げた刻の船に充電済みの電池を使えます。
下階の観察帳は最後に上で見た時刻の情報です。残り刻は現在との差。
未確認便の航路は見えません。全便の出現刻は予定表で公開。
無線の再通過案内は階下でも届きます。
通過を逃した便は安全な外港へ。4刻後に1回だけ再通過します。
再度逃した便は外港で待機。死亡・座礁ではありません。
全便入港が基本達成。外港利用は隠れた減点になりません。
初回案内数・階段回数は任意記録。星・速度評価はありません。
Xは全状態を1刻戻す。Rは確認後同じ勤務を最初から。
1/2/3は勤務A/B/C。PまたはHで説明・停止。Mで表紙。
Bは「階下にも現在の海の小窓」の表示比較。物理・費用・目標は変更しません。
F12画像、S記録保存、Q/Escape終了。
遷移後と連続した確定は、一度操作キーを全て離してから入力。

検証済みの解（最短・唯一解ではありません）
policy_results.jsonに意味入力、全刻の状態ハッシュ、最終状態を保存。
A_first: 1回充電、初回4便。
A_outer: 最初にMへ向け、全4便を外港経由で6/10/14/18刻に案内。
B_first: Mのまま階下で2便を案内。全5便達成に2回充電。
Bは初期1+充電1回の増分最大3 < 5便なので、少なくとも2回必要。
C_once: 1回充電で全5便。C_firstは2回充電でも合法な別手順。
常時上階の案内方策は全勤務で電池不足。外港活用は正当な安全弁です。

技術・映像と限界
model.pyは描画から独立した不変State/step。controller.pyで入力解放を管理。
テストはpython -m unittest -v test_model test_ui。証跡フォルダは書き換えません。
tools/verify_policies.pyは標準出力のみ。既存記録を再生成・上書きしません。
media/automatic_*は実Pyxel描画を自動操作で収録。人の試遊ではありません。
元GIFの全フレームを1回ずつ30fpsでMP4化。映像は無音。
media/native_*はエージェントのネイティブ入力技術検査。人の感想ではありません。
各記録は実行時app/model/controllerの複製とSHA-256を保持。
楽しさ、初見の理解、音の実聴、Windows動作は確認していません。

ライセンス
自作コード・図形: LICENSE.txt（MIT）。Pyxel: assets/PYXEL-LICENSE.txt。
日本語ビットマップ: Noto Sans CJK由来、SIL OFL1.1全文: assets/NOTO-LICENSE.txt。
実行時にフォント/Pillow/ffmpegは不要。
tools/build_font.py と tools/export_video.py は制作補助でPillow/ffmpegが必要。
