最初の取っ掛かりとしては難しいので,まずは簡単なMAPから実行してみる.
mapの変更
rescue-nightly\boot\config\gis.cfg
の中にMAPが書いてあるので, それを変更.
たとえば,
# The map directory to read # gis.map.dir : ../maps/gml/legacy/Kobe gis.map.dir : ../maps/gml/test
とすると,Mapがlegacy/Kobeからtestに変更できる.
これで実行すれば,各種エージェントが1種類ずつしかいない
小さいMAPを試してみることが可能.
エージェントの数の制御
ついでに,エージェント数などを変更する場所もメモしておこう.
rescue-nightly\maps\gml\
にマップデータがあるので,
scenario.xml
を書き換える.
エージェントの作り方
さて,ここまできていよいよエージェントの作成.
基本となるAbstractClassは,
rescuecore2.standard.components.StandardAgent
これを継承して,
import rescuecore2.standard.components.StandardAgent; import rescuecore2.standard.entities.StandardEntity; abstract public class AbstractAgent<E extends StandardEntity> extends StandardAgent<E> { }
などというAbstractAgentクラスを作成すると良い.
さらに,それを継承して,AmbulanceTeam,PoliceForce,FireBrigaterを作成する.
たとえば,PoliceForceを作成するなら,
public class MyPoliceForceAgent extends AbstractAgent<PoliceForce>
とする.
とりあえず,ざっくりとしたMyPoliceForceAgentを作成してみる.
package jp.ac.nagoyau.is.ss.kishii.tori.rescue.test.agent; import java.util.Collection; import java.util.EnumSet; import rescuecore2.messages.Command; import rescuecore2.standard.entities.PoliceForce; import rescuecore2.standard.entities.StandardEntityURN; import rescuecore2.worldmodel.ChangeSet; public class MyPoliceForceAgent extends AbstractAgent<PoliceForce> { /** * つなげるために呼ばれる.<br> * これが呼ばれると全体のMAPなどが読み込めるようになる */ @Override protected void postConnect() { super.postConnect(); //何か初期化処理 } /** * なんだかよくわからないけど,書いておく. * たぶんサーバ側で利用する */ @Override protected EnumSet<StandardEntityURN> getRequestedEntityURNsEnum() { return EnumSet.of(StandardEntityURN.POLICE_FORCE); } /** * 1ステップごとに呼び出される. */ @Override protected void think(int time, ChangeSet changeSet, Collection<Command> commands) { //面倒なので何もしません } }
自分のエージェントで動かす
せっかく作ったら動かしたいというのが人間のサガ.
動かす方法も考えよう.
sample.LaunchSampleAgentsを自分の開発パッケージにコピーしておく.
で,作成したエージェントとSampleAgentを入れ替える.
たとえば,SamplePoliceForceAgentを今作成したMyPoliceForceAgentに変更するなら,
コピーしたLaunchSampleAgentsの100行目付近を
Logger.info("Connecting police force " + (i++) + "...");
//launcher.connect(new SamplePoliceForce());
launcher.connect(new SamplePoliceForce());
Logger.info("success");
と変更する.
で,実行してみると・・・
無事PoliceForceが何もしないチームが完成.
ますます役立たず.
0 件のコメント:
コメントを投稿