# 空間エージェント関数(移動) ## forward 前方へ進む。
正常終了のときは-1、空間がループしていないときで指定した距離を進めなかったときは、進めなかった距離を返す。 **forward**(distance) - **distance** - 進む距離 ※基本的に、空間エージェントのルールエディタ内で「self.[関数名]」の形で用いる
※連続空間でのみ使用可能。 ``` # 前方に2進む(空間エージェントのルールエディタ内に記述) self.forward(2) ``` ## forward_direction_sqgrid 四角格子上を指定した方向へ移動する。
四角格子空間または連続空間で使用可能。 **forward_direction_sqgrid**(direction, distance) - **direction** - 進む方向。 - 原点が左下のとき 0:右、1:右上、2:上、3:左上、4:左、5:左下、6:下、7:右下 - 原点が左上のとき 0:右、1:右下、2:下、3:左下、4:左、5:左上、6:上、7:右上 - **distance** - 進む距離。チェビシェフ距離で定義し、整数で指定する。 ※基本的に、空間エージェントのルールエディタ内で「self.[関数名]」の形で用いる ``` # 右上に2進む(左下原点のとき、空間エージェントのルールエディタ内に記述) self.forward_direction_sqgrid(1, 2) ``` ## move_center エージェント自身が乗っている空間(Layer)の中央に移動する。
※格子空間で空間の幅(高さ)が偶数の場合、小数点切り捨て **move_center**() ※基本的に、空間エージェントのルールエディタ内で「self.[関数名]」の形で用いる ``` # エージェント自身が50×50の空間に乗っている時(25,25)に移動 self.move_center() ``` ## move_space_around_own_sqgrid 四角格子空間で、指定した視野の範囲で空き地(格子)を探し、移動する。
検索された領域に複数の空き地が存在するときは、ランダムに移動位置を決定する。 **move_space_around_own_sqgrid**(view, avoid=None, manhattan=False) - **view** - 視野。整数で指定する。 - **avoid** - 重ならないエージェント集合。初期値はNoneで、このときは全てのエージェントと重ならない。 - **manhattan**: Falseのときは視野をチェビシェフ距離で、Trueのときはマンハッタン距離で定義する。初期値はFalse。 ※基本的に、空間エージェントのルールエディタ内で「self.[関数名]」の形で用いる ``` # (以下、空間エージェントのルールエディタ内に記述) # チェビシェフ距離で視野2の範囲の格子のうち、エージェントが誰もいない場所へランダムに移動する self.move_space_around_own_sqgrid(2) # チェビシェフ距離で視野3の範囲の格子のうち、集合enemiesに含まれるエージェントが誰もいない場所へランダムに移動する self.move_space_around_own_sqgrid(3, avoid=enemies) # マンハッタン距離で視野3の範囲の格子のうち、集合enemiesに含まれるエージェントが誰もいない場所へランダムに移動する self.move_space_around_own_sqgrid(3, avoid=enemies, manhattan=True) ``` ## move_space_around_position_sqgrid 四角格子空間で、指定された位置を中心に周りの空き地を探し、移動する。検索された領域に複数の空き地が存在するときは、ランダムに移動位置を決定する。 **move_space_around_position_sqgrid**(view, x, y, layer, avoid=None, manhattan=False) - **view** - 指定する座標の周囲を探索する視野。 - **x** - 指定する位置のx座標。 - **y** - 指定する位置のy座標。 - **layer** - 指定するレイヤ。 - **avoid** - 重ならないエージェント集合。初期値はNoneで、このとき全てのエージェントと重ならない。 - **manhattan** - Falseのときは視野をチェビシェフ距離で、Trueのときはマンハッタン距離で定義する。初期値はFalse。 ※基本的に、空間エージェントのルールエディタ内で「self.[関数名]」の形で用いる ``` # (以下、空間エージェントのルールエディタ内に記述) # レイヤ0の座標(25,30)からチェビシェフ距離で視野2の範囲の格子のうち、エージェントが誰もいない場所へランダムに移動する self.move_space_around_position_sqgrid(2, 25, 30, 0) # レイヤ0の座標(25,30)からチェビシェフ距離で視野3の範囲の格子のうち、集合enemiesに含まれるエージェントが誰もいない場所へランダムに移動する self.move_space_around_position_sqgrid(3, 25, 30, 0, avoid=enemies) # レイヤ0の座標(25,30)からマンハッタン距離で視野3の範囲の格子のうち、集合enemiesに含まれるエージェントが誰もいない場所へランダムに移動する self.move_space_around_position_sqgrid(3, 25, 30, 0, avoid=enemies, manhattan=True) ``` ## pursue 目標のエージェントへ向かって移動する。
正常終了時は-1、進めなかったときは進めなかった距離を返す。 **pursue**(agt, distance) - **agt** - 目標とするエージェント。 - **distance** - 移動する距離。 ※基本的に、空間エージェントのルールエディタ内で「self.[関数名]」の形で用いる
※連続空間でのみ使用可能。 ``` # エージェントtaroに向かって距離3移動する self.pursue(taro, 3) # エージェントtaroに向かって距離0.1進み、進めなかったとき(taroまで距離0.1未満まで接近したとき)自分の色を赤くする if self.pursue(taro, 0.1) > 0: self.color = COLOR_RED ``` ## turn 向きを変える。 **turn**(degree) - **degree** - 向きを変える角度。度数法で指定。左下原点のとき、引数が正の値のときは左回り、負の値のときは右回りに向きを変える。左上原点のときは逆。 ※基本的に、空間エージェントのルールエディタ内で「self.[関数名]」の形で用いる ``` # 左回りに30度向きを変える(左下原点のとき) self.turn(30) ``` ## turn_agt 指定したエージェントの方向を向く。 **turn_agt**(agt) - **agt** - 指定するエージェント。 ※基本的に、空間エージェントのルールエディタ内で「self.[関数名]」の形で用いる ``` # エージェントtaroの方向を向く self.turn_agt(taro) ```