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