前の記事はこちら いまさら Rescue Simulation を動かしてみる 続き
まあ、もう、あまり役に立たないでしょうけど・・・Rescue Simulation の AIプログラミングを自分の備忘録として記載しておきます。
大昔の(2010年の頃)AIは、全くのランダム走行や、壁に沿って一周するプログラムが普通でした。
しかし、時代が進み、現在の Rescue Simulation では、作戦を立てて、きちんとその位置に向かうようなプログラムを作り必要があります。
①オブジェクトを収集したら、オブジェクトコレクションボックスに入れる。
②スーパーオブジェクトやスーパープラスオブジェクトが発生したら、収集する。
③その他、オブジェクトが撒かれている特定の領域に向かう・・・
こんな感じです。
で、特定の場所に向かうのは 自分(ロボット)の座標が分かる WORLD_2 でのプログラミングになります。
自分(ロボット)の座標は PositionX、PositionY の変数で取得することができます。
また、自分が向いている方向も Compass という変数で取得できます。
では、向かうべき座標を(Xt,Yt)として、そこに向かうプログラムのサンプルです。
dX=Xt-PositionX;
dY=Yt-PositionY;
if((dX>0)&&(dY>0))
if(dX>dY)
T=300;
else
T=330;
else if((dX<0)&&(dY>0))
if(-dX>dY)
T=60;
else
T=30;
else if((dX<0)&&(dY<0))
if(-dX>-dY)
T=120;
else
T=150;
else
if(dX>-dY)
T=240;
else
T=210;
T=(T-Compass+540)%360;
if(PositionX==0)
{WheelLeft=3;WheelRight=3;}
else if(T<30)
{WheelLeft=-3;WheelRight=3;}
else if(T<=90)
{WheelLeft=3;WheelRight=-1;}
else if(T<=160)
{WheelLeft=3;WheelRight=1;}
else if(T<200)
{WheelLeft=3;WheelRight=3;}
else if(T<270)
{WheelLeft=1;WheelRight=3;}
else if(T<300)
{WheelLeft=-1;WheelRight=3;}
else
{WheelLeft=-3;WheelRight=3;}
面倒なのは、ロボットが信号ブロック領域に入ると、自分の座標(PositionX、PositionY)が(0,0)になってしまうことです。
(この信号ブロック領域がどこに発生するか分からないところが、難しい・・・!)