netlogo中是否有else命令?

时间:2014-06-14 15:35:35

标签: netlogo

我正在尝试在netlogo中创建一个程序,屏幕上有块,当他们的y-coordinate达到某个值时,他们会反转他们的方向并以相反的方式移动。

到目前为止,我能够让它们向一个方向移动,然后在它们达到临界y-coordinate值时切换方向,但是一旦它们朝相反方向迈出一步,它就会出现故障,并且它们会卡住一步前进,后退一步。

我想知道netlogo中是否有else命令,所以我可以指定如果while命令没有完成,它可以反转它的方向并移动而不会出现故障。

这是我的代码。

to maze 
while [abs pycor < 16 ] [fd 1 wait .1]
bk 1 wait .1
end

1 个答案:

答案 0 :(得分:1)

NetLogo中没有单独的else关键字,但ifelse命令允许您指定两个块:一个在条件为真时执行,另一个(&#34; else& #34;阻止)如果条件为假则执行。

然而,似乎你应该重新考虑你对这个问题的一般方法。 NetLogo中的海龟总是朝着一个特定的方向前进,你可以利用它:而不是让它们&#34;备份&#34;,你可以让它们转过来。

此外,尝试在while循环中执行操作通常是不明智的。如果您希望您的海龟重复行为,通常可以使用"forever button"

在以下示例中,您应该从永久按钮调用go过程:

to setup
  clear-all
  ask patches with [ pycor = max-pycor - 1 ] [
    sprout 1 [
      set heading 180 ; head down
    ]
  ]
  reset-ticks
end

to go
  ask turtles [
    if abs pycor = max-pycor [
      rt 180 ; turn around!
    ]
    fd 1
  ]
  tick
end

这可能并不能达到您想要的效果,但很有可能您可以根据自己的需要对其进行修改。

另请注意,使用tick-based updates可以更好地工作。