2017-04-02 54 views
1

下午好,我試圖讓我的烏龜在一組4個藍色補丁之間移動。我可以讓他們獲得這些補丁,但之後他們只是呆在那裏,我需要的是他們不斷移動(按順序)到他們右邊的下一個藍色補丁。我不知道該怎麼做。烏龜在一個模式中移動(Netlogo)

這是代碼的部分我談論:

to move-turtles 

    ask turtles 
     [while [[pcolor] of patch-here != blue] 
     [ 
      face min-one-of patches with [pcolor = blue ] [ distance myself ] 
      forward 1 
     ] 
     ] 
    tick 
    end 

通過提前,謝謝!

回答

1

你是對的 - 與while循環你的海龜將卡在他們來到的第一個藍色補丁,因爲如果他們踩到鄰近的補丁,他們會立即想要移回到最接近的藍色補丁(一他們剛剛離開)。此外,while循環中發生的所有事情都發生在單個tick中 - 如果您只希望它們移動到最近的藍色補丁作爲您的設置的一部分,請使用move-to。如果他們移動到最接近的藍色補丁對您很重要,則可能在此使用if聲明而不是while

此外,您正在描述兩種不同的「運動模式」。首先,你希望海龜移動到你想讓他們遵循的電路。然後,如果他們在該電路中,則希望他們按照有序路徑在電路中尋找下一個藍色補丁,然後移動到該補丁。因此,建立兩個獨立的程序並在適當的時間打電話可能會更容易。如果海龜知道他們下一步應該去哪裏(當前目標)以及他們應該執行哪種移動模式,這可能也會有所幫助。所以,你可以建立turtles-own變量,如:

turtles-own [ 
    on-circuit? 
    my-target 
] 

請務必設置這些變量在你的設置,使它們不是不確定變量的缺省「0」:

to setup 
    ca 
    reset-ticks 
    ask (patch-set patch 5 5 patch 5 -5 patch -5 5 patch -5 -5) [ 
    set pcolor blue 
    ] 

    crt 1 [ 

    set on-circuit? false ;;; so a starting turtle knows which movement procedure to use 
    set my-target nobody  
    setxy random 30 - 15 random 30 - 15  
    pd 
    ] 

end 

然後,你可以運行你的go程序,使得如果他們的「電路?」,海龜會嘗試進入電路。是假的,如果他們的「在線?」他們會走路?是真的。

to go 

    ask turtles [ 
    ifelse on-circuit? = false [ ;;; do this if turtle is not yet on the circuit 
     get-to-circuit 
    ] 
    [ ;;; do this if the turtle has been designated as on the circuit 
     walk-circuit 
    ] 
    ] 
    tick 

end 

現在你讓你的get-to-circuitwalk-circuit程序。我會告訴你我是如何設置我的get-to-circuit,而是看你能不能找出walk-circuit的休息:

to get-to-circuit 

    set my-target min-one-of other patches with [pcolor = blue ] [ distance myself ] 
    face my-target 
    fd 1 
    if distance my-target < 1 [ 
    move-to my-target 
    ;;; This lets the turtle know it can switch to "walk-circuit" on the next tick 
    set on-circuit? true 
    set heading one-of [ 0 90 180 270 ] 
    ] 
end 


to walk-circuit 
    if my-target = nobody [ 
    set my-target one-of (other patches with [ pcolor = blue ]) in-cone 10 180 
    ] 
? 
? 
? ... 
+0

它完美!謝謝! –