090 一夜の探検隊
実装・機能検証用。面白さは実際の人による確認待ち。

３人で先頭を交代し、６区間の丘に着いて夜明けを見る、小さな役割戦略の遠足です。
先頭だけが体力を使い、後ろの２人は道具で支えます。誰が何を助けたかを、最後の一言で返します。
これは一人用です。三人の登場人物を一人が動かします。複数人同時操作の検証とは称しません。

起動
Windows: Python 3.10以上を用意し setup.bat を一度実行、その後 play.bat。
Linux/macOS: sh setup.sh、その後 sh play.sh。初回にはPyxel取得の通信が必要です。
ゲーム実行時はPyxel＋Python標準ライブラリ。外部アカウント・通信・追加素材不要。
Windows/macOSの実機検証は未実施。Linux実Pyxel描画とネイティブ操作検査は別記。

操作
表紙1/2/3: A/B/C。B:後衛の道具だけ／先頭の道具も有効の比較。Space/Enter:開始。
隊列モード: ← →で隊員を選ぶ、Zで先頭に。↑ ↓で公開分岐を選ぶ。
Enter:次の１区間へ。休憩所では選んだ１人の体力回復、その次のEnterで出発。
Tab:隊列/道具を切替（出発前と休憩所だけ）。道具モード:↑ ↓で道具、← →で渡す人、Zで受渡し。
X:１区間戻す。R:確認後同ルートを最初から。H/P:説明。M:表紙。Esc:確認後終了。F12:PNG。
各操作後、押していたキーを一度離してください。選択中・説明中・結果中、時間は進みません。

公開規則
初期体力は全員５。アキは崖、フミは暗道、ルウは寒道が得意。
基礎負担:暗道２、崖３、寒道２、平地１。先頭が得意なら１軽減。
ランタンは暗道、ロープは崖、毛布は寒道。後衛が対応道具を持てば１軽減。先頭本人が持つ道具は使えません。
負担は最小０。先頭だけ消耗。体力０は先頭不可ですが後衛支援は可能。
不足時は進む前に警告し、体力も区間も変えず隊列を選び直せます。全員０なら救援、死亡なし。
２/４区間後は１人＋２（上限５）。休憩１回ずつ。道具は出発前と休憩所だけ配り直せます。
道具３個は複製不可、１人０～２個。１人２個までという配布は24通りです。
更新:予告と同じ負担算出→先頭と体力の確認→消費→区間進行→休憩待ち→到着判定。
６区間目の消費後に全員０でも、丘に到着していれば到着を先に認めます。
undoは歩く直前の全状態へ戻る。到着後の回復と再配布をまとめて戻し、回復だけを繰り返して増やせません。

ルート
A:暗道、崖、平地、寒道、暗道、平地。初期ランタン=アキ、ロープ=フミ、毛布=ルウ。
B:崖、崖、暗道/寒道、崖、平地/暗道、寒道。初期ランタン=ルウ、ロープ=アキ、毛布=フミ。
C:寒道、暗道、崖/平地、寒道、暗道/崖、平地。初期ランタン=フミ、ロープ=ルウ、毛布=アキ。
暗道は夜の花、崖は町の灯り、寒道は星と霜、平地は草原。
見たい景色の好みに隠し点差はありません。体力の余り・全員先頭は任意の記録で、達成の上位下位にしません。

設計と検査結果
全24配布、先頭３択、休憩３択、公開分岐を有限状態探索。各状況に到着例を保存。
４方策（その場の軽い負担、別分岐の景色、後衛に道具を配置、アキ先頭固定）を記録し、いずれもA/B/Cへ到着。
同じ先頭中心でも正当な到着です。難しくするため道具破損や締切を後付けしませんでした。
役割交代は最短正解への強制ではなく、余り体力・誰が助けたか・景色の選択を比べる遊びの仮説です。
policy_results.jsonには到着時体力、実操作列、全ログ、探索した状態数があります。

一変更比較
通常は後衛の道具だけ、比較は先頭の道具でも有効。初期体力、道具、ルート、休憩、到着目標は同じ。
comparison_results.jsonの共通操作列は両版で到着。全員満タンなどの別目標は加えていません。
比較版が楽か、隊列を考えるのが楽しいかは人による確認待ちです。

ファイルと再現
model.pyは描画とI/Oのない不変State/step。controller.pyは選択・入力解放・全員undo。
app.pyは実Pyxelの描画。python -m unittest test_model test_ui -vは証拠を変更しない検査。
python experiments.pyは方策・比較JSONを生成。ゲーム実行に不要です。
イベントは規則版、状況、比較規則、意味入力、区間、全状態、SHA256を記録。
各media/automatic_*とmedia/native_*は当時のソースと入力原本を個別に保持。後の検証はderived_replay_validation.jsonへ。
映像は自動意味入力による実Pyxel描画。GIFの全フレームを一度ずつ30fpsのMP4へ変換。約25秒、音声トラックなし。
音を生成しない設計で、音に依存する情報はありません。実際の人の試遊、音響品質、Windows成功の証明ではありません。
assets/glyphs.jsonは日本語ビットマップ。NotoとPyxelのライセンス全文をassetsに同梱。
図形は自作コード。toolsのフォント生成/動画変換だけ開発用Pillow/ffmpegを使い、ゲーム実行時には不要です。
