0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rescue Mazeのフィールドで遊ぶ①CMSのJSONファイルの形式

Posted at

RoboCupJuniorのCMSでは、Rescue MazeのフィールドをJSONファイルとして出力できます。これから4回の記事にわたってこのJSONファイルで遊んでいこうと思います。

今回は、まずそのJSONの形式についてまとめます。

この記事は Tuton Advent Calender 2025 の15日目の記事です。

RoboCupJunior Rescue CMSとは

RoboCupJuniorのRescue Leagueで使用されている大会運営システムです。
構築の方法についてはこちらの記事をご覧ください。

マップエディターでRescueのマップを作ることができます。

image.png

このマップはJSONとして書き出すことができるのですが、今回はこれを自作のソフトウェアに活用するためにJSONの形式について見ていきます。

マップエディターはこちらから誰でも使用することができます。

JSONの形式

JSONは以下の形式で書き出されます。

{
  "name": "string",
  "length": 0,
  "height": 0,
  "width": 0,
  "leagueType": "string",
  "duration": 480,
  "finished": false,
  "startTile": { "x": 1, "y": 1, "z": 0 },
  "cells": [ /* cell objects */ ]
}
/* cells[]の形式 */
{
  "x": 0,
  "y": 0,
  "z": 0,

  "isTile": false,
  "isWall": false,
  "isLinear": false,
  "ignoreWall": false,
  "virtualWall": false,
  "halfWall": 0,

  "tile": {
    "reachable": false,
    "checkpoint": false,
    "speedbump": false,
    "black": false,
    "ramp": false,
    "steps": false,
    "blue": false,
    "red": false,
    "victims": {
      "top": "None",
      "right": "None",
      "bottom": "None",
      "left": "None",
      "floor": "None"
    },
    "changeFloorTo": 0
  }
}

各プロパティの説明

name(string)

マップ名。

length(int)

マップの縦方向の長さ(タイル数)。

height(int)

マップの階層数。

width(int)

マップの縦方向の長さ(タイル数)。

leagueType(string)

競技種別。"standard""entry"などが入ります。
基本的には"standard"です。
"entry"だと階段や坂の要素を無効化します。

duration(int)

制限時間(秒)。基本は8分なので480です。

finished(bool)

このマップが完成扱いかを示すプロパティ。CMSの処理で使用しているようです。

startTile(object)

スタートタイルの座標。
座標系については後述します。

cells(array)

各セルについての情報。タイルもマップも同じ配列に含まれます。

cells[]の各セルのオブジェクトのプロパティ

x, y, z(int)

セルの座標。
座標系については後述します。

isTile, isWall(bool)

そのセルがタイルなのか壁なのかを示すプロパティ。
座標から判断できるのであまり意味はない。

halfWall, isLinear, ignorewall, virtualWall

謎です。基本的には使わないと思います。

cell.tileのプロパティ

各セルのオブジェクトの中で、タイルのものにだけ以下の詳細が付きます。

reachable(bool)

スタートから到達できるかどうか。

checkpoint(bool)

チェックポイントタイルかどうか。

speedbump(bool)

バンプがあるかどうか。

black, blue, red(bool)

黒タイル・青タイル・赤タイルかどうか。

ramp(bool)

坂道かどうか。

steps(boolean)

階段かどうか。

victims(object)

周囲4方向(+Entry用の床)の壁の被災者情報です。

"victims": {
  "top": "None",
  "right": "None",
  "bottom": "None",
  "left": "None",
  "floor": "None"
}

値は以下のどれかです。

"H", "S", "U", "Red", "Yellow", "Green", "None"

changeFloorTo(int)

坂で階層が変わる時に行き先を指定します。

座標系

このJSONファイルでは、壁とタイルを下の図のように全て1マスとして扱います。

image.png

よって、タイルは(奇数, 奇数)、柱は(偶数, 偶数)、壁は(奇数, 偶数)または(偶数, 奇数)として座標で表されます。

z座標は階層を示していて、一層目が0です。

これらの定義より、0 <= x <= width * 20 <= y <= length * 20 <= z < heightとなっています。

さいごに

次回の記事ではこれを自作のプログラムで読み込んで表示してみましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?