概要
ゲームサーバー (tmp/smalruby-koshien-web, 別リポジトリ NaCl-Ltd/smalruby-koshien-web) の
プレイヤー AI ライブラリ player_ai/lib/smalruby3.rb とその関連を改修し、scratch-gui が
生成する Ruby コードをそのまま実行できるようにする。新旧両対応とし、既存 AI も
壊さない。
成果物: tmp/smalruby-koshien-web 内に差分が分かるローカルブランチを作成して直接適用
(NaCl-Ltd への PR はこの Issue では作らない。upstream 連携は別途)。
対応すべき AI スタイル
- 新 (scratch-gui v2):
koshien. レシーバー + イベント hat + $配列 リスト引数
class Player1 < Smalruby3::Sprite
koshien.when_connect_game(name: "player1") do
loop do
koshien.get_map_area(koshien.player)
koshien.calc_route(result: $最短経路) # リスト引数は $配列
koshien.move_to($最短経路[1]) # 0-based: [0]=現在地, [1]=次の手
koshien.turn_over
end
end
end
- scratch-gui v1:
Sprite.new("…") do koshien.connect_game(name:); …; end
(Sprite.new(...) do … end 形式の実行維持が最難関。これも必ず保つ)
- 既存 default_ai / 競技 AI:
include AI + Character.new + on(:start) +
レシーバー無し connect_game 等
やること
player_ai/lib/smalruby3.rb / smalruby3/koshien.rb / smalruby3/sprite.rb /
smalruby3/stage.rb 等を、koshien レシーバーオブジェクト + when_connect_game hat +
$配列(グローバル配列)リスト引数 + 0-based route index に対応させる。
- 既存のレシーバー無し API・
Character.new/on(:start)・Sprite.new(...) do … end
ブロック形式を維持。
- 既存の AILib 委譲(
ai_lib.rb)との整合を保つ。
受け入れ条件
実装状況(2026-06-29)
コア実装完了。詳細は下のコメント参照。要点:
関連
Epic #738 / #827(エディタ側: スプライト+ステージ出力 + v2 ステージ初期化バグ)/ #764(ローカル実行・wasm 検証)
概要
ゲームサーバー (
tmp/smalruby-koshien-web, 別リポジトリ NaCl-Ltd/smalruby-koshien-web) のプレイヤー AI ライブラリ
player_ai/lib/smalruby3.rbとその関連を改修し、scratch-gui が生成する Ruby コードをそのまま実行できるようにする。新旧両対応とし、既存 AI も
壊さない。
対応すべき AI スタイル
koshien.レシーバー + イベント hat +$配列リスト引数Sprite.new("…") do koshien.connect_game(name:); …; end(
Sprite.new(...) do … end形式の実行維持が最難関。これも必ず保つ)include AI+Character.new+on(:start)+レシーバー無し
connect_game等やること
player_ai/lib/smalruby3.rb/smalruby3/koshien.rb/smalruby3/sprite.rb/smalruby3/stage.rb等を、koshienレシーバーオブジェクト +when_connect_gamehat +$配列(グローバル配列)リスト引数 + 0-based route index に対応させる。Character.new/on(:start)・Sprite.new(...) do … endブロック形式を維持。
ai_lib.rb)との整合を保つ。受け入れ条件
feature/koshien-gui-generated-ai/ commit4039a9b、PR 作成済み)Sprite.new(...) do … end)が実行できる(実装済み・ブラウザ実機で確認済み (chore(koshien-web): tmp/smalruby-koshien-web をdevpodでローカル実行可能化し新旧APIを動作確認 (rbwasm) #764))実装状況(2026-06-29)
コア実装完了。詳細は下のコメント参照。要点:
topic/koshien-epic-738で確認し準拠(v2:class < Sprite+koshien.when_connect_game do…end+loop.with_screen_refresh+ ステージdef initializeのグローバル初期化/v1:Sprite.new do…endフラット + 素のloop)。Smalruby3.start(worker が eval 後に呼ぶ)で登録クラスをインスタンス化→when_connect_game本体をinstance_exec。when_connect_gameは即時実行せず登録。Enumerator#with_screen_refreshは Fiber.yield しない(turn_over が yield を担う)。lists=は素配列・list()は vivify。関連
Epic #738 / #827(エディタ側: スプライト+ステージ出力 + v2 ステージ初期化バグ)/ #764(ローカル実行・wasm 検証)