Wait 在netlogo中使用面片颜色和while循环命令海龟移动

Wait 在netlogo中使用面片颜色和while循环命令海龟移动,wait,patch,netlogo,turtle-graphics,continue,Wait,Patch,Netlogo,Turtle Graphics,Continue,我对netlogo非常陌生,所以这可能是一个非常基本的问题,但我被卡住了。我想使用while循环(因此命令在整个运行过程中不断出现)和补丁颜色来指示海龟将如何移动 如果海龟不在红色区域,我希望它继续向最近的红色区域移动 如果它在红色补丁上,我希望它留在补丁上 while [pcolor] of patch-here != red [ face min-one-of patches with [pcolor = red ] [ distance myself ]

我对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”),该错误表示“虽然预期此输入为真/假块,但得到的却是真/假块。”


有人能帮我吗?

您只需围绕while循环的条件抛出
[]
,如下所示:

 while [[pcolor] of patch-here != red]
     [
       face min-one-of patches with [pcolor = red ] [ distance myself ]
       forward 1
     ]

另外,我认为您的第二个while循环不正确。首先,它只能运行一次(因为它只是
stop
s)因此,如果它是一个
,那么它也可能是一个
。其次,你知道你只是第一个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的方式思考至关重要,我建议您看看模型库中的一些示例


向最近的红色补丁移动的实际代码是Bryan给你的。

有完整的代码和while条件(对于像我这样的虚拟用户;)


您可能还存在一些概念上的混淆。您声明您正在使用while循环,以便在整个运行过程中不断执行命令。while循环意味着NetLogo将运行这组命令,直到海龟进入红色补丁。如果您有多只海龟,并且在一个ask海龟中有这些海龟……那么一只海龟将移动一直到一个红色的补丁,然后是下一个。在NetLogo中,更典型的是使用滴答计数器,让每只海龟在每个滴答声中移动一次,所以它们都同时移动。如果你想同时移动,那么说出来,我们会回答。@JenB我确实有多只海龟,这是在一个询问海龟中,我正在尝试实现同步就像你说的那样!抛出括号起作用了,谢谢!我尝试在while循环中实现if语句,如果[p color]of patch here=red][stop],但它不能正常工作
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