[英]Using patch color and while loop to command turtle movement in netlogo
我对netlogo很新,所以这可能是一个非常基本的问题,但我被困住了。 我想使用while循环(所以命令在整个运行期间不断发生)和补丁颜色来决定乌龟将如何移动。
如果乌龟不在红色斑块上,我希望它继续向最近的红色斑块移动。
如果是红色补丁,我希望它留在补丁上
while [pcolor] of patch-here != red
[
face min-one-of patches with [pcolor = red ] [ distance myself ]
forward 1
]
while [pcolor] of patch-here = red
[
stop
]
当我运行它时,我得到一个错误(突出显示'[pcolor] of patch-here!= red“),表示”虽然预期此输入为TRUE / False块,但改为TRUE / FALSE“。
谁能帮我吗?
你只需要在while循环的条件下抛出[]
,如下所示:
while [[pcolor] of patch-here != red]
[
face min-one-of patches with [pcolor = red ] [ distance myself ]
forward 1
]
另外,我不认为你的第二个while循环是正确的。 首先,它只能运行一次(因为它只是stop
s)所以它也可能是一个if
。 其次,你知道你只是第一个while循环,所以你知道补丁是红色的。 因此,条件永远是真实的。
这是一个允许同时移动的最小但完整的示例(根据OP的评论中的要求)。 如果您创建一个新的NetLogo模型并将其复制,那么您可以看到它正常工作。 您需要在界面中添加setup
和go
按钮,或者您可以在命令中心键入setup(一次),然后键入go(多次)以使乌龟移动。
to setup
clear-all
ask n-of 20 patches [ set pcolor red ]
create-turtles 20 [ setxy random-xcor random-ycor ]
reset-ticks
end
to go
ask turtles with [ [pcolor] of patch-here != red ]
[ face min-one-of patches with [pcolor = red ] [ distance myself ]
forward 1
]
tick
end
这里的基本概念是每个tick
都是一个时间步长。 你的go
代码包含在同一个tick中发生的所有事情的指令,然后使用tick
命令(在结尾处)推进时钟。 这对于理解如何思考NetLogo的工作方式至关重要,我建议您查看模型库中的一些示例。
布莱恩给你的实际代码是向最近的红色补丁移动。
有条件的整个代码(对于虚拟用户,因为我;))
to setup
clear-all
ask n-of 20 patches [ set pcolor red ]
create-turtles 20 [ setxy random-xcor random-ycor ]
reset-ticks
end
to go
ask turtles
[while [[pcolor] of patch-here != red]
[
face min-one-of patches with [pcolor = red ] [ distance myself ]
forward 1
]
]
tick
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.