# 潮待ちポスト：学習用5段階

ZIPを展開し、このREADME.txtと01_grid.pyが見えるフォルダーをターミナルで開いてください。以下はすべて、そのZIPルートから実行するコマンドです。

必要：Python 3.11以降、Pyxel 2.9.9。通常プレイにはGUIとOpenGL対応環境が必要です。Python標準ライブラリとPyxelだけを使い、画像・音・フォントの追加ダウンロードは不要です。

## 1. 最初の準備

macOS / Linux：python3 --versionの結果が3.11以上か確認します。

```sh
python3 --version
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
```

Windows PowerShell / コマンドプロンプト：py -3 --versionの結果が3.11以上か確認します。

```powershell
py -3 --version
py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
```

初回のpipインストールにはインターネットが必要です。学校・共有PCでは管理者の利用ルールに従ってください。Pythonや環境作成でエラーが出たら、表示されたエラー文とPythonのバージョンを確認してください。

## 2. 順番に起動

1本ずつ起動し、Escで終了してから次を実行します。5本はそれぞれ単独で動き、前のファイルを読み込みません。

macOS / Linux：

```sh
.venv/bin/python 01_grid.py
.venv/bin/python 02_tide.py
.venv/bin/python 03_delivery.py
.venv/bin/python 04_return.py
.venv/bin/python 05_undo.py
```

Windows：

```powershell
.venv\Scripts\python.exe 01_grid.py
.venv\Scripts\python.exe 02_tide.py
.venv\Scripts\python.exe 03_delivery.py
.venv\Scripts\python.exe 04_return.py
.venv\Scripts\python.exe 05_undo.py
```

操作：矢印で1マス移動、Rで再出発、Escで終了。02以降はSPACEで島の上から潮を切り替えます。05はZまたはBACKSPACEで1手戻せます。キーを押しっぱなしにしても連続移動しません。
SPACEは「待つ」ではありません。有効な移動と潮切替は1手、通れない入力は0手です。時間制限・手数上限・ゲームオーバーはありません。

01：島と橋を歩く練習。すべての橋を通れます。
02：島上のSPACEで青a / 橙bを切替。細橋~はまだ自由に通れます。
03：A/Bへ配達。重いBが未配達の間は細橋~を通れません。まだゴール判定はありません。
04：A/Bを届け、出発の島Sへ戻るとCLEAR。ここから最後まで遊べます。
05：位置・潮・配達済み・手数をまとめて戻すundoを追加した完成した簡略版。

赤い丸が配達人です。S/I/A/Bは島、.は海、-/|は固定橋、a/bは潮の橋、~は細橋です。橋も1文字につき1マスあります。A/Bの+は配達済み、細橋の赤い×は重荷で通れない印です。

## 3. 読む → 動かす → 小さく変える

LESSON.mdに各段階の考え方、実際の短いコード、操作と予想結果、よくある間違い、改造課題があります。lessons.jsonは同じ内容の構造化データです。
説明中のpython ファイル名.pyは仮想環境を有効化している場合の短縮表記です。迷ったら上記の.venvから始まる完全コマンドを使ってください。

- フォルダーをpyxel、ファイルをpyxel.pyと名付けないでください。パッケージの読み込みを邪魔します。
- 変更前にコピーを取って、1回に1箇所だけ変えます。
- 段階どうしの差分はdiffs/にあります。画面や補助コードを暗記する必要はありません。
- 画面はPyxel標準の英字、解説は日本語です。
- 04/05のクリア手順はLESSON.mdの末尾にあります。

## 4. テスト

Pyxelのウィンドウを開かない純粋ロジック・構文・教材コード片の検査と、小さな入力スタブの検査です。

macOS / Linux：

```sh
.venv/bin/python -m unittest -v test_stages.py
```

Windows：

```powershell
.venv\Scripts\python.exe -m unittest -v test_stages.py
```

作成時はLinux / Python 3.12.14で36テストが合格しました（31件はルール・履歴・ファイル検査、5件は入力スタブ）。B配達前後の細橋、潮、無効入力、21手クリア、クリア後の停止、undo、Rによる履歴初期化などを検査します。テスト成功は実際のキー操作や学習効果の保証ではありません。

実際のPyxelで初期画面を12フレーム描き、PNGを保存して終了する補助モード：

macOS / Linux：

```sh
.venv/bin/python 05_undo.py --headless-smoke --screenshot smoke.png
```

Windows：

```powershell
.venv\Scripts\python.exe 05_undo.py --headless-smoke --screenshot smoke.png
```

01〜04にも同じオプションがあります。--screenshot PATHは--headless-smokeと一緒に使います。保存先の親フォルダーは先に用意してください。保存したファイルは上書きされます。
作成時はPyxel 2.9.9で5本とも12フレーム描画とPNG保存を確認しました。headlessでもOpenGL等の環境によって失敗する場合があります。音声デバイス初期化の警告は出ましたが、この教材は音を実装していません。
Windows/macOSの実機、人間によるネイティブウィンドウの操作、音の確認は未実施です。検証の範囲と記録はQA_RESULTS.txtとqa/にあります。

## 原作との違い

原作2枚目「ふたつの潮」の基本便A+Bに限定しました。Cの位置は通常の島Iに置き換えています。原作の全3地図、任意のC配達、地図・依頼選択、最短解表示、自己ベスト、効果音、アニメーション、日本語bitmap、WASD入力は省略しています。
最終05の移動・潮切替・配達・帰還の状態遷移は原作の基本便と同じです。作成時に原作model.pyと1,152ケースを比較して一致しました。01〜03は明記した規則を段階的に省いた練習版です。教材は原作全体の再実装ではありません。
原作へ進むときはmodel.pyのBoard / BOARDS / CONTRACTS、step、solve、app.pyのApp.act / undoを読んでください。原作ZIPを起動する場合は、そのZIPのREADME.txtに従います。

## ライセンス

LICENSEと各Pythonファイル先頭のMIT表記を保持してください。
元コード・図形：Copyright (c) 2026 Tidepost contributors。教材の変更・追加コードもMITです。
教材は原作のNoto由来の字形を使いません。元のLICENSEには原作glyphs.jsonに対するSIL OFLの例外をそのまま残し、この教材に字形が含まれない旨を追記しました。原作を別配布する場合はそのassets/NOTO-LICENSE.txtも保持してください。Pyxelは外部依存として自身のMITライセンスに従います。
