084 昨日の自分と配達
日本語 Pyxel / 1人・時間協力パズル

昨日の自分に、そこで少し待っていてもらうゲーム。
最初は単独の記録走。スイッチまで歩き、そこで待つ記録を作ります。
次は分身と同時に動く再生走。今日の自分が荷物を拾い、届け先へ置けば配達完了です。

導入
Python 3.10以降。Windowsは setup.bat を一度実行し、次から play.bat。
macOS/Linuxは bash setup.sh、次から bash play.sh。
導入にネット接続が必要。実行時の外部依存はPyxelのみ。ゲーム中に通信しません。
検証はクラウドLinux。Windows/macOS実機、人による初見試遊、実音声は未確認。

操作
表紙1/2/3: A/B/C、Space開始。表紙B: A/Bだけ押し続け式と一度踏む式を比較。
矢印: 1マス。Space: 待つ。Z: 現在地の荷物を拾う/届け先へ置く。いずれも1刻。
記録走Enter: 早めに終了し、24刻までその場所で待つ意味入力を埋める。
記録できたらSpaceかEnterで再生走へ。配達せずに終えた記録も失敗ではありません。
X: 一刻戻す。現在役、分身、再生位置、荷物、扉残数を一緒に戻す。
R: 確認して同じ記録で再開。Tab: 確認して新しい単独記録へ。V: 直前版の記録を復元して再生。
H/P: 説明・停止。M: 確認して表紙。Esc: 終了確認。F12: PNG保存。
入力を押し続けても1回だけ。場面移動後はキーをすべて離してから新しく押してください。

扉と分身
普通の扉は誰かが対応スイッチにいる間だけ開きます。刻の開始位置で開閉を決め、
両者の移動へ同じ開閉を使います。今スイッチへ乗った効果は次の操作からです。
扉上で閉じても押し潰されず、中から外へ出られます。閉じた扉へ外から入ることはできません。
分身は意味入力をもう一度実行します。位置の映像を強制代入して壁抜けはしません。
今日が別の扉を開けば、分身も記録時と違う位置へ進む場合があります。画面に理由を表示します。
分身のZは荷物に触れません。2人は重なれます。体の押し合いはありません。
CのS2だけ、移動後に踏んでいれば時限扉を残り4に更新。離れた後も4回の移動判定まで開きます。
右の3刻予測は「今日が待つ場合」。今日が移動すれば扉と予測も変わります。

記録
スロットは起動中に1本＋直前版1本。終了後のゲーム再開用セーブは実装していません。
操作証拠としてmedia内へ意味入力、初期設定、最終状態、当時のソースを自動記録します。
その記録はQA用で、ゲーム内のロード機能とは区別します。

3つの配達路
A: スイッチで長く待つ昨日が、まっすぐな道を開く。
B: 荷物を拾う寄り道と、昨日のスイッチ到着時刻を合わせる。
C: 昨日が最初の扉を支え、今日が次の4刻扉を開く。
24刻以内の配送が基本目標。長く待つ安全な記録に減点はありません。

確認した入力例（座標0始まり）
A記録: 上・上・右、Enter。今日: 右・Z・右・右・右・右・右・Z。8刻で配達。
B/Cの検証済み入力はsolution_logs.json。各庭に2刻遅らせた慎重案も保存。
A/Bで同じ記録と操作、同じ24刻/荷物/届け先を固定して押し続け式/一度踏む式を比較。
Aでは早く離れる短い記録でも今回の配送に間に合いました。待機を無理に必須へはしていません。
技術的到達性は、人が分身を仲間に感じることや面白さの代替ではありません。

ファイル
model.py: 不変State/step。controller.py: キー解放ゲートと履歴。app.py: 実Pyxel描画。
solution_logs.json: 6配送入力。policy_results.json: 長待機、早く離れる、スイッチなし。
comparison_results.json: 同一入力の一規則比較。test_model.py/test_ui.py: 自動検査。
media/automatic_* は実Pyxelの自動操作・無音。media/native_* はエージェントの実操作。
PNG/GIF/MP4、元ソース、意味入力を保管し、テストから書き換えません。
日本語は同梱glyphs.json。Noto/Pyxelの全文ライセンスはassets。全コード同梱。
