空間エージェント関数(移動)

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)