Skip to content

カスタムブロック

スモウルビー甲子園用の専用ブロック(命令)について説明します。

ブロック
条件1ターンに1回しか呼べない。また同ターンにおいて、③④⑭の命令は1回までしか呼び出せない
コードkoshien.move_to("x:y")
実行内容
  • 指定した座標にプレイヤーが1セル移動します
  • 指定できるのは現在地から東西南北の1セルです。(斜めには移動できません)
引数移動先のX座標、Y座標を “x:y” 形式の文字列で指定します
解説
  • 移動できるのは空間と水たまりだけで、壁には移動できません。
  • 移動できない座標を指定した場合、使用回数はカウントされますが、実行は無視されます。
  • 水たまりに移動した場合は、次回の移動命令が無視されます。(使用回数はカウントされます。)
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.calc_route(result: list("$最短経路"), src: "0:0", dst: "0:0", except_cells: list("$通らない座標"))
実行内容
  • 指定した2点間の最短ルートを探します。
  • 座標("x:y"形式)のリストを通らない座標として指定すると、その座標を通らない経路を探します。
  • 始点から終点までの座標("x:y"形式)のリストを指定したリストに保存します。
引数
  • src: 始点の座標 "x:y" 形式を指定します。
  • dst: 終点の座標 "x:y" 形式を指定します。
  • except_cells: 経路を探すときに通ってほしくない座標("x:y"形式)のリストを指定します。
  • result: 探した最短経路の座標("x:y"形式)のリストを保存するリストを指定します。
解説
  • 最短経路の座標のリストは「始点,次の移動先,・・・経路順の座標・・・,終点」の順番に並んでいます。
  • 最短経路の座標のリストから取得するにはリスト内の位置を0,1,2,3・・・の番号で指定します。
  • 指定した条件での経路がない場合は始点の座標が1つだけのリストが保存されます。
  • get_map_area 命令でマップ情報を取得していない範囲のセル(未探索のセル)は全て移動可能とみなして経路探索するので注意が必要です。
  • ただし、判明している空間セルがあれば、そちらを通る経路を優先します。
引数の指定例
  • 例1: 始点、終点、通らない座標を指定して、ある座標(13, 9)からアイテムのある(7、7)への最短経路を探し、その経路で1セル移動する
    list("$通らない座標").clear
    list("$通らない座標").push("9:9")
    koshien.calc_route(result: list("$最短経路"), src: "13:9", dst: "7:7", except_cells: list("$通らない経路"))
    koshien.move_to(list("$最短経路")[1])
  • 例2: 通らない座標のみを指定して、ゴールまでの最短経路を探し、その経路で1セル移動する
    list("$通らない座標").clear
    list("$通らない座標").push("9:9")
    koshien.calc_route(result: list("$最短経路"), except_cells: list("$通らない経路"))
    koshien.move_to(list("$最短経路")[1])
  • 例3: ゴールまでの最短経路を探し、その経路で1セル移動する
    koshien.calc_route(result: list("$最短経路"))
    koshien.move_to(list("$最短経路")[1])

③5セル×5セルのマップ情報を取得

Section titled “③5セル×5セルのマップ情報を取得”
ブロック
条件同ターンにおいて、③④⑭の命令は2回までしか呼び出せない
コードkoshien.get_map_area("x:y")
実行内容指定した座標を中心とした5セル×5セルのマップ情報を取得します
引数マップ情報を取得したい範囲の中心座標のX座標、Y座標を “x:y” 形式の文字列で指定します
解説
  • 取得できるマップ情報は、指定した範囲の以下の情報です。
    ・地形(空間・壁・水たまり・ゴール・壊せる壁)
    ・加点アイテム、減点アイテムがある場合は、その座標と種類
    ・対戦相手が指定範囲内にいる場合はその座標
    ・妨害キャラクタの現ターン開始時点の座標と前ターン開始時点の座標 (妨害キャラクタのみは指定範囲内にいなくても情報取得が可能)
  • 取得した情報はAIライブラリに保存され、後から呼び出すことができます。
ブロック
条件同ターンにおいて、③④⑭の命令は2回までしか呼び出せない
コードkoshien.set_dynamite("x:y")
実行内容ダイナマイトを現在地又は隣接する東西南北のセルに設置します
引数
  • ダイナマイトを設置したい座標のX座標、Y座標を “x:y” 形式の文字列で指定します
  • 引数を省略した場合は現在地にダイナマイトを設置します。
解説
  • ダイナマイトは、空間または水たまりの上に置くことができます。アイテムがあるセルには設置できません。
  • ダイナマイトは1ラウンドに2回まで設置できます。
  • 無効な座標を指定した場合、設置されませんが、ダイナマイトは1つ消費され、使用回数もカウントされます。
  • 両プレイヤーが同じ座標に同時にダイナマイトを設置した場合、両プレイヤーとも設置は成功しますが、ダイナマイトは1つだけ設置されたことになります。
  • ダイナマイトは設置したターンの終了時に爆発します。
  • ダイナマイトが爆発すると、ダイナマイトのセルに隣接する「壊せる壁」は「空間」になり、次のターンから移動可能になります。
  • ダイナマイトの爆発は「壊せる壁」以外の地形、プレイヤー、妨害キャラクタ、アイテムに影響を与えません。
  • ダイナマイトが爆発したセルや隣接したセルにプレイヤーがいても減点されることはありません。

⑤指定した座標のマップ情報を呼び出す

Section titled “⑤指定した座標のマップ情報を呼び出す”
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.map("x:y")
実行内容
  • 指定した座標のマップ情報を呼び出します。
  • 指定した座標のマップ情報が返されます。
引数呼び出したい座標のX座標、Y座標を “x:y” 形式の文字列で指定します
解説
  • 呼び出せるマップ情報は「③マップ情報の取得」で取得した情報です。
  • マップ情報の取得を実行していない座標を指定した場合は、-1が返されます。
  • マップエリア外を指定した場合は、nilが返されます。

⑥マップ全体のマップ情報を呼び出す

Section titled “⑥マップ全体のマップ情報を呼び出す”
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.map_all
実行内容
  • マップ全体のマップ情報を呼び出します。
  • マップ全体のマップ情報が返されます。
引数
解説
  • 呼び出せるマップ情報は「③マップ情報の取得」で取得した情報です。
  • マップ情報の取得を実行していない座標は、-1が返されます。

⑦指定した範囲に、指定した要素が存在するかどうかを確認する

Section titled “⑦指定した範囲に、指定した要素が存在するかどうかを確認する”
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.locate_objects(result: list("$リスト名"), sq_size: 範囲, cent: "x:y", objects: "アイテム、地形を示す記号")
実行内容
  • 指定した範囲に、指定した要素が存在するかどうかを確認します。
  • 指定した要素がある座標がリストに保存されます。
引数
  • result: 結果を保存するリスト。あらかじめ作成しておく必要があります。
  • sq_size:指定する範囲の縦横のセルの長さ(省略時は5)
  • cent:指定する範囲の中心座標(省略時は現在地)
  • objects:確認したい要素の値。複数の場合は区切り文字なしで指定(省略時は減点アイテム全種類ABCD
解説
  • 結果は指定したリストに保存します。
  • リストの中の各座標はy座標が小さい順に並んでいます(y座標が同じ場合はx座標の小さいほうが先になります)。
  • マップ情報を取得していない座標の情報は確認できません。
引数の指定例
  • 例1 マップ全体の加点アイテムの座標を確認する場合
    koshien.locate_objects(result: list("$加点アイテム"), sq_size: 17, cent: "8:8", objects: "abcde")
  • 例2 マップ全体の水たまりの座標を確認する場合
    koshien.locate_objects(result: list("$水たまり"), sq_size: 17, cent: "8:8", objects: "4")
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.other_player
実行内容
  • 対戦相手の座標を呼び出します。
  • 最後にマップ情報の取得で把握した対戦相手の座標(“x:y”形式)を返します。
引数
解説
  • 得られる情報は、マップ情報の取得で把握した時点の情報です。
  • 対戦相手の座標は、マップ情報の取得の範囲に対戦相手がいないと把握できません。
  • 対戦相手の座標を把握していない場合は nil が返されます。
  • マップ情報の取得を繰り返し行っている場合、情報が上書きされていくため、一度把握した対戦相手の座標を見失う場合があります。
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.enemy
実行内容
  • 妨害キャラクタの座標を呼び出します。
  • 最後にマップ情報の取得で把握した妨害キャラクタの座標(“x:y”形式)を返します。
引数
解説
  • 得られる情報は、マップ情報の取得で把握した時点の情報です。
  • 妨害キャラクタの座標は、マップ情報の取得の範囲に妨害キャラクタがいなくても把握できます。
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.goal
実行内容
  • ゴールの座標を呼び出します。
  • ゴールの座標(“x:y”形式)が返されます。
引数
解説
  • ゴールの座標は、マップ情報の取得に関わらず呼び出し可能です。
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.player
実行内容
  • プレイヤーの座標を呼び出します。
  • プレイヤーの座標(“x:y”形式)が返されます。
引数
解説
  • プレイヤーの座標は、マップ情報を取得していなくても参照できます。
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.connect_game(name: "プレイヤー名")
実行内容
  • ゲーム時に指定したプレイヤー名が表示されます。
  • ゲームサーバーへ接続します。
引数
  • name: プレイヤー名を指定します。
解説
  • 文字列14文字まで入力できます。
ブロック
条件1ターンに1回まで(呼び出すとターン終了となるため)
コードkoshien.turn_over
実行内容
  • 現在のターンを終了させ、次のターンを待ちます。
引数
解説
  • 必ずターンの最後に1回実行する必要があります。
  • ターン終了を実行しないとタイムアウトでゲームが終了します。
ブロック
条件同ターンにおいて、③④⑭の命令は2回までしか呼び出せない
コードkoshien.set_bomb("x:y")
実行内容
  • 爆弾を現在地又は隣接する東西南北のセルに設置します。
引数
  • 爆弾を設置したい座標のX座標、Y座標を “x:y” 形式の文字列で指定します
  • 引数を省略した場合は現在地に爆弾を設置します。
解説
  • 爆弾は、空間または水たまりの上に置くことができます。アイテムがあるセルには設置できません。
  • 爆弾は1ラウンドに2回まで設置できます。
  • 無効な座標を指定した場合は設置されませんが、爆弾は1つ消費され、使用回数もカウントされます。
  • 両プレイヤーが同じ座標に同時に爆弾を設置した場合、両プレイヤーとも設置は成功しますが爆弾は1つだけ設置されたことになります。
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.hello("message")
実行内容
  • 指定した文字列を画面のテキスト表示エリアに出力する
引数
  • 画面に表示したい文字列
解説
  • デバッグ用途で利用することを想定したブロックです。

⑯数値から座標形式に変換する

Section titled “⑯数値から座標形式に変換する”
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.position(x, y)
実行内容
  • 指定した数値2つを座標を表現する文字列(“x:y”)に変換する
引数
  • x: X座標を表す数値
  • y: Y座標を表す数値
解説
  • 計算により得られた数値を座標としてブロックに渡す際に利用します

⑰文字列から座標数値を取得する

Section titled “⑰文字列から座標数値を取得する”
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.position_of_x("x:y")koshien.position_of_y("x:y")
実行内容
  • 座標を表現する文字列(“x:y”)からX座標(またはY座標)の数値を取得する
引数
  • 座標を表す文字列
解説
  • 計算するために座標文字列からX座標数値、Y座標数値を取得するために利用します

⑱マップ全体からある座標の情報を取り出す

Section titled “⑱マップ全体からある座標の情報を取り出す”
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.map_from("x:y", map_all)
実行内容
  • マップ全体の情報から、指定した座標の情報を取得する
引数
  • 座標を表す文字列
  • マップ全体のマップ情報
解説
  • ⑥のmap_allで取得した情報から指定した座標の情報を取得するために利用します

②-b ゴールまでの最短経路を探索する

Section titled “②-b ゴールまでの最短経路を探索する”
ブロック
条件なし(何度でも呼び出し可能)
コードkoshien.calc_route(result: list("$最短経路"))
実行内容
  • 通らない座標を考慮しないゴールまでの最短経路を探索します。
  • 最短経路はリストに保存されます。
引数
解説
  • ゴールまでの最短経路を探索します。
  • 「②最短経路を探索する」の、始点を現在地、終点をゴール、通らない座標の指定なし、に固定したものです。