概要
甲子園拡張機能の「AIを試す」(koshien-test-modal) で、現状はゲームサーバー
(https://smalruby-koshien-web.netlab.jp/) をクエリ無しで iframe 表示しているだけで、
編集中の AI が反映されない。編集中スプライトの生成 Ruby コードを iframe に
クエリパラメータで渡し、その AI で対戦を試せるようにする。
背景(確定仕様)
ゲームサーバー (WASM 版, tmp/smalruby-koshien-web) の GameViewer は URL パラメータ
?player1=… / ?player2=… を解釈する (game_viewer/index.html,
game_viewer/js/player-ai-client.js):
- 値は
decodeURIComponent 後、data:<標準base64(utf8)> なら AI ソースとして decode、
http(s)://… なら fetch。
- パラメータ無しなら
default_ai/ を使う(旧挙動は維持される)。
やること
koshien-test-modal.jsx を改修し、iframe の src を
https://smalruby-koshien-web.netlab.jp/?player1=data:<base64(utf8(code))> にする。
<code> = 現在編集中スプライト・現在の ruby_version (v1/v2) で生成した Ruby
(RubyGenerator の出力)。player2 はパラメータ無し(デフォルト AI)。
- base64 化は UTF-8 対応で行う(
btoa(String.fromCharCode(...new TextEncoder().encode(code))))。
URL 組み立ては URLSearchParams 等で安全にエンコード。
- 生成コードが取れない/空のときは従来どおりパラメータ無し(デフォルト AI)にフォールバック。
- 生成コードの取得経路(
ruby-downloader / ruby-tab 同様の RubyGenerator 呼び出し)を
モーダルに配線する。
受け入れ条件
関連
Epic #738 / 後続: game server 側 API 対応(別 Issue)、ローカル実行+検証(別 Issue)
概要
甲子園拡張機能の「AIを試す」(
koshien-test-modal) で、現状はゲームサーバー(
https://smalruby-koshien-web.netlab.jp/) をクエリ無しで iframe 表示しているだけで、編集中の AI が反映されない。編集中スプライトの生成 Ruby コードを iframe に
クエリパラメータで渡し、その AI で対戦を試せるようにする。
背景(確定仕様)
ゲームサーバー (WASM 版,
tmp/smalruby-koshien-web) の GameViewer は URL パラメータ?player1=…/?player2=…を解釈する (game_viewer/index.html,game_viewer/js/player-ai-client.js):decodeURIComponent後、data:<標準base64(utf8)>なら AI ソースとして decode、http(s)://…なら fetch。default_ai/を使う(旧挙動は維持される)。やること
koshien-test-modal.jsxを改修し、iframe のsrcをhttps://smalruby-koshien-web.netlab.jp/?player1=data:<base64(utf8(code))>にする。<code>= 現在編集中スプライト・現在のruby_version(v1/v2) で生成した Ruby(RubyGenerator の出力)。player2 はパラメータ無し(デフォルト AI)。
btoa(String.fromCharCode(...new TextEncoder().encode(code))))。URL 組み立ては
URLSearchParams等で安全にエンコード。ruby-downloader/ruby-tab同様の RubyGenerator 呼び出し)をモーダルに配線する。
受け入れ条件
player1としてiframe に渡る
関連
Epic #738 / 後続: game server 側 API 対応(別 Issue)、ローカル実行+検証(別 Issue)