我试图按照与此视频相同的线条创建模拟(1:29 – 1:45)
https://www.youtube.com/watch?v=pqBSNAOsMDc
我认为实现无限循环进程的一种简单方法是让乌龟面向0,0,然后寻找半径为90的空补丁(所以它们总是向右看.
我收到了错误代码..
‘没有标题从点(3,-6)到同一点定义. “
有人可以用我的代码指出我正确的方向吗?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
turtles-own [ faction ]
to setup
clear-all
ask patches [ set pcolor white ]
set-patch-size 7
resize-world min-pxcor max-pxcor min-pycor max-pycor
ask patch 0 0
[ ask patches in-radius ( max-pxcor * .6) with [ random-float 100 < density ]
[ sprout 1
[
set shape "circle"
assign-factions
set color faction-color
set size 1 ] ] ]
ask turtles-on patch 0 0 [ die ]
reset-ticks
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
to-report faction-color
report red + faction * 30
end
to assign-factions
let angle 360 / factions
foreach n-values factions [?] [
ask patch 0 0 [
sprout 1 [
set heading ? * angle
ask turtles in-cone max-pxcor angle [ set faction ? + 1 ]
die ] ] ]
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
to go
ask turtles
[ set heading (towards patch-at 0 0) ; adjusts heading to point to centre
let empty-patches neighbors with [not any? turtles-here]
if any? empty-patches in-radius 90
[ let target one-of empty-patches
face target
move-to target ]
]
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
最佳答案 在你的go程序中,你正在使用set heading(朝向patch-at 0 0),但是
patch-at
会给你相对于正在询问的乌龟的位置的补丁.因此,如果你要求补丁0 0你总是得到乌龟实际上的补丁.对自己的标题是不确定的,因此你得到的错误.
使用补丁0 0(使用绝对坐标)替换0 0处的补丁将解决您的问题的一半:您所问的乌龟仍然可能已经在补丁0 0处.在这种情况下,您将得到相同的错误像之前一样.
解决方案:使用面部补丁0 0替换设置标题(朝向补丁0 0).如果您要求面对您已经处于的位置,则face
原语不会崩溃.