093 小さな怪盗の三夜
版 093-1.0 / Pyxel + Python標準ライブラリ / 日本語UI / 通信なし

昨日使った窓に、今夜はちゃんと見張りがいる。
三夜で三つの小物を持ち帰り、部屋に並べる短い潜入ゲームです。
前の夜に通った門だけが次の夜に警備を増し、通らなかった門は静かになります。
別の景色へ回ることも、同じ門を待って抜けることもできます。

起動
Windows: Python 3を導入し setup.bat を一度実行。その後 play.bat。
macOS/Linux: python3がある環境で bash setup.sh、以後 bash play.sh。
requirements.txtのPyxel以外に実行時の追加パッケージは不要です。
setupにはPyxel取得のため通信が必要。ゲーム実行時は外部アカウントも通信も不要。
この納品ではcloud Linuxの確認を記録します。Windows/macOS実機は未検証です。

操作
表紙で1/2/3: A/B/C。B: 前夜適応版と初期警備固定の比較版を切替。
SpaceまたはEnter: 開始。
矢印: 一歩の方向を選ぶ。Space: 待つを選ぶ。Z: 品を包む／入口から帰るを選ぶ。
Enter: 選んだ行動を一刻だけ実行。選択だけでは時刻は進みません。
X: 一決定undo（次の夜へ進む操作も戻せます）。
R: 現在夜を入口から再開。N: 三夜全体を再開。どちらも確認画面を挟みます。
H/P: 説明を開閉。説明・表紙・確認・幕間・結果の間は世界が進みません。
S/L: 幕間または三夜の結果で保存／読込。Esc: 終了確認。M: 表紙。
F12: 起動ごとのmedia/native_...へ画面を保存。
同時押しは無効。開始・確定・説明などのキーを一度すべて離してから次の操作をします。

館と番人
7列×5行、上・中央・下の横道と両端の縦道。入口S=(0,2)、品T=(6,2)。
門は(3,0),(3,2),(3,4)。隣接や視線では見つかりません。
警備0: 無人。警備1: 偶数刻に門、奇数刻は詰所。
警備2: 3刻周期で余り0/1は門、余り2は詰所。
新しい刻の番人位置→選択した移動→同じマスの発見判定→品操作の順です。
門にいたプレイヤーが新しい刻に門を出れば、古い位置では発見されません。
右側の3刻予告と選択した行動の危険表示は、実際のモデルから計算します。
門の手前で待てます。壁への移動・使えない品操作は刻を消費しません。
今夜一度でも通った門を記録。往復でも増加は1。次の夜だけ+1、未使用は-1。
警備は0~2。最終夜後には更新しません。失敗や再開では適応しません。
発見・40刻切れはその夜の入口へ戻り、今夜の所持と足あとだけ消します。
前夜までの取得品は残ります。40刻目の帰還は成功として扱います。
基本目標は三品。発見回数・合計刻・経路は別記録で、無発見は必須ではありません。

保存と記録
save_093.jsonに作品ID、版、状況、状態、意味入力、undo履歴、設定を保存。
UTF-8の一時ファイルを書き終えてから置換。未知版や破損は読まず、元ファイルを残します。
読み込めなければNで新しい三夜を開始できます。個人情報の入力や送信はありません。
mediaの起動記録は実入力、状態ハッシュ、起動時ソースコピーを含みます。
共有する必要はありません。自動テストは一時フォルダを使用し観測記録を上書きしません。

確認資料
test_results.txt: 純粋モデルと入力境界の自動検査。
solution_logs.json: A/B/Cの別経路、同経路、往復別経路の三夜入力と結果。
reachability_results.json: 警備27通り×各3経路の到達確認。
comparison_results.json: 警備適応だけを変え、同じ入力で両版三品を確認。
QA.txt / NATIVE_OBSERVATIONS.txt: 技術確認の範囲と未確認事項。
media/automatic_...: 実Pyxel描画への自動意味入力による無音映像。人の試遊ではありません。
NOTE.txtとX_POSTS.txtは未投稿の原稿候補です。

ソースと利用条件
model.py: 不変状態と純粋更新。controller.py: 選択、確定、release gate。
app.py: 日本語描画とイベント採取。storage.py: 検証付き保存。
experiments.py: 再現入力と一変更比較。toolsは開発・素材作成用です。
本作品の自作コードと幾何図形はMIT (LICENSE.txt)。PyxelのMIT全文はassets/PYXEL-LICENSE.txt。
Noto Sans CJK由来の最小ビットマップ文字はSIL OFL 1.1。全文assets/NOTO-LICENSE.txt。
フォント作成と動画変換の開発作業にはPillow/ffmpegを使用。ゲーム実行には不要です。
音声は意図的に使用していません。音の実聴確認はしていません。
実装と機能の検証は、人が面白いと感じたという確認の代わりではありません。
