質問 (解決済み)[artisocモデル] ダイクストラ法の新しい経路の追加について | |
質問者: ymktkdさん , 質問日時: 2021/01/15 18:04 |
ある条件下で目的地を変更し、ダイクストラ法で新しい経路を取得してエージェントを進ませたいです。
レシピブック03を参考にし以下のように記述しましたが、目的地が変更されません。 (My.State=0 → My.State=1 → My.State=3 → My.State=0 の場合)
修正方法を教えて頂けないでしょうか。
[以下関連部分の記述コード]
Agt_Init{
Dim PointList As AgtSet
MakeAgtset(PointList,Universe.Map.Point) My.target=GetAgt(PointList,63) My.RouteArray=@dijkstra(my.ID,CStr(My.target.ID))
My.State=0
}
Agt_Step{
Dim targetPointAgt As Agt Dim distance As Double Dim getsign1 As Agtset Dim sign1 As Integer Dim PointList As AgtSet
MakeAgtset(PointList,Universe.Map.Point)
If My.State==0 Then //移動中 If My.RouteCount < CountToken(My.RouteArray) Then // 経路に沿って進む targetPointAgt=Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount))) distance = Pursue(targetPointAgt, 1) If distance > 0 Then // Pointに到着したとき My.RouteCount = My.RouteCount + 1 If CountToken(My.RouteArray) > My.RouteCount Then // 余剰分、次のPointへ向かう targetPointAgt = Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount))) Pursue(targetPointAgt, distance) End If MakeOneAgtSetAroundOwn(getsign1,1,Universe.Map.Signage1,False) sign1=CountAgtSet(getsign1) If sign1>0 Then My.State=1 End If End If Else My.State=2 End If End If
If My.State==1 Then If My.RouteCount < CountToken(My.RouteArray) Then // 経路に沿って進む targetPointAgt = Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount))) distance = Pursue(targetPointAgt, 1) If distance > 0 Then // Pointに到着したとき My.RouteCount = My.RouteCount + 1 If CountToken(My.RouteArray) > My.RouteCount Then // 余剰分、次のPointへ向かう targetPointAgt = Universe.Map.Point(CInt(GetToken(My.RouteArray, My.RouteCount))) Pursue(targetPointAgt, distance) End If End If Else My.State=3 End If End If
If My.State==2 Then //次目的地なし観光中 //省略 End If
If My.State==3 Then //次目的地あり観光中 My.StopCount=My.StopCount+1 If My.StopCount>20 Then //観光終了 My.target=GetAgt(PointList,70) My.RouteArray=@dijkstra(my.ID,CStr(My.target.ID)) My.State=0 End If End If
|
|
▼解決した回答
▼ 全ての回答
|
|