我有两个海龟品种,它们在窗户的两边填充,然后只在自己的一侧移动。
我遇到的问题是我想不断检查每个品种的乌龟的一个单一实例是否都在同一个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
答案 0 :(得分:1)
注意&#34;相同的坐标&#34;实际上有点含糊不清。如果一只海龟ycor
为5.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
内容是这里最令人困惑的部分,因此我建议您阅读这些文档。