087 かくれんぼ写真家
姿を消しても、いたずらした景色は隠せない。

ローカル二人・同じキーボードで遊ぶ、小さな写真の追いかけっこです。
写真家は一枚写す。ことりは違う仕掛け二つを変えて出口へ帰る。
草の中では、ことりの姿は二人とも見えません。草へ入った瞬間や足音、
変わった景色をヒントにしてください。完全な秘密画面ではありません。

起動
Python 3.10以降を用意してください。Windowsはsetup.batを一度実行し、
以後play.batを実行。macOS/Linuxはbash setup.sh、bash play.sh。
初回だけPyxelの取得が必要です。ゲームの実行はPyxelと標準ライブラリのみ。
日本語ビットマップ同梱。ネット接続、外部素材、アカウントは不要です。
launch.shは制作環境専用で、通常はplay.sh/play.batを使ってください。
Windows/macOSの実機動作と物理キーボードの同時押し限界は未確認です。

操作
表紙: 1/2/3で庭 A/B/C、Bで波紋表示だけの比較、Enterで開始。
写真家: 矢印で移動、Mで撮影予告、Nでその場を時計回りに向く。
ことり: WASDで移動、Fで足元の仕掛けを一度だけ変更。
両者: Pで停止/相談、Rで再試合相談、ZとEnterで双方同意。
Escで表紙、F12でゲーム画面を保存。
結果: Spaceで役割を交換して再試合（席を交代。キーは役割に固定）。
Tabで終了後だけ全軌跡を表示。実戦中は軌跡を漏らしません。
対戦途中にundoはありません。再試合を双方で確認してください。

小さな規則
1刻は0.25秒、二人とも2刻に1歩。入力は同じ旧状態から同時処理します。
反対方向や複数方向の同時入力は移動0。役割操作が移動に優先します。
写真家のMとN同時はどちらも不採用。二人分の入力全体は拒否しません。
撮影は同じマスと正面3マス、壁まで。白枠の次の刻に判定し、その刻まで
写真家は動けません。ことりは移動できます。草の上は撮影できません。
撮影後3刻は再撮影できません。撮影と出口が同じ刻なら撮影が先です。
ことりが違う2個の背景を変え、出口へ戻ると勝ち。72刻で閉園し写真家勝ち。
同じ仕掛けを連打しても達成数は増えません。接触とすれ違いは自由です。
景色の変更に撮影ルールを変える隠れ効果はありません。
停止/表紙/結果は論理刻が進みません。画面移行前後のキーは一度すべて離してから操作します。

比較・検証
A/B/Cの公開配置と72刻は設計候補から変更していません。
波紋あり/なし比較は表示だけで、勝敗と背景の変更は全く同じです。
同一入力で両者の勝ちを再現。草経由のことり帰還はA25/B35/C21刻、
相手静止の撮影例はA18/B14/C18刻。最短・公平・必勝の主張ではありません。
公開画面だけを読む追跡方策と固定帰還方策の組合せはA/Cでことり、Bで写真家。
波紋の有無でこの標本の勝者は変わりません。波紋の面白さを証明しません。
両者の勝ちが存在することは対戦バランスの証明ではありません。
人の2人試遊は未確認。技術検査と自動実演だけです。

記録と再現
media/native_*はエージェントが実画面を操作した原記録、automatic_*は自動入力。
各フォルダに実行時ソースの原本、SHA256、全状態、論理刻、意味入力を保存。
テストはmediaを書き換えません。結果再生は実戦の隠れ条件と区別します。
音は実装していません。動画は無音の実Pyxel描画であり、人の二人試遊ではありません。
全ソースとMIT全文、Pyxel/Notoのライセンス全文を同梱。

最終のnative確認と動画の由来
v1.0.1の開始キー保持・新しい撮影・Esc表紙を実画面で確認しました。
同梱の最新動画はその入力修正後の収録です。最後に通常起動時だけ録画バッファを
30秒から0秒へ変更しました。自動実演の設定/描画は同じで、元の収録ソースと
動画をそのまま保存し、この差分をcapture_provenance_validation.jsonで明記しています。
