複雑系コンサルティング
信号を青、赤に変化させることが出来たのですが車両と信号の変化に対応させることができていません。赤信号の時、停止させるためにはどうすればいいでしょうか?
止まる処理が進まない処理であるのなら、そこに書いてある処理を進行()とするなら、
if 信号.is青 then
進行()
end if
でいいかと思います
@la mano すいません、作成しているのですがよくわからないためもう少し噛み砕いて教えていただけないでしょうか。
@EGOIST
まず、信号が今何色なのかが分かってる必要があります。例えば青ならTrue赤ならFalseを指すようなBoolean変数でもいいですし、出力に用いたRGB()が入っているInteger変数でも構いません。以降はis青というBoolean変数として説明します。
今Agt_Step{}に書かれている内容は進む時の処理です。より具体的に言えば、進む時の処理はforward()のみで残りは曲がる処理です。曲がる処理は一度だけ行われる必要があり、進む処理は目の前の信号が赤ではなくかつ進行先で車とぶつからない時(これは先の質問の内容になります)のみ処理され続けます。
このような場合はそれぞれの処理を別の関数に纏めることをお勧めします。今の書き方だと煩雑です。
sub 進む(){ forward(1) } sub 曲がる(){ dim 割合 as integer 割合 = rnd() * 10 if 割合 < 3 then turn(-90) elseif 割合 >7 then turn(90) end if }
信号を見つける処理ですが、例えば直前に通過した信号から次の信号の番号を伝えられるなどの方法もありますが(事前に信号に隣接する信号を登録させておく)、恐らくMakeagtAroundOwn系の何かから、Getagt()などの方法でagtを抜き出すことになるかと思われますが、その場合目的外の信号を抜き出してしまったり何も取れない場合について考慮する必要があります。以下の例はそのような状況だとエラーが起きるはずです。
dim 信号 as agt dim 信号set as agtset if my.X == 20 and my.Y == 25 then 信号set = 何らかの見たい信号を見る処理() if countagtset(信号set) == 1 then //こうでない場合は信号を探す処理の見直しが必要 信号 = getagtset(信号, 0) end if if 信号.is青 then 進む() 曲がる() end if else 進む() end if
また、コードを示す際は画面を撮影したものではなく、テキストデータか、せめてスクリーンショットでお願いします。
止まる処理が進まない処理であるのなら、そこに書いてある処理を進行()とするなら、
if 信号.is青 then
進行()
end if
でいいかと思います