鉴于您的海龟已排序,使用它们的who 会起作用。另外,如果你想保留圆形布局,你应该让海龟沿着半径移动,而不是根据世界坐标移动(如果你不想要随机效果,一定要去掉random)。
在我们继续之前,一个重大的警告:你会经常读到使用代理的who 是不好的 NetLogo 编码实践(我自己仍然需要确切地了解为什么这是危险的)。
考虑到您的海龟在布局中进行了排序并假设此段落仅在设置时发生,我认为在您的情况下使用 who 是足够安全的 - 但是,我还包括一种不使用 who 的方法,它在未分类的海龟的情况下也需要。
在这两种情况下,结果都是这样的:
(请注意,只有在创建偶数个海龟时才能实现完美的锯齿形)
使用who 接近
to setup
clear-turtles
create-turtles 100
layout-circle (sort turtles) max-pxcor - 1
ask turtles [
ifelse (who mod 2 = 0)
[forward 0.5]
[forward -0.5]
]
end
通过这样做,每只偶数乌龟都会向前移动一点,每只奇数乌龟都会向后移动相同的量。
没有who 的方法
这必须更详细。
我们利用了这样一个事实,如果我们让乌龟从圆形布局中交替向前和向后移动(由ifelse (counter mod 2 = 0) [] [] 实现),那么离最后一个移动的乌龟最近的乌龟(移动的乌龟是reference-turtle in代码)将是圆周上下一个尚未移动的乌龟。
在每次while 迭代结束时,当前reference-turtle 将要求最近的海龟成为新的reference-turtle。
为了使这一切正常工作,我们可以使用counter 作为while 循环的停止条件和海龟知道是向前还是向后移动的条件
to setup
clear-turtles
create-turtles 100
layout-circle turtles max-pxcor - 1
let counter 0
let reference-turtle one-of turtles
while [counter < count turtles] [
ask reference-turtle [
ifelse (counter mod 2 = 0)
[forward 0.5]
[forward -0.5]
ask min-one-of other turtles [distance myself] [
set reference-turtle self
]
]
set counter counter + 1
]
end