使用补丁颜色和while循环命令netlogo中的乌龟移动

时间:2015-07-24 03:07:42

标签: wait patch netlogo turtle-graphics continue

我对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。"

任何人都可以帮助我吗?

3 个答案:

答案 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模型并将其复制,那么您可以看到它正常工作。您需要在界面中添加setupgo按钮,或者您可以在命令中心键入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