繁体   English   中英

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

[英]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模型并将其复制,那么您可以看到它正常工作。 您需要在界面中添加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中发生的所有事情的指令,然后使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM