032 盾のない騎士 / Pyxel 2.9.9
実装・機能検証済み。人による面白さの確認は未実施。

盾のない配達騎士が3つの中庭を抜けます。敵を全て倒せば成功。
赤い槍は直線、橙の斧は円。予兆の範囲を読み、白い輪の「隙」に斬り返します。
敵の攻撃は別の敵にも当たります。巻き込みは必須ではなく、剣だけでも倒せます。

起動
Windows: Python 3を入れ、setup.bat、以後play.bat。
Linux/macOS: bash setup.sh、bash play.sh。Windows/macOSの実GUIは未検証。
本フォルダだけで動作し、他のゲームは不要。launch.shだけは開発用pilot環境を予備利用します。

操作
左右で中庭選択、SPACE開始。矢印は押している間移動、斜めは同じ速さ。
Z押下で向いた方向へ剣。X押下で入力方向へ回避（無入力なら向きへ）。
Z/Xは押しっぱなしで繰り返しません。回避は高速移動で、無敵はありません。
P停止・説明、R同じ中庭を再開、M選択、成功後N次の中庭、ESC終了。
画面遷移は全キーを離すまで入力を遮断。停止中のキー解除も時間を進めず同期します。

数値と相手の知識
30Hz固定刻み、位置は0.1px単位。通常移動1.5px/tick、回避2.8pxで12tick、次の回避までさらに18tick。
剣は予備6、有効6、戻り12tick。前方18px・半幅10px、敵に1ダメージ。戻り中も移動可。
槍：長さ52px・幅14px、予兆36、有効6、回復42tick。
斧：半径29px、予兆42、有効6、回復42tick。敵同士は2ダメージ、騎士へ1。各体力3。
人物の当たり判定は半径5px。槍／剣の角は矩形対円の距離で判定します。
被弾後30tickは連続被弾防止。回避の無敵とは別です。接触だけのダメージはありません。
敵は70px以内で柱越しでない人物の、そのtick開始位置だけを観測します。接近速度0.6px/tick。
見失うと最後に見た位置へ向かい12tick待って持場へ。柱は既知の地図として回り込みます。
予兆開始後は狙いを固定し、新しい人物位置を観測しません。剣が当たっても予兆はひるみません。
同じ攻撃IDは同じ相手へ1回。発生済みの余波は敵が倒れても残り6tick以内継続。
全攻撃のダメージを同時適用。相打ちで体力0なら敗北です。
予兆と有効範囲の描画は同じ領域関数と柱の遮蔽を使い、最後の有効tickも描きます。

比較・再現
python -m unittest discover -v / python plans.py / python experiment.py
replays.jsonは3状況の成功入力。入力の各行を1tickずつmodel.stepへ渡します。
python app.py --demo --headless：B/C成功の実Pyxel自動描画。
python app.py --no-friendly：敵→他敵ダメージだけ0の比較用反実仮想。過去の旧版ではありません。
同じB入力でも両版は同じ278tickで成功。ただし通常版は体力3・剣4hit、比較版は体力2・剣6hit。
別々に判断し直す検査用方策では通常278tick、同士討ち0では371tick。人の上達速度や最適解の比較ではありません。

メディアと権利
media/shieldless_knight_automatic_silent.mp4は実Pyxel・自動入力・無音。
タイミングと元画像枚数はmedia/timing_validation.json、検証範囲はQA.txt。
ソース・図形はMIT、日本語ビットマップはNoto由来SIL OFL（assets/NOTO-LICENSE.txt）。
