当他们互相碰触时,我似乎无法让乌龟死去。我只能在同一个补丁上杀死它们。 有这样的功能吗?
to killturtles
if contact?
[die]
end
答案 0 :(得分:2)
没有,但假设你的乌龟是圆的或圆的
ask other turtles in-radius (size / 2) [die]
是一个很好的近似值。
答案 1 :(得分:1)
如果“触摸”意味着乌龟图标重叠,您可能需要类似King-Ink建议的方法(但可能会出现如下所述的复杂情况)。如果“触摸”意味着“在下一个补丁上”,那么您可以使用neighbors
和neighbors4
以及turtles-here
,但您使用它的方式取决于您想要做什么。这是一个例子。这个命令
ask turtles [ask neighbors4 [ask turtles-here [die]]]
将确保没有乌龟在它旁边或它上面或下面有另一只乌龟。如果您将neighbors4
替换为neighbors
,那么对角线旁边也不会有任何海龟。 neighbors4
和neighbors
获取与龟打开的补丁相邻的补丁,turtles-here
列出补丁上的乌龟。所以整条线路逐一到达每只乌龟,并检查相邻斑块中是否有海龟。如果是这样,那些海龟就会被杀死,但是第一只乌龟还活着。
但是,你也可能想杀死第一只乌龟。不过,这就是我想知道的。例如,假设三只相邻斑块[T1] [T2] [T3]上有三只乌龟。 T1紧邻T2,T2紧邻T3。你想杀死这三个人吗?如果是这样,那需要一些照顾。假设您的代码使用ask
或循环遍历每只乌龟。您的代码发现T1和T2彼此相邻,并将其杀死。在下一步中,当您的代码找到T3时,它旁边不再有乌龟,因此它不会被杀死。那是你要的吗?如果是这样,那并不难。
但是,如果你想要杀死另一只乌龟旁边的每只乌龟,那么我认为你可能必须给每只乌龟一个变量,比如ready-to-die?
。当您发现彼此相邻的海龟时,请将ready-to-die?
变量设置为true
。然后,在第二步中,杀死ready-to-die?
等于true
的海龟:
turtles-own [ready-to-die?]
to setup
<make some turtles>
ask turtles [set ready-to-die? false]
; don't forget to initialize ready-to-die? in new turtles created later
end
to go
<do things with turtles>
ask turtles [ask neighbors4 [ask turtles-here [set ready-to-die? true]]]
ask turtles with [ready-to-die?] [die]
<do other things>
end
每只乌龟都被它所拥有的任何相邻的海龟告知,它已准备好死亡。但它仍然活着,所以其他海龟会知道它是邻居。然后,所有与邻居的乌龟都知道他们已经准备好死了,他们就被要求死了。
还有其他方法可以使用嵌入的ask
来编写零件。有些可能会更好,但此代码说明了您可以使用的工具。