我对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] patch-here!= red"突出显示)表示"虽然预期此输入为TRUE / False块,但改为TRUE / FALSE。"
任何人都可以帮助我吗?
答案 0 :(得分:3)
你只需要在while循环的条件下抛出[]
,如下所示:
while [[pcolor] of patch-here != red]
[
face min-one-of patches with [pcolor = red ] [ distance myself ]
forward 1
]
另外,我不认为你的第二个while循环是正确的。首先,它只能运行一次(因为它只是stop
s)所以它也可能是if
。其次,你知道你只是第一个while循环,所以你知道补丁是红色的。因此,条件总是如此。
答案 1 :(得分:1)
这是一个允许同时移动的最小但完整的示例(根据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
命令(在结尾处)来提前计时。这对于理解如何思考NetLogo的工作方式至关重要,我建议您查看模型库中的一些示例。
向最近的红色补丁移动的实际代码是布莱恩给你的。
答案 2 :(得分:0)
整个代码有while条件(对于虚拟用户,因为我;)
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