2017-11-18 211 views
0

我是初學者。我已經檢查過編程指導字典。 我正在考慮雙車道道路(例如道路1,道路2)模型。 而且我正在考慮一個模型,其中由指定的補丁((10 0)和(20 2))指定的龜停止10次滴答。 但是,我不知道如何爲每條道路編寫和指定xcor和ycor的具體參數(例如道路1上的xcor和ycor,道路2上的xcor和ycor)。 而且我也不知道如何在設置速度語法內編寫和控制參數「速度」。 以下是示例小型模型。爲了避免併發症,這個樣本模型只有一條道路。此示例模型失敗,龜不會停在修補程序(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

好的,作爲一般規則,一次添加一個元素到你的模型。測試該元素,然後只有在一切正常時才添加下一個元素。在你的情況下,你正在嘗試做幾件事情,而沒有任何工作 - 移動汽車,把它們停留10次,讓它們中的一個死在路的盡頭,用他們的速度做未指定的事情,可能還有其他事情我沒做過馬上注意。

這裏還有幾個概念問題 - 最大的是count-tick是一個龜變量,但是您將它視爲全局變量,因爲if count-tick...應位於ask turtles塊內。這樣想一下,如果您創建了10輛汽車,則有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

絕對同意仁的建議,一次只編碼的東西。從一個非常小的工作程序開始,並且一次只添加一件事,然後再繼續工作。 –

相關問題