# 小さな進化島：5段階の教材

Python 3.11以上 / Pyxel 2.9.9。検査環境はLinux、Python 3.12.14、Pyxel 2.9.9。
初日から六日間を生き残る資源計画ゲームです。現実の生物の進化を再現しません。
元作品Aの通常規則を04/05で再現し、01〜03は明示した練習規則です。各ファイルは単独で起動できます。
詳しい説明・期待値・改造課題はLESSON.mdを読みます。

## 準備と起動

ZIPを展開し、README.mdのあるフォルダでターミナルを開きます。
Windowsでは次の順で実行します。ターミナルはPowerShellを想定し、activateは不要です。

    py -3 -m venv .venv
    .venv\Scripts\python -m pip install -r requirements.txt
    .venv\Scripts\python 01_energy.py
    .venv\Scripts\python 05_undo.py

macOS / Linuxでは次の順です。

    python3 -m venv .venv
    .venv/bin/python -m pip install -r requirements.txt
    .venv/bin/python 01_energy.py
    .venv/bin/python 05_undo.py

Pythonのバージョンが3.11未満なら対応版を使います。上記Windows/macOSコマンドは案内であり、そのOSのGUI実測ではありません。
実行中はウインドウをクリックしてキー入力の対象にします。音声は実装していません。

## 操作

- 上 / 下：池POND / 木TREE
- 左 / 右：02以降で形質の枠
- 0 / 1 / 2 / 3：空EMPTY / 鰭FIN / 毛皮FUR / 鉤爪CLAW
- Space：一日の採集を確定
- X：05のUndo
- R：全初期化
- Esc：終了

一キーを押して離してから次へ。通常の複数キー入力を拒否し、すべて離すまで待ちます。
Rだけは新しく押したときに優先して初期化します。これは原作のメニュー入力とは異なる教材用操作です。
画面のDAY 0は初日の行動前。CHANGE ALREADY PAIDは、すでに支払った変更費で、もう一度引く費用ではありません。
SURVIVED / NO EGGも生存成功です。蓄え5以上のEGGは追加達成で、勝利の必要条件ではありません。

## ファイルと段階

- 01_energy.py：予告と確定、上限と失敗。形質なしではこの天候に生存できない練習
- 02_benefits.py：二枠の効果、維持費と変更費なしの練習
- 03_upkeep.py：維持費を追加。変更はまだ無料
- 04_changes.py：原作Aの一朝一回・変更費・日ごとの収支
- 05_undo.py：有効な形質変更・採集を一手ずつUndo
- lessons.json / lesson_meta.json / LESSON.md：解説、改造課題、原作との差
- diffs/：隣り合う段階の差分
- test_stages.py：ゲームモデル・入力・表示・参考fixture検査
- qa/reference_fixture.json：原作Aから採取した比較資料。教材の依存ではなく検査用
- qa/generate_reference.py：別途原作を持つ場合の比較資料の再生成

原作のB/C、維持費なし切替、日本語字形、記録ファイルと厳密な再生は教材では省略しました。
場所と枠カーソルは見た目の選択でUndo対象外です。ゲーム状態全体と日記録は戻します。

## よくある問題

- No module named pyxel：起動と同じ.venvのPythonでrequirements.txtをインストール
- python / pyが見つからない：Python 3.11以上を導入し、ターミナルを開き直す
- ファイルがない：ZIPの中から直接起動せず展開。README.mdのあるフォルダへ移動
- 次のキーが反応しない：すべての操作キーを離し、ウインドウへフォーカス
- 変更できない：同じ形質・重複・今朝の変更済み・支払い後0以下を確認
- 変更したのに日が進まない：変更は朝の準備。Spaceで採集を確定
- 黒画面や表示初期化エラー：通常のデスクトップで起動。ヘッドレス検査の成功は全OSの画面保証ではない
- 昨日の状態へ戻らない：Xは一日ではなく直前の一操作を戻す。無料変更も一操作

## 検査と限界

標準ライブラリだけでモデル検査できます。

    python test_stages.py

別途元作品を持つ場合だけ環境変数PYXEL060_ORIGINALへそのフォルダを指定すると、原作model.pyとの再照合を追加します。
未指定ならその1検査だけ明示的にskipし、同梱fixtureとの照合は実行します。
比較資料は原作Aの通常規則から、(日・蓄え・形質・朝の変更済み・結果)で重複を省いた代表1358状態と13580遷移。
全経路のtick・日記録が有限という意味ではありません。04/05で状態全体と予告を照合します。
Undoは別に24本×60操作の原作比較資料を使います。
実Pyxelの初期画面・進行画面・別ディレクトリ起動と検査結果はqa/に保存します。
ブラウザー実プレイ、Windows/macOSのGUI、人による遊びやすさ、実際の音声は未確認です。
本教材はデスクトップ実行版で、Web公開用HTMLは含みません。

## 権利

LICENSEは原作のMIT通知をそのまま保持。コードと本教材の独自説明はこの通知に従います。
原作通知が参照するassets/NOTO-LICENSE.txtも同梱しています。
本教材の描画はPyxel標準ASCIIと図形のみで、Noto由来の字形データは使っていません。
元作品の字形はMITへ変更せず、別途SIL Open Font Licenseを保持します。
