092 海底図書館
探索アクション / 日本語 / Pyxel + Python標準ライブラリ

読みたい一冊を抜いたら、図書館の帰り道が流れはじめた。
９×５の浸水図書館で３冊を入口へ返す小さな探索。冊数を欲張る追加ノルマより、
題名を読み、開いた水路を泳ぎ、帰り道を選ぶ発見を狙いました。

Windows: Python 3.10以降を用意し setup.bat を一度実行。次から play.bat。
macOS/Linux: bash setup.sh の後 bash play.sh。導入時のみネット接続が必要。
ゲーム中の通信・API・外部素材取得・現実の支払はありません。音は使いません。
クラウドLinuxで検証。Windows/macOS実機、人の面白さ評価、実音声は未確認。

操作
表紙: 1/2/3で館A/B/C、Bは水流あり/なしの一変更比較、Space開始。
矢印長押しで泳ぐ。空手は２刻（0.4秒）、本を所持すると３刻（0.6秒）で１マス。
反対方向同時は０、縦横を同時に押した斜め入力も０です。
Z: 隣接本棚から一冊抜く / 同マスの床本を拾う / 入口で返却 / 隣の空載ロボットへ渡す。
X: 持本を今いる空床へ置く。床本がある場所へは置けません。本は後で拾えます。
P: 時間停止。地図はそのまま見えます。H: 説明（時間停止）。
停止中Backspace: 直前の空気補給時点へ本・開栓・地図・ロボット・時刻も全て巻戻す。
S: 空気鐘・入口・結果で保存。L: 保存を読込み停止状態へ。Pで再開。
R: 同館を全て初めから（確認）。M: 表紙（確認）。Esc: 終了（確認）。F12: 実画面PNG。
開始/停止/説明/再開などの切替後はキーを全て離してから操作してください。

水路と空気
本棚は抜くまで壁。隣へ行くと題名と、開栓後の流れの全範囲が見えます。
本を抜くと棚を通行でき、流れは４刻ごとに人と床本を１マス押します。
抜いた刻が流れ刻なら即座に流れます。画面上部の次の流れまでの刻数を確認できます。
元の棚位置へ床本を置いても流れは止まりません。壁や盤外へ押される場合はその場で停止。
床本が重なったときは番号の小さい本から拾います。所持は一冊だけです。
毎刻酸素－１。入口・空気鐘にいれば消費直後に60へ戻り、その刻は救助になりません。
酸素０では本をその場に置いて入口へ救助。返却済み本、水路、探索地図は保持します。
救助は局所的な立て直し、Backspace巻戻しは全世界を空気時点へ戻す別の操作です。

ロボット
紫の線を１刻１マスで往復。空載なら通ったマスの床本を拾い、入口で自動返却。
隣のマスでZを押して渡せます。入口では自分の返却が優先です。
泳ぎを塞がず、流れや酸素の影響も受けません。未知の本の題名はロボットの返却まで伏せます。
自力で３冊返す方法も、ロボットに一冊以上渡す方法もA/B/Cで実行確認済み。
無救助や返却順は任意記録。基本目標は３冊の返却と題名を読むことです。

モデル更新
入力/移動→本操作→４刻水流→ロボット移動/拾得/返却→酸素/空気→救助→全返却。
移動待ちは空手最大２、所持最大３までたまり、移動すると０へ戻ります。
描画の泡は衝突や得点に影響しません。説明・停止・結果では論理刻が止まります。

保存と記録
save.jsonに作品ID、版、状況、状態、意味入力履歴、比較設定、全世界の空気時点を保存。
一時ファイルから正常完了後に置換。型・範囲・履歴再実行を検査し、破損/未知版は元を残します。
Rで新規開始可能。読み込みだけで進行しないよう停止状態になります。
各実行mediaフォルダへ元ソース、SHA、意味入力、論理刻、状態を保存します。
events.ndjsonは追記型の全記録、events.jsonは定期チェックポイントと終了時の一覧です。
テストはmediaへ書き込まず、元観測を後の修正コードで置換しません。

検証資料
model.py純粋状態/step、controller.py release gate/停止/保存、app.py日本語描画。
solution_logs.json: 自力とロボットのA/B/C達成入力。救助なし、最長空気間隔も実測。
comparison_results.json: 同一の低レベル入力を流れあり/なし両方で実行し、同じ３冊返却を達成。
比較は水流だけを変更。棚の開放、酸素、速度、ロボット、目標は共通。公開旧版ではありません。
探索器は有限状態を調べて実行例を探すもの。全ゲームの最短・最適・人の上手さは主張しません。
python -m unittest discover -v で機能検査。UIの論理テストとネイティブ操作は別記録。
media/automatic_*は実Pyxelの自動操作・無音。原GIFの全フレームを30fpsでMP4化。
日本語は同梱glyphs.json。Noto Sans CJK由来。全文フォント/Pyxelライセンスはassets。
