Skip to content

feat(koshien-web): game server smalruby3 を新旧両対応に (koshien.xxx + when_connect_game + $配列 / 旧 Sprite.new do…end 維持) #763

Description

@smalruby3-editor-bot

概要

ゲームサーバー (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 スタイル

  1. 新 (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
  2. scratch-gui v1: Sprite.new("…") do koshien.connect_game(name:); …; end
    Sprite.new(...) do … end 形式の実行維持が最難関。これも必ず保つ
  3. 既存 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 検証)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions