026 音のないピアノ — 5段階で作る独立教材

必要なもの
Python 3.11以降 / Pyxel 2.9.9。各.pyは単独で動き、原作フォルダを必要としません。
画面は標準ASCII文字と図形、説明・コードコメントは日本語です。音は鳴りません。
このREADME.txtがある教材フォルダを、以下の全コマンドの作業ルートとします。
教材ZIPを展開したら、このREADME.txtとrequirements.txtがある場所へ移動してください。
コマンド内のパスは全てこの展開ルートからの相対パスです。

Windows PowerShell（Python 3.11を使う例）
py -3.11 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe -B 01_bits.py
.\.venv\Scripts\python.exe -B 02_observe.py
.\.venv\Scripts\python.exe -B 03_candidates.py
.\.venv\Scripts\python.exe -B 04_undo.py
.\.venv\Scripts\python.exe -B 05_goal.py
.\.venv\Scripts\python.exe -B test_stages.py

macOS / Linux（python3が3.11以降であることを確認）
python3 --version
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -B 01_bits.py
.venv/bin/python -B 02_observe.py
.venv/bin/python -B 03_candidates.py
.venv/bin/python -B 04_undo.py
.venv/bin/python -B 05_goal.py
.venv/bin/python -B test_stages.py

pipの初回導入には通信が必要です。requirements.txtはpyxel==2.9.9で固定です。
追加の画像、フォント、音、Pillowはゲーム実行にも標準テストにも不要です。
仮想環境のactivateは不要です。Python 3.12などを使う場合は環境作成時のPython指定だけを変えます。

段階と操作
01_bits.py: 0/1・3bit・XOR。左右でA/B/C選択、Spaceで押す、Rで新しい練習。
02_observe.py: 前後の観測を蓄積。Rは記録も全初期化。
03_candidates.py: 4配線図から観測に合う候補を残す。Rは記録も全初期化。
04_undo.py: Zは物理undo、Rは灯りを000。観測・候補・累積押下は残る。Nで全初期化。
05_goal.py: 同じ操作で目標101を作る。成功で実物図を開封。Z/R後も開封情報は残る。
全段階ESCで終了。1〜4は練習で成功による入力停止はありません。
段階5の解答: 初期状態でSpace → 右 → Space（鍵A→B）。候補2枚のまま成功します。
段階5のRは再抽選でも全初期化でもなく、同じ実物配線で灯りだけ戻します。
観測は画面に最新3行だけ表示。内部journalは累積全件で、PRESSESはその長さです。
画面では100が左の灯り。配線の1は「点灯」ではなく「押したとき反転」です。

実Pyxelによる12フレーム検査とPNG
.venv/bin/python -B 05_goal.py --headless-smoke --screenshot qa/05_initial.png
.venv/bin/python -B 05_goal.py --headless-smoke --demo --screenshot qa/05_clear.png
Windowsでは先頭を.\.venv\Scripts\python.exeへ置き換えてください。
各段階で同じオプションが使えます。--headless-smokeは12回更新・描画後に終了します。
--screenshot PATHは12回目の描画をPNGへ保存します（PATHは.pngで指定）。
--screenshotだけなら保存後も対話実行が続きます。--demoは決められた自動操作です。
音声デバイスのないLinux検査環境ではSDL_AUDIODRIVER=dummyを先頭に付けられます。
PNG生成と実Pyxel描画の検査は、人による試遊・実キー入力・音声確認とは別です。

テストの読み方
標準test_stages.pyは純粋ロジックと入力/表示境界スタブを検査します。
原作との比較3件は、PYXEL026_SOURCE_MODELに手元の原作model.pyのパスを設定した場合だけ実行します。
設定しなければ明示的にskipします。原作のファイルをこの教材へ同梱したことにはしません。
Linux/macOS例: PYXEL026_SOURCE_MODEL="/path/to/original/model.py" .venv/bin/python -B test_stages.py
PowerShell例: $env:PYXEL026_SOURCE_MODEL="C:\path\to\original\model.py"
その後 .\.venv\Scripts\python.exe -B test_stages.py
配布前の原作比較結果と実描画PNGはqa/にあります。検査範囲と未実施項目はqa/QA.txt参照。

教材の範囲
最終版は原作C面の4配線図・3鍵・実物図3・目標101だけを採用。
原作A/B、面選択、P停止、上下スクロール、ピアノ絵、日本語UI、F12/動画書出しは省略。
Nは原作の「次の面」と異なり、この教材では同じ実験を知識も含めて最初へ戻します。
核の規則は観測だけで候補を絞ること、目標一致で成功すること、知識がundoで消えないことです。
LESSON.mdとlessons.jsonに各段階の手順・予想・つまずき・練習があります。

権利
原作はCopyright (c) 2026 Pyxel 100 contributors / MIT。
全5ファイルの先頭に原作MIT通知の全文をコメントとして保存しています。LICENSEも同梱。
原作のNoto由来glyphs.json等は同梱しません。Pyxelは外部依存で独自のMITライセンスです。
