プレイヤーはロボットを操作して、開拓・建造・戦闘を通して小惑星を開発する。 敵プレイヤーに負けないよう小惑星を開発しよう!
土地の開拓や基地の建造によって得られる勝利点を、他のプレイヤーよりも多く獲得する。 勝利点の計算方法は後述する。
フィールドは図のように1辺が7個の小さい正六角形からなる正六角形の形をしている。 プレイエリアは全部で127マス存在する。
フィールドは4種類のマスから構成されており、ロボットの移動や基地の建造の可否が異なっている。
-
荒野 (Wasteland)
初期状態のマス。特定の所有者を持たない。
ロボットが荒野に移動すると、その荒野は所有者の開拓地に変化する(これを占領と呼ぶ)。
-
開拓地 (Settlement)
プレイヤーが占領したマス。 ゲーム画面ではマスがプレイヤーの色で覆われている。 ロボットが存在する開拓地に基地を建造できる。 建造を行うと基地に変化する。 敵対するプレイヤーの開拓地も占領できる。
-
基地 (Base)
プレイヤーが建造を行った後のマス。 ゲーム画面ではそのプレイヤーの色の基地が置かれている。 基地には6種類あり、それぞれ異なる効果を持つ。 ロボットは敵対するプレイヤーの基地に移動できない。
-
穴 (Hole)
フィールドのおよそ1/5を占める障害物。 ロボットが穴に移動すると、穴に落ちるため、それ以降どこにも移動できなくなる。 後述する 橋 をその穴に建造すると、その場所にいるロボットが移動できるようになる。 ゲーム開始時点では所有者が存在しないが、穴に落ちたプレイヤーはその穴を所有する。 プレイヤーは敵対するプレイヤーの所有する穴に移動することもできる。
各マスにはそのマスを所有するプレイヤーのロボットが存在し、その個数は各マスに のように表示される。
- ゲーム開始時、プレイヤーの初期位置およびフィールドの穴の配置が決定される。
- プレイヤーの初期位置と穴の位置は、各プレイヤーが点対象になるようにランダムに決定される。
- 初期位置には、ロボットが毎ターン5体生成される ロボット製造機 が配置される。
上図は初期配置の一例である。図の白マスが 荒野 、黒マスが 穴 、青マスが ロボット製造機 を表している。
毎ターン、複数箇所のロボットの移動もしくは1箇所での建造が行える。 例えば、移動した後の建造はエラーとなり実行されない。
毎ターン、各ロボットを1ターンに1マス動かすことができる。
すでにロボットが存在するマスに移動させると、ロボット数が加算される。
敵対するロボットが存在するマスに移動させると、数が多い方のロボットが差し引き分残る。
そのマスは残ったロボットの所有者の開拓地となる。
資源はすべての開拓地に少なくとも1つ存在し基地の建造に使われる。 資源が存在する条件については上図を例に説明する。
上図では、自分自身の所有するそれぞれの開拓地マスの資源の個数を の個数で表している。
- 使用可能な資源は自分の所有する開拓地にのみ存在する。すなわち、(1,1),(3,1),(3,2)のような荒野には存在しない。また、自分自身が所有していても(2,1)のような穴や(1,3),(3,3),(4,1)のように基地の存在するマスには資源は存在しない。
- 自分の所有する開拓地の周囲に 掘削機 が存在すれば、そのマスの資源は1つ増える。(2,3)は右側の(3,3)に存在する掘削機のおかげで資源は2つとなり、(4,2)の周囲には左上の(4,1)と、左下の(3,3)に 掘削機 が存在するため、(4,2)の資源は3個となる。
開拓地と穴には基地を建造することができ、建造が行われたマスは基地になる。
なお、穴には 橋 のみが建造でき、残りの基地は 開拓地 にしか建造できない。
基地の建造には資源とロボットが必要である。
-
資源
建造を行うマスおよび周囲1マスの自分の開拓地に存在する資源の合計が、建造に必要な資源数以上である必要がある。
前述の資源数の図を用いて説明すると(2,2)の周囲1マスには(1,2)(2,2)に1つずつ、(2,3)に2個の資源が存在するため、(2,2)には資源数が4までの基地を建造することが出来る。
基地を建造しても周囲の資源は消費されないが、建造したマス自身は基地になるので資源は消滅する。
-
ロボット
建造を行うマス自身に存在するロボットが、建造に必要なロボット数以上である必要がある。
資源とは異なり、建造の際にロボットはコストの数だけ、消滅する。
ゲームに登場する基地は以下の通りである。 基地の隣の数字はその基地に必要な資源数とロボット数である。 括弧の中に英語表記を記載するが、スラッシュ('/')の右側にAIプログラムのマップ入力とコマンド出力で使用する表現を示す。
-
ロボット製造機 (Initial / initial) (建造不可)
自分のターンの開始時にロボットを5体生成する。
-
小型ロボット製造機 (Robot Maker / robotmaker) 資源 4 / ロボット 50
自分のターンの開始時に、ロボット1体を生成する。
図の青の位置に攻撃塔を配置すると、図の赤で示される半径2の直線状に自分のターンの開始時に攻撃を行う。
攻撃した各マスに敵ロボットが存在するとき、その数を2減らす。
-
家 (House / house) 資源 4 / ロボット 10
特に効果を持たない
-
街 (Town / town) 資源 9+ / ロボット 10
周囲1マスの自分の開拓地を 家 に変更する。
街を建設する際に自分自身とその周囲1マスに存在する資源の数-9の勝利点を基地と別に獲得する。
以下の条件のいずれかを満たしたとき、ゲーム終了となる。
- いずれかのプレイヤーが100点を獲得する
- 200ターンが経過する
以下のルールに基づいて勝利点を計算し、最も勝利点の高いプレイヤーを勝者とする。
- 所有する開拓地 → 1マスにつき1点
- 所有する基地 → 1マスにつき3点
- 街 による建設時の加算点
※穴は所有していても勝利点にならない。
2人以上が同点で1位の場合、手番の遅いプレイヤーを勝者とする。
- ゲーム本体がゲームを初期化
- ゲーム本体がゲーム状態をAIプログラム1に入力
- AIプログラム1はプレイヤー名を出力
- ゲーム本体がゲーム状態をAIプログラム2に入力
- AIプログラム2はプレイヤー名を出力
- ゲーム本体がゲーム状態をAIプログラム3に入力
- AIプログラム3はプレイヤー名を出力
- ゲーム本体がゲーム状態をAIプログラム1に入力
- AIプログラム1は1ターン目のコマンド列を出力
- ゲーム本体がゲーム状態をAIプログラム2に入力
- AIプログラム2は1ターン目のコマンド列を出力
- ゲーム本体がゲーム状態をAIプログラム3に入力
- AIプログラム3は1ターン目のコマンド列を出力
- ゲームが終了するまで手順8-13を繰り返す
以下の形式でAIに対するフィールドの情報が標準入力を介して与えられる。
START
ターン番号 最大ターン番号 プレイヤーのID
フィールドの幅 タイルの数
タイル1のx座標 y座標 所有者のID ロボットの数 資源数 地形情報 基地
タイル2のx座標 y座標 所有者のID ロボットの数 資源数 地形情報 基地
...
タイルnのx座標 y座標 所有者のID ロボットの数 資源数 地形情報 基地
EOS
タイルの所有者がいない場合は「所有者のID」が-1、タイルが穴である場合は「基地」がholeになる。 地形情報とは、4種類のマス情報(荒野(wasteland)、開拓地(settlement)、基地(base)、穴(hole))のことである。
SampleAIというプレイヤー名を出力したい場合は、標準出力へ以下の内容を出力する。 ただし、末尾には改行コードを付与すること。
SampleAI
座標(2, 3)に位置するロボット2体を左に動かしてターンを終了する場合は、標準出力へ以下の内容を出力する。 ただし、末尾には改行コードを付与すること。
move 2 3 l 2
finish
以下のようにfinishを複数回出力した場合は、次のターンのコマンド内容が街を建設するコマンドになる。 なお、複数回のbuildコマンドおよびmoveとbuildコマンドの混合は認められないため、家を建設するコマンドは無視される。
move 2 3 l 2
finish
build 1 2 town
build 2 3 house
finish
move 移動元のx座標 y座標 移動方向 移動させるロボットの数
move 移動元のx座標 y座標 移動方向 移動させるロボットの数
move 移動元のx座標 y座標 移動方向 移動させるロボットの数
…
finish
移動元のx座標,y座標には同じものを指定しても良い。 移動方向は(r|ur|dr|l|ul|dl)を指定する。 これはそれぞれ、
- right(1,0)
- upper-right(1,-1)
- downer-right(0,1)
- left(-1,0)
- upper-left(0,-1)
- downer-left(-1,1)
を表している。
build 建造する場所のx座標 y座標 建造したい基地
finish
建造したい基地は(robotmaker|excavator|tower|bridge|house|town)を指定する
各プレイヤーは5000msの間にゲームの初期状態を受け取ってプレイヤー名を決定しなければならない。 5000msを超えた場合はプレイヤー名が"nanashi"になり失格となる。 なお、ゲームの初期状態には開始時のマップ情報が含まれているため、名前を決める際に戦略を練っても良い。
各プレイヤーは1ターンにつき1000msの間に全てのコマンドを入力しなければならない。 1000ms以内に入力が終了しなかった(finishコマンドが入力されなかった)場合、1ゲーム以内で合計5000msまでの時間超過が認められる。 超過時間が合計で5000msを超えた場合、以降の入力は全てfinishコマンドのみと見なされ、一切コマンド入力ができなくなる。
###予選トーナメント プレイヤー人数が3の倍数になるように、弱いサンプルAIを参加AIに加えることがある。
イロレーティング制を導入する。 全チーム1500の状態からスタートし、1ゲームごとに以下の3試合が行われたものとしてレーティングを計算する。
- 1位が2位に勝利した
- 1位が3位に勝利した
- 2位が3位に勝利した
すべてのプレイヤーが1試合ずつ行った後、 レーティングの高い順にソートし、3チームごとで区切ってゲームを行う。 これを繰り返し、全チーム30試合を行い、レーティングの高い順に決勝に参加可能なチームの中から 学生上位3チーム、社会人上位3チーム、及びその6チームを除いた中から総合上位3チームを決勝トーナメント進出とする。
###決勝トーナメント
学生上位3チーム、社会人上位3チーム、総合上位3チームそれぞれのグループで2ゲームを行い、1位を取った回数が最も多いチームを決勝進出とする。候補となるチームが複数存在する場合、追加で1ゲームを行い、その2チームで順位の高かったほうのチームを決勝進出とする。
学生1位チーム、社会人1位チーム、総合1位チームの3チームで最大4ゲームを行う。 1位を2回取ったチームを優勝とする。