空間エージェント関数(移動)¶
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)