質問 (解決済み)[artisocモデル] 壁エージェントについて | |
質問者: hd140050さん , 質問日時: 2017/10/09 13:47 |
Agt_Init{ my.Direction = 90 my.Color = RGB(100 + Rnd()* 150, 100 + Rnd()* 150, 100 + Rnd()* 150 ) my.Size = 1.0 - 0.2 + 0.2 * Rnd() my.Speed = 0.5 - 0.1 + 0.2 * Rnd() my.ChangeDirection = 20 - 5 + 10 * Rnd() my.EnterStep = GetCountStep() }
Agt_Step{ Dim 進行フラグ As Boolean Dim 次の移動速度 As Double Dim 次の角度 As Double 進行フラグ = True // 信号の色が赤の場合 if (信号判定 () == False) Then 進行フラグ = False // 通常の歩行速度・目標方向 Elseif (移動可能判定(My.歩行速度, My.目標方向)) Then 進行フラグ = True 次の移動速度 = My.歩行速度 次の角度 = My.目標方向 // 半分の移動速度・通常の目標方向 Elseif (移動可能判定(My.歩行速度 /2 , My.目標方向)) Then 進行フラグ = True 次の移動速度 = My.歩行速度 /2 次の角度 = My.目標方向 // 半分の移動速度・目標方向+ 45度 Elseif (移動可能判定(My.歩行速度 /2 , (My.目標方向+ 45))) Then 進行フラグ = True 次の移動速度 = My.歩行速度 /2 次の角度 = My.目標方向 + 45 // 半分の移動速度・目標方向- 45度 Elseif (移動可能判定(My.歩行速度 /2 , (My.目標方向- 45))) Then 進行フラグ = True 次の移動速度 = My.歩行速度 /2 次の角度 = My.目標方向 - 45 // 半分の移動速度・目標方向- 90度 Elseif (移動可能判定(My.歩行速度 /2 , (My.目標方向- 90))) Then 進行フラグ = True 次の移動速度 = My.歩行速度 /2 次の角度 = My.目標方向 - 90 // 半分の移動速度・目標方向+ 90度 Elseif (移動可能判定(My.歩行速度 /2 , (My.目標方向+ 90))) Then 進行フラグ = True 次の移動速度 = My.歩行速度 /2 次の角度 = My.目標方向 + 90 Else 進行フラグ = False End if // 次の位置に進行できる場合 if (進行フラグ) Then My.Direction = 次の角度 Forward(次の移動速度) End if
// 目的地に到着した場合 if ((My.Y < 1) or (My.Y > (GetHeightSpaceOwn() - 1))) Then KillAgt(My) End if }
Function 移動可能判定(speed As Double, dir As Double) As Boolean { Dim backup_x As Double Dim backup_y As Double Dim backup_dir As Double Dim 移動先の周囲エージェントリスト As AgtSet Dim 移動可能フラグ As Boolean backup_x = My.X backup_y = My.Y backup_dir = My.Direction 移動可能フラグ = True My.Direction = dir if (Forward(speed) > 0) Then 移動可能フラグ = False End if MakeOneAgtSetAroundOwn(移動先の周囲エージェントリスト, 0.6, Universe.Building.Person, False) if (CountAgtSet(移動先の周囲エージェントリスト) > 0) Then 移動可能フラグ = False End if My.X = backup_x My.Y = backup_y My.Direction = backup_dir return 移動可能フラグ }
Function 信号判定() As Boolean { Dim 周囲の信号リスト As AgtSet Dim 視野内の信号 As Agt Dim 進行可能フラグ As Boolean 進行可能フラグ = True if (CountAgtSet(周囲の信号リスト) > 0) Then 視野内の信号 = GetAgt(周囲の信号リスト, 0) if (視野内の信号.Color == COLOR_RED And 視野内の信号.対象エージェント色 == My.Color) Then 進行可能フラグ = False End if End if return 進行可能フラグ } 上記に壁のエージェント(障害物)のエージェントにぶつかる、またはよけるルールを足したいですが、どう足せばいいのかわからないので教えてください。
|
|
▼解決した回答
▼ 全ての回答
|
|