060 小さな進化島

主な迷い: 今の採食に特化するか、次の天候で払う維持費を減らすか。
鰭・毛皮・鉤爪を二枠まで選び、公開された六日間の季節を生き抜く小さな計画ゲームです。生物学の現実の進化を再現するシミュレータではありません。

起動
Windows: Python 3を入れ、setup.batを一度実行。以後play.bat。
macOS/Linux: bash setup.sh、bash play.sh。
日本語・空白パスを想定した引用符付きASCIIバッチです。Windowsネイティブ起動は未確認。Linuxクラウドで実操作と描画を確認しました。
実行時依存はPyxel 2.9.9とPython標準ライブラリ。assets/glyphs.jsonを含めて置いてください。開発用フォント生成・映像変換にはPillowとffmpegを使いますが、プレイには不要です。

操作
上下: 池/木を選ぶ。左右: 形質の枠を選ぶ。
Z: 形質一覧を開く。上下で選んでZ決定。Xで一覧を閉じる。
Space: 選んだ場で採食し、一日を確定。
X: 朝の形質変更または日送りを一判断戻す。拒否された変更はundo履歴を増やしません。
R: 同じ予報を最初から。P: 説明/停止。1/2/3: 検証済みA/B/Cへ。
S: 現在seed・確定盤面・全入力・結果をrecordsへ保存。予報の切替前にも保存できます。
M: 表紙。B: 形質維持費だけ0の一規則比較へ切り替え、最初から。ESC: 終了。
結果画面からもX/Rを使えます。開始・日送り・形質確定・再開後は一度キーをすべて離してください。

六日間の計算
初期蓄え6、上限18。毎日池か木で一回採食します。次の数字は湿/乾/寒の順です。
池の基礎収穫: 2/0/0。木: 3/2/1。基礎消費: 2/3/4。
鰭: 池の収穫に3/1/0を加算。維持費0/1/1。
毛皮: 寒い日の基礎消費を2軽減。維持費1/2/0。
鉤爪: 木の収穫にいつも2を加算。維持費1/1/1。
使っていない形質にも維持費が必要。同じ形質の重複は不可。空枠に維持費はありません。
初日は自由に無料で構成できます。二日目以降は朝に一枠だけ追加/交換/除去でき、どれも蓄え2をその時点で支払います。変更後0以下になる変更は拒否します。変更しない日は無料。
その後、採食後の蓄え=min(18,現在の蓄え+収穫-基礎消費-形質維持)を一括計算。収穫前に死なせません。右の明細の「朝の変更費」は支払済みで、二重には差し引きません。
一日の結果が0以下なら維持不能。六日後1以上で生存成功、5以上なら次世代の卵も残ります。卵なしの生存は失敗ではありません。

有限bankと再現
A-01-v1: 湿湿湿寒寒寒。B-01-v1: 寒寒乾乾湿湿。C-01-v1: 乾湿寒乾湿寒。
この三つだけを公開します。任意整数seedや無限生成ではありません。設計候補の数値を変更せず、全族の生存・卵・別構成を有限DPで確認しました。ゲーム実行中の探索はありません。
model.pyはPyxelに依存しないLevel/State/step。描画、停止、形質一覧の閲覧はモデルの時間や蓄えに影響しません。
保存JSONは確定予報、基礎収穫/消費、形質の費用、生成器/規則版、正規化UTF-8 JSON SHA-256、意味入力と論理tick、結果hash、環境版を含みます。
python tools/replay_record.py 記録.json で別プロセス再生できます。Pythonパッチ版・Pyxel版・model環境の文字列も厳密一致を要求し、不一致は理由を付けて拒否します。

計算で確かめた違い
最高の終了蓄えはA10、B8、C6。Aは鰭から毛皮へ替える案と、鉤爪から毛皮を足す案が同じ10。Bは毛皮+鉤爪で寒期を越え、乾期の前に毛皮を外すと8。Cは鉤爪だけを保って6です。
毛皮+鉤爪の固定構成でも全族を生存でき、A9/B4/C4。安全な固定案と追加目標は分けています。
単純方策の比較はpolicy_results.json。無形質・鰭固定・毛皮鉤爪固定・当日優先・二日優先を明示した手順で実行しました。当日優先はB4、二日優先はB8です。これは特定の有限bank上の到達結果で、楽しさの保証ではありません。
B一変更比較: 維持費だけ通常表/すべて0。両方で生存可。通常版の最高8は毛皮を外し、維持0版の最高16は毛皮+鉤爪を残します。他の条件は同じです。

同梱物
app.py/model.py: 本体。test_model.py/test_ui.py: 境界、undo、拒否、再生、キー解放、描画純粋性の試験。
experiments.pyとsolver_results/policy_results/comparison_results/solution_logs.json: 開発時の有限探索と完全な意味入力列。
media/trait_island_automatic_silent.mp4: 実Pyxelを自動操作した機能確認映像。749原frameを一度ずつ30fpsに配置、24.966667秒、音声trackなし。元GIF・PNG・入力記録も同梱。人の試遊ではありません。
media/native_*: クラウドLinuxでのエージェント実操作。media/NATIVE_OBSERVATIONS.txtが観察内容です。自動試験はwriterをstub化し、mediaのhash不変も検査します。
NOTE.txt、X_POSTS.txt: 日本語の投稿用下書き。未公開。
LICENSE.txt: 自作部分MIT。Noto Sans CJK派生のglyphはassets/NOTO-LICENSE.txtにSIL OFL 1.1全文を同梱。
技術・機能確認と人の面白さの確認は別です。この作品は人の試遊未実施、実音未確認です。
