2017-11-18 17 views
0

私は初心者です。私は既にプログラミングガイダンスの辞書をチェックしました。 私は2車線道路(道路1、道路2など)モデルを検討しています。 また、指定されたパッチ((10 0)と(20 2))で指定されたカメが10ティックで停止するモデルを検討しています。 しかし、道路ごとにxcorとycorの特定のパラメータを記述して指定する方法はわかりません(道路xcorとycorは道路1、xcorとycorは道路2)。 また、私はどのように設定速度の構文内でパラメータ "速度"を書いて制御するのか分かりません。 以下はサンプルの小型モデルです。合併を避けるために、このサンプルモデルには道路が1つしかありません。このサンプルモデルは失敗しており、カメはパッチ(10 0)で停止しません。 おそらくあなたの助言が必要です。ありがとうございました。Netlogo:世界中の特定のパッチで特定のダニのためにカメを止めるには?

globals [ count-tick ] 
turtles-own [ speed flag-A ] 

to setup 
    clear-all 
    resize-world 0 50 min-pycor max-pycor 
    ask patches [ setup-road ] 
    reset-ticks 
end 

to setup-road 
    if (pycor < 1) and (pycor > -1) [ set pcolor white ] 
end 

to create-car 
    crt 1 [ 
    set color blue 
    setxy min-pxcor 0 
    set heading 90 
    set speed 1 
    ] 
end 

これはモデルの本体です。

to go 

    if (count turtles-on patch 0 0 = 0) [ 
    create-car 
    ask (turtles-on patch 0 0) [ 
     set flag-A FALSE 
    ] 
    ] 

    ask (turtles-on patch 10 0) [ 
    set flag-A TRUE 
    set count-tick 10 
    ] 

    if count-tick > 0 [ 
    set count-tick count-tick - 1 
    ask (turtles-on patch 10 0) with [flag-A = TRUE] 
    [ 
     set color red 
     set speed 0 
    ] 
    ] 

    if count-tick = 0 [ 
    ask (turtles-on patch 10 0) with [flag-A = TRUE] 
     [ 
     set speed 1 
     set flag-A FALSE 
    ] 
    ] 

    if (count turtles-on patch max-pxcor 0 > 0) [ 
    ask min-one-of turtles [who][ 
     die 
    ] 
    ] 

    set-speed 
    tick 
end 

速度を制御するパラレル更新です。

to set-speed 
    ask turtles with [ xcor < 10 ] [ 
    let turtle-ahead one-of turtles-on patch-ahead 1 
    ifelse turtle-ahead = nobody 
     [ set speed 1 
     fd speed 
    ] 
    [ set speed 0 
    ] 
    ] 
    ask turtles with [ 10 < max-pxcor ] [ 
    let turtle-ahead one-of turtles-on patch-ahead 1 
    ifelse turtle-ahead = nobody 
     [ set speed 1 
     fd speed 
    ] 
    [ set speed 0 
    ] 
    ] 
end 

答えて

3

大体、原則として、1つの要素を一度にモデルに追加してください。その要素をテストし、すべてが機能したら次の要素だけを追加します。あなたのケースでは、車を動かすか、10ティックでそれらを一時停止させるか、道路の終わりに死ぬか、スピードで不明なことをするなど、何もしないでいくつかのことをしようとしています。すぐに気付かない。

ここでもいくつかの概念上の問題があります。最大のものは、タートル変数ですが、if count-tick...ask turtlesブロック内にあるはずですので、それをグローバル変数として扱っています。このように考えると、10台の車を作成した場合、変数count-tickのコピーが10個あるので、ifステートメントでチェックしています。

また、あなたのカメに移動するように指示していませんが、表示されていないコードに記載されている可能性があります。できるだけ多くのコードを保存しておけば、これは私があなたがやろうとしていると思います。これは、左に車を作成し、右に移動し、10ティックのために正しい場所で停止し、赤に変えてから、もう一度移動し、最後に移動すると殺す。

globals [ count-tick ] 
turtles-own [ speed flag-A ] 

to setup 
    clear-all 
    resize-world 0 50 min-pycor max-pycor 
    ask patches [ setup-road ] 
    reset-ticks 
end 

to setup-road 
    if (pycor < 1) and (pycor > -1) [ set pcolor white ] 
end 

to create-car 
    crt 1 [ 
    set color blue 
    setxy min-pxcor 0 
    set heading 90 
    set speed 1 
    set flag-A FALSE 
    ] 
end 

to go 

    if (count turtles-on patch 0 0 = 0) [ 
    create-car 
    ] 

    ask (turtles-on patch 10 0) [ 
    set flag-A TRUE 
    set count-tick 10 
    ] 

    ask (turtles-on patch 10 0) with [flag-A = TRUE] [ 
    set color red 
    set speed 0 
    set count-tick count-tick - 1 

    if count-tick = 0 [ 
     set speed 1 
     set flag-A FALSE 
    ] 
    ] 

    if (count turtles-on patch max-pxcor 0 > 0) [ 
    ask min-one-of turtles-on patch max-pxcor 0 [who][ 
     die 
    ] 
    ] 

    ask turtles [ forward speed ] 

    tick 
end 
+0

ご質問ありがとうございました。それは大きな助けになりました。もう一度ありがとうございます。 – goodgest

+1

Jenのアドバイスは、一度に1つしかコード化するのではないことは間違いありません。非常に小さな作業プログラムから始め、一度に1つのものだけを追加して、先に進む前に作業してください。 –

関連する問題