Tile World 概要 サーバーに要求をTCPソケットでおくり,その応答を受けることで, エージェントを動かします.

参照先:
          説明

パッケージ
jp.ac.fun.osawalab.tileworld.connector  
jp.ac.fun.osawalab.tileworld.game  
jp.ac.fun.osawalab.tileworld.rule  
jp.ac.fun.osawalab.tileworld.server  

 

Tile World

概要

サーバーに要求をTCPソケットでおくり,その応答を受けることで, エージェントを動かします. Javaで書いた雛形プログラム(tileworldclient)を利用しない 場合(C言語などでクライアントを書く場合)は, 「通信で利用できるコマンドについて」を読んで実装してみてください.

それ以外に,サーバーからのメッセージとして,

の各場合に,「$CLOCK $MESSAGE」という形式で, ログイン時に指定(コマンドloginを参照)したポートにUDPで, メッセージが送られます. Javaで書いた雛形プログラム(tileworldclient)を利用しない場合 (C言語などでクライアントを書く場合)は,これも注意してください.

基本的には, タイル(T)を穴(数字)の上に重ねることで, 点数がはいるゲームです. デフォルトのルールでは,タイルをタイルの上に重ねたり, エージェントが穴の上を通過したり, タイルの上にエージェントがのることはできないようになっています.

タイルを利用しない, SimpleTileWorldRuleというルールも用意してあります. プロパティファイル(デフォルトではdefault.ini)で設定 してください.このルールでは, エージェントが穴の上を通過することによって,得点が入ります.

プロパティファイル(デフォルトではdefault.ini)では, それ以外にも, 障害物や穴ユニットが消滅,出現する割合を設定したりできます. この値は, jp.ac.fun.osawalab.tileworld.rule.Rule#changeObstaclesjp.ac.fun.osawalab.tileworld.rule.Rule#changeHoles に関係しています.この2つのメソッドは, 定期的に世界に変化を加えるメソッドです.実験したい内容によっては, メソッドを丸ごと書き変えたほうがいいかも知れません.

サーバーの起動方法などは,このページの一番下にあります.


通信で利用できるコマンドについて.

ログイン済みプレイヤークライアントが実行可能なコマンド

ADD

ADD
エージェントをTileWorldに追加する.
応答:
$agent_id - エージェントの追加が成功したとき, サーバーが決定したIDが返される.
"cannot add agent." - 追加できないとき.

MOVE

MOVE $agent_id $direction
エージェントの移動コマンド.
パラメータ:
$agent_id - そのコマンドによって動かしたいエージェントのID
$direction - 'u',d','l','r','s'のアルファベット1文字

WORLD $agent_id

WORLD$agent_id
指定されたエージェントの視界範囲の現在のTileWorldの状態を要求する. 1行目はTileWorldの視界を構成する格子の,行数($H) 列数($W)を表す. 各変数は空白で区切られている. 2行目以降は,各行は W 字の文字列で構成されていて, H 行続く. 設定ファイルで指定されたVIEW_SIZEは, エージェントから見える距離を指定する. 今回の実装では,エージェントの上下左右, それぞれの方向にVIEW_SIZE分の,正方形の視界を設定した.
応答:
VIEW_SIZEが2の時のSample
    5 5
    #####
    #####
    .TaT.
    ..###
    ...##
    

LOGOUT

LOGOUT
ログアウトする.
ゲーム管理用のコマンド

TICK

TICK
手動で時刻を1進める.

START

START
タイマーを起動する.

STOP

STOP
タイマーを止める.

RESET

RESET
初期状態に戻す.

CLOCK

CLOCK
現在のクロックを取得する.
応答:
現在のクロック 最大クロックが,スペースで区切られて返る.
sample
        15 50
    

LOGOUT

LOGOUT
ログアウトする.
その他のクライアントが実行可能なコマンド

LOGIN

LOGIN $client_id $message_port
(ログインしていない場合にのみ実行可能)
メッセージ受信用のポートと,クライアントIDを指定して, ログインします. クライアントIDに,
Viewer
という文字列が含まれていれば, ログインしたクライアントは,ビューアーの権限を持ちます.
パラメータ:
$client_id - クライアントID
応答:
Login succeeded.

PLAYERLIST または PLAYERLIST

PLAYERLIST または PLAYERLIST
プレイヤーのリストを要求する
応答:
$N $player_id_1 $player_id_2 ... $player_id_N
$N はプレイヤー数,その後にプレイヤーIDが N 個続く

AGENTLIST

AGENTLIST [$player_id]
パラメータなしの場合は全てのエージェントについて, パラメータを指定した場合は, 指定されたプレイヤIDに関連づけられた全てのエージェントについて, エージェントのリストを要求する
パラメータ:
$player_id - プレイヤID
応答:
$N $agent_id_1 $agent_id_2 ... $agent_id_N
$N はエージェント数,その後にエージェントIDが N 個続く

SCORE

SCORE $agent_id
特定のエージェントの現在のスコアを得る.
パラメータ:
$agent_id - エージェントのID
応答:
$score - スコア(10進整数)

SCORELIST

SCORELIST [$player_id]
パラメータなしの場合は全てのエージェントについて, パラメータを指定した場合は, 指定されたプレイヤIDに関連づけられた全てのエージェントについて, エージェントのリストを要求する
パラメータ:
$player_id - プレイヤーID
応答:
$N $agent_id_1 $score_1 $agent_id_2 $score_2 ... $agent_id_N $score_N
$N はエージェント数, その後に,N 組のエージェントID,スコアが続く

WORLD

WORLD
(プレイヤーはエージェントを指定しなければ実行できない)
現在のTileWorldの状態を要求する. 1行目はTileWorldを構成する格子世界の,行数($H) 列数($W)を表す. 各変数は空白で区切られている. 2行目以降は,各行は W 字の文字列で構成されていて, H 行続く.
応答:
sample
    20 20
    ####################
    #..T.T....T...T....#
    #...#.........22..T#
    #...#.........2....#
    #...##5......T.....#
    #..###5T...........#
    #....#5..T...a....T#
    #...T..............#
    #....T..T......TT..#
    #.......#T#T.T.....#
    #...T...####.......#
    #..#.....##....T...#
    #..#.T.T.T...T.....#
    #..#...........#...#
    #............T.#.#.#
    #..T.........#####.#
    #..#####...........#
    #..#..........TT...#
    #.........T....T..T#
    ####################
    

EXIT

EXIT
接続を解除する.

README.txt

(README)

1.
以下のファイルをサーバーを起動するディレクトリに置きます.

default.dat:
世界の初期状態を記述するファイルです.
ファイルの先頭に,その幅と高さを記述すること.
エージェントの場所も指定できます(指定のない場合はランダムに置かれます).

default.ini:
サーバーの設定ファイル.

RULE = jp.ac.fun.osawalab.tileworld.rule.TileWorldRule
SERVER_PORT = 5000
WORLD_FILE_NAME = default.dat
MAX_CLOCK = 50
TICK_SPAN = 1
OBSTACLE_DISAPPEAR_RATE=0.2
OBSTACLE_APPEAR_RATE=0.2
HOLE_DISAPPEAR_RATE=0.2
HOLE_APPEAR_RATE=9.2
VIEW_SIZE = 3
のような設定を含みます.
詳しくは,tileworldserver/default.iniを参照してください.


2.
サーバの起動方法
上記のファイルが置いてあるディレクトリで,
java jp.ac.fun.osawalab.tileworld.Server.Server
(設定ファイルのdefault.iniは,読み込むファイルのパスを起動時に付け加える
 ことで,変更できます.
 例:java jp.ac.fun.osawalab.tileworld.server.Server hoge.ini

3.
クライアントの起動方法
java jp.ac.fun.osawalab.tileWorld.client.MyClient $HOST $PORT

$HOST: サーバーのIP
$PORT: サーバーのポート

ビューアーも同様に,
jaba jp.ac.fun.osawalab.tileWorld.client.viewer.TileWorldViewer $HOST $PORT

4.
クライアントの作成方法
jp.ac.fun.osawalab.TileWorld.Client.Client(ソケット周辺のメソッドが実
装済み)を拡張して,クラスを作成すします.
例) public class MyClient extends Client

メソッドの詳細はドキュメントの
jp.ac.fun.osawalab.tileworld.client.Clientを参照してください.