016 やわらかいゴール / 検証記録
2026-10-02 UTC / Python3.12 / Pyxel2.9.9 / cloud Linux
状態: 実装・モデル試験・実Pyxel描画・GUIキー操作確認済み。人による面白さ確認待ち。

1. 自動テスト
35件成功。test_results.txtに最終実行結果。
・円/矩形掃引、丸角の過大判定を避ける、零長線分、速い球の薄壁通過防止。
・上下反射の速さ保存、接触から0.01px離す。
・動く支柱の相対座標、全身通過で得点、支柱の接線接触は得点より優先。
・0.15秒（18小刻み）の実履歴、現在球ではなく古い球を見る、帯の外では反応しない。
・±2pxの不感帯、レール端clampと速度0、反応帯を出た後30小刻みの方向維持。
・発射位置決定の保持を溜めへ流用しない。最弱の押し離し、最大0.7秒、上限自動発射なし。
・停止で物理・AI・履歴停止。停止/復帰時に溜め解除、復帰とSPACE同時でも誤発射なし。
・R・Z・次面・終端固定、Nの次フレームSPACE保持、失敗の再照準SPACE保持。
・上下微調整/左右照準速度と角度clamp。無入力は安全かつ未達。
・全3面4種の成功入力ログを再生して状態hash一致。
・Appのタイトル保持と面選択、全画面状態描画、145字形の欠落検査。

2. モデルと設計の監査
22,761球: 3状況×3発射位置×角度-70〜+70（0.5刻み）×力20〜100（10刻み）。
結果experiment_results.json、図media/success_regions.png。図は解析図であり実ゲーム画面ではない。
例: A中央/力100の直球帯-1〜+2度。B下/力60の主帯-43.5〜-32.5度。
C下/力20で26〜30.5度。C上/力100で30.5〜35度。
C下/+28度の2刻み力標本は20〜36で得点、38〜100で失敗。
最小/最大・中央直球・固定の上下壁などの簡単な方策を比較。
安全に待ち続ける人への罰は付けていない。
A/Bは同じ最大出力の上壁返しで得点できる例外あり。全3面で同じ固定球が勝つ標本はない。
EXPERIMENT.txtでブリーフとの差、原案からの調整、静止ゴールとの一変更比較を分離。

3. GUI実操作（人の試遊ではなくエージェントによるキー操作）
親から許可された専用枠を使用。cloud LinuxのApplication Finderからbash launch.shを起動。
cua.computer.press_keyを使用し、通常150ms、長押し1000〜1200msで操作。
確認したもの:
・日本語タイトル、左右の面選択、1.2秒SPACE保持で開始しても場所選択のまま（溜めない）。
・場所決定SPACEを1秒保持しても力20で待機。
・A中央0度、1.1秒溜めて離す。飛行中P停止→SPACE入力でも球/ゴール位置不変→P再開→得点。
・成功後SPACE保持で成功状態が変わらない。N→SPACEの操作で次の面へ移り、誤発射しない。
・B中央の直球は衝立で停止、失敗理由が画面に表示。SPACE保持で再照準、発射されない。
・Zで場所選択へ、Rで同じ面の中央・0度・試射0へ。
・B下から-36度、最大溜めで壁返し成功。native_B_success.png。
・C下から+28度、SPACE100msの弱い球で成功。native_C_success.png。
・F12のPNG保存、ESC終了。ウィンドウ一覧から消失を確認し枠を解放。
発見と修正:
・失敗から再照準へ戻った際、非充電なのに前の力100がゲージに残っていた。
  model.pyの再照準時に力20へ戻す処理と回帰試験を追加。
  再起動した最終版で、B失敗→SPACE1秒保持→力20/試射1/未発射を再確認。
  native_retry_fixed.pngが修正後。最初のA/B/Cの成功画像はこの表示修正前で物理は同じ。
  修正後の最終版で4成功ログと全35件を再試験。

4. 動画・画像
media/fleeing_goal_automatic_silent.mp4: 実Pyxel描画の自動操作、無音。人のプレイ録画ではない。
30Hzの各元GIFフレームをPNGに抽出し、各1回だけMP4へ格納。GIFの30ms遅延は使用しない。
元GIF839フレーム = MP4 839フレーム。ffprobeで27.966667秒、30fps、音声トラックなし。
MP4_VERIFICATION.jsonへ検証結果。GIF自体は量子化された遅延を持つため、正しい再生時間はMP4を見る。
動画: A弱球失敗→速球成功、B直球失敗→壁返し成功、C同角度の速球失敗→弱球成功。
runtime_150/260/430/610/820.png: 実Pyxel自動描画。native_*.png: GUI手動キー操作中の実Pyxel保存。
experiment_before/after.png: 同じB入力で、ゴール移動だけ切替えた実Pyxel比較。

5. 配布と文字コード
実行時はPyxelとPython標準ライブラリだけ。字形を同梱し日本語フォントをOSへ要求しない。
全テキストI/OにUTF-8指定。cp932を既定にしたio.open模擬環境で全35試験とタイトル描画を実行。
日本語+空白を含む一時フォルダへコピーし、任意cwd=/tmpからも実行。ASCII BATの引用符/失敗時pauseを点検。
これはWindows実機の起動・SDL表示・音声検証ではない。

6. 未確認と制約
人の感想、初見の理解、再挑戦したくなるかは未確認。他の作品の好評を転記しない。
Windows/macOSネイティブGUIは未確認。cloudの音声デバイス初期化は失敗しており、実聴確認なし。
本作は音源を実装しない無音設計。全ルールと終端は表示だけで判断できるようにした。
角度走査は離散標本。全実数入力に対する数学的証明ではない。
比較で選択肢が変わる根拠はあるが、楽しさの因果を確定していない。
公開・SNSへの投稿はしていない。
