Skip to content

feat(scratch-vm): 甲子園ブロックの固定値/状態実装(MockClient) #739

Description

@takaokouji

Epic: #738 / Phase P1

ゴール

甲子園拡張機能の各ブロックを編集機上でクリック/実行したときに、意味のある固定値を返し、引数のリストを実際に更新するようにする。実通信はまだ行わない(未接続モード)。Part 2(#C)の「未接続フォールバック」の土台になる。

方針: KoshienClient 抽象 + MockClient

packages/scratch-vm/src/extensions/koshien/index.js の現状の KoshienClient(スタブ)を、差し替え可能なインターフェースに整理し、固定値を返す MockClient を実装する。ブロックメソッドは client 経由で値を得る。

ブロック別 固定値仕様(案)

ブロック 現状 固定値/挙動(案)
connectGame (HAT) 動作OK 維持(connected フラグ)
getMapArea no-op no-op(エラーなし)
moveTo 空Promise no-op(エラーなし)
setItem(dynamite/bomb) no-op no-op
turnOver no-op no-op
setMessage 空Promise no-op(任意でログ)
map(POSITION) -1 0(空間)
mapFrom(POSITION, MAP) -1 MAP 文字列をパースして該当セル。不能なら 0
mapAll() undefined 全マス空間の15行CSV "000000000000000,…"(15行)
targetCoordinate player undefined position→"1:1", x→1, y→1
targetCoordinate goal undefined position→"13:13", x→13, y→13
targetCoordinate other_player undefined position→"7:7", x→7, y→7
targetCoordinate enemy undefined position→"7:7", x→7, y→7
position / positionOf / object 動作OK 維持
calcGoalRoute(RESULT) 空Promise RESULT リストに ["1:1", "13:13"](player→goal)を書き込む
calcRoute(SRC,DST,…,RESULT) 空Promise RESULT リストに [SRC, DST] を書き込む
locateObjects(…,RESULT) no-op RESULT リストに ["7:7"] を書き込む

固定値の具体値(goal=13:13 等)は実装時に調整可。map=0/座標=1:1 を基本とする。

リスト書き込みの実装

RESULT は list 名(field)。ステージのグローバルリスト変数を取得して中身を置換:

const stage = this.runtime.getTargetForStage();
const list = stage.lookupVariableByNameAndType(name, 'list');
if (list) list.value = [...coords];

RESULT が空 ' '(未指定)のときは no-op。

作業ステップ(TDD)

  1. [RED] packages/scratch-vm/test/unit/extension_koshien.js(tap)に各ブロックの戻り値/リスト書き込みのテストを追加し失敗を確認
  2. [GREEN] KoshienClient 抽象 + MockClient を実装、ブロックメソッドを接続
  3. [PASS] lint + 当該テスト(cd packages/scratch-vm && npm exec tap test/unit/extension_koshien.js
  4. [COMMIT & PUSH] feat(scratch-vm): return meaningful fixed values from koshien blocks
  5. [PR] → develop

Definition of Done

  • 全ブロックが意味のある固定値を返す(-1/undefined/空Promise を解消)
  • calcRoute/calcGoalRoute/locateObjects が指定リストへ実際に書き込む
  • ユニットテスト pass(tap)
  • lint pass
  • CI green
  • ブラウザ確認(Playwright MCP, ?no_beforeunload=1&tab=ruby): 甲子園ブロックをクリックすると固定値が表示され、calc系実行後にリストモニタへ座標が反映される

備考

  • 別途検討した Ruby V2 対応calc_route 等の list("$名前") → V2 配列変数 $名前 構文)は scratch-gui 側の generator/converter 修正で、本 issue(vm 側)とは独立。必要なら別 PR で並行。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    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