サーバーは各エンジン(AI)と標準入出力(stdin/stdout)を通じて、テキストベースのコマンドで通信する。 サーバーは、盤面の状態や手番、制限時間、相手の手などをコマンドとしてエンジンに送信し、エンジンは指示に従って応答する。
エンジン側には、quitコマンドが与えられるまで、コマンドが与えられ続ける。
盤面の座標は左上から行方向(上から下、左から右)に0から順に番号が振られる。
例えば、9路盤の場合の座標割り当ては以下の通りである。
0 1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16 17
18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34 35
36 37 38 39 40 41 42 43 44
45 46 47 48 49 50 51 52 53
54 55 56 57 58 59 60 61 62
63 64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79 80
pos S x
posの後に,半角スペース区切りで,盤面の石の配置を表す文字列
このコマンドが与えられるのは対局開始時のみであり、以降はエンジン側で局面を管理する。 また、posコマンドに対して、エンジン側は何らかの応答を返す必要はない。
move C
moveの後に,座標を表す整数
これは相手のエンジンが座標
go T
goの後に,制限時間を表す整数
エンジンは、goコマンドを受け取ったら
quit
quitという文字列のみが与えられる.
これを受け取ったエンジンは、10秒以内に自身を終了させなければならない。 10秒以内に終了できなかった場合は、サーバー側から強制終了させる。
9路番において天元(中央の交点)に既に黒石が置かれており,白番から着手を開始するケースを考える. Engine 1を先手,Engine 2を後手とする.
Server to Engine 1: pos ----------------------------------------X---------------------------------------- O
Server to Engine 2: pos ----------------------------------------X---------------------------------------- O
Server to Engine 1: go 1000
Engine 1 to Server: move 31
Server to Engine 2: move 31
Server to Engine 2: go 1000
Engine 2 to Server: move 32
Server to Engine 1: move 32
Server to Engine 1: go 1000
.
.
.
Server to Engine 1: quit
Server to Engine 2: quit
なお、連続して対局を行う場合、次の対局開始時にposコマンドが再び与えられる。
- 詳細は
Engine.csおよびGame.csのSendCommand,SetPosition,Think,SendMoveなどのメソッドを参照してください。