我想要做一些非常簡單的事情,但由於某種原因,我只是無法讓它工作。防止NetLogo龜撞牆
我的設置功能創建了一個從(-20,20)到(20,20)的方形牆,並在牆內生成一個大小爲3的圓形龜。方形牆壁只是由藍色的補丁製成。
現在我有一個go功能,它告訴烏龜從-90度到90度的任何地方旋轉,並向前移動0.5步。不允許「走進」牆壁;當它撞擊牆壁時,它會簡單地選擇另一個方向移動。烏龜不能「感知」牆壁,直到它真正進入牆壁。
我一直在使用的代碼如下:
ask turtle 0 [
let invalid true
let turn-degree (random(180) - 90)
rt turn-degree
let next-patch patch-ahead 1 ;; Declare next-patch before moving
while [invalid] [ ;; While invalid condition
ask next-patch [
;; Neighbors of the next patch are counted, because turtle is size 3
if (count neighbors with [pcolor = blue] = 0) [
set invalid false
]
]
if (invalid) [
lt turn-degree ;; Turn the turtle back to the original direction
set turn-degree (random(180) - 90) ;; Randomize turn degree again
set next-patch patch-ahead 1 ;; Declare next-patch before moving again
]
]
;; Finally, jump 0.5 steps ahead in the chosen direction
jump 0.5
]
我很傷心地說,上面的代碼不起作用,因爲龜仍然以某種方式設法本身就帶有藍色的牆重疊,這不應該發生。我懷疑這是因爲兩個原因:
1)0.5步是擰「補丁提前」的條件。不過,我已經嘗試了patch-ahead 0.5而沒有任何效果。 2)隨機轉彎程度是導致藍色牆距離烏龜略高於0.5,但我沒有解決這個問題...
有什麼建議嗎?
什麼模式試圖實現?我正在處理與此非常相似的事情,但使用連續的力量模型。 –