099 あしたも開く店
取り置きの一品が、明日の顔ぶれを変える三日間の店。

必要: Python 3.10以上、Pyxel 2.9.9。実行時はPyxelと標準ライブラリだけ。
Windows: setup.bat を一度実行し、その後 play.bat。日本語を含むフォルダ名にも対応する引用符付きです。
Linux/macOS: bash setup.sh の後に bash play.sh。ネット接続は最初のPyxel導入時だけ必要です。
動作確認OSの範囲と実機操作記録はQA.txtを参照。Windows/macOSの実機確認を意味しません。

目標
３日間で４個以上を販売し、３日目の家賃後に現金０コイン以上。
マグも栞も仕入１、販売２。家賃は一日２。現実のお金・購入はありません。
棚は取り置きを含め５枠。朝の仕入は０～３個で、受取より先に棚へ置きます。
予約は今の一品に人物名を付ける選択。今の売上は０、翌朝本人が必ず受け取ります。
紹介あり版では、受取した先頭の一人が、その日の固定客２人の後に友人を連れてきます。
友人は元の予約と逆の品を一つ希望。紹介は最大一人で、後出しの客数変化はありません。
３日目に４日目予約は受けません。三日間の短編であり、４日目以降は実装していません。

操作
表紙: 1/2/3でA/B/C、Bで紹介なし比較、Spaceで開始。
朝: 左右で品、上下で個数。Enterで予告、キーを離し、もう一度Enterで朝を開始。
来客: 左右で販売・予約か見送り。Enterで予告、もう一度で実行。受取は必須で販売数に一度加算。
閉店: Enterで家賃予告、もう一度で閉店。現金不足なら休業。Xで直前へ戻して見直せます。
Tab: 翌日予定と来店帳。H: 説明。P: 停止。X: 一決定undo。
S: 朝・閉店・結果で保存。L: 読込。R: 同じ三日間やり直し確認。M: 表紙確認。
Esc: 終了確認。F12: media内のネイティブ記録へPNG保存。
全操作は押し直し式です。同時キーは無効。画面遷移後は全キーを離してから新しく押します。
会話・予告・説明中に時間やコインは進みません。音に依存する情報はありません。

保存と再現
save.jsonは作品ID、版、状況、設定、全意味入力履歴と状態を持ちます。
一時ファイルを正常に書いた後に置換。読込み時に型・版・全履歴の再生一致を確認します。
破損時は元ファイルを自動削除せず説明し、Rで新しく始められます。
Xは試行を戻す操作です。店の世界で受けた予約を破る機能ではありません。

異なる店の過ごし方
予約なしでも、固定来客へ計４個販売する道を全A/B/Cで確認しました。
予約と逆品の仕入をつなぐと、本人の再来と友人の言葉が棚に残ります。
最終現金だけを評価軸にしていません。予約へ人工的な罰や隠し信用点もありません。
comparison_results.jsonは「受取後に紹介あり／なし」だけを変え、同じ目標と入力を使います。
比較変種は公開旧版ではありません。紹介なしでも本人の受取と記憶は残ります。

検証を再実行
python -m unittest test_model test_ui -v
python experiments.py
テストは一時保存先を使い、mediaのハッシュ不変を検査。既存映像とネイティブ原ログを上書きしません。
experiments.pyは有限状態を走査しoracle_results.json、計画の全過程と比較を再生成します。
未来の収支に影響しない人物記憶のみを探索キーから除外。人物の記憶そのものは別の単体検査を実施。

素材と補助ツール
図形・人物・小物はコードで作成。日本語ビットマップはNoto Sans CJK由来、SIL OFL 1.1全文同梱。
実行用のglyphs.jsonを同梱。フォント再生成時だけPillowとローカルNotoフォントが必要です。
動画変換・PNG抽出の開発用toolsはPillow/ffmpeg/ffprobeを使い、ゲーム実行には不要です。
画面は自動操作の実Pyxel描画、無音映像。人の試遊・楽しさ・音の実聴・全OS対応の保証ではありません。
NOTE.txtとX_POSTS.txtは未投稿の原稿候補です。
