NetLogo检查海龟是否在相同的坐标上

时间:2014-04-17 22:24:11

标签: netlogo turtle-graphics coordinate

我有两个海龟品种,它们在窗户的两边填充,然后只在自己的一侧移动。

我遇到的问题是我想不断检查每个品种的乌龟的一个单一实例是否都在同一个y坐标上。如果这返回true,我希望这两只海龟都停下来,但是对于每个品种的所有其他海龟都要继续移动。我知道你可以通过唯一的ID来识别乌龟,但我不知道如何使用它以及如何使用正确的语法。

在伪代码中描述这个的最好方法是

ask turtles [
    if breed1 turtle ycor = breed2 turtle ycor
        [ stop breed1 turtle and breed2 turtle ] ]

更新 尝试让代码工作,但仍然没有发生任何事情。不确定是编写过程的方式还是我为阈值选择的编号。

to move-turtles
 ask turtles [
if not any? turtles with [ breed != [ breed ] of myself and abs (ycor - [ycor] of myself) < 1 ]
[
ask redteam with [pcolor = green - 3] [
right random 360
forward 1
]
ask redteam with [pcolor != green - 3] [ 
back 1
]
ask blueteam with [pcolor = green - 2] [
right random 360
forward 1
]
ask blueteam with [pcolor != green - 2] [ 
back 1
]]
]
end

1 个答案:

答案 0 :(得分:1)

注意&#34;相同的坐标&#34;实际上有点含糊不清。如果一只海龟ycor5.0000001而其他海龟为5.0000000,它们是否处于同一坐标?因此,您应该检查它们的坐标是否在彼此的一定量内。

此外,停止移动的最佳方法是不移动。因此,这里有一个可能会执行您想要的go过程:

to go
  ask turtles [
    if not any? turtles with [ breed != [ breed ] of myself and abs (ycor - [ ycor ] of myself) < threshold ] [
      move ;; replace with your move procedure or code
    ]
  ]
end

在这里,每只乌龟检查是否有任何不同品种的海龟ycor在他们自己threshold的{​​{1}}范围内。如果没有,则移动。否则,它什么都不做。

myself内容是这里最令人困惑的部分,因此我建议您阅读这些文档。