我正在Netlogo中制作一个模型,现在我尝试为刻度线制作一个循环。我实际上希望海龟在某些时间步行走到我指定的“森林”,然后在其他时间步之间“回家”。但是,出了点问题,我真的不知道如何解决这个问题。
我的代码:
to go-home
set mylist (list 120 240 360 480 600 720 840 960 1080 1200)
let mylist2 [240 360 480 600 720 840 960 1080 1200 1320]
ask turtles [if ticks > 80 and ticks <= 120 [facexy 0 35]]
ask turtles [if ticks > ((one-of mylist) + 80) and ticks <= (one-of mylist2) [
facexy 0 35]]
end
我也试过了循环函数和foreach函数,但对于两者来说,go函数只能工作一次,然后程序崩溃..(我想我做错了)
答案 0 :(得分:2)
你几乎肯定想要一个代码块,如:
to go-home
if ticks > 80 and ticks <= 120 [ ask turtles [ facexy 0 35 ] ]
end
以便ask
位于if
内(这意味着if
只会被测试一次而不是每次测试一次。)
然而,更常见的问题是如何使用列表。原始one-of
将从列表中随机选择一个项目。因此,您的代码可能会从mylist中选择720,从mylist2中选择480。看起来你想要每隔120 ticks
切换一次。如果这是正确的,那么您根本不需要列表,您只需使用mod
运算符,例如:
to go-home
ifelse ticks mod 240 < 120
[ ask turtles [ facexy 0 35 ] ]
[ ask turtles [ facexy 0 0 ] ]
end
这将使他们面对120个刻度的补丁0 35(如果需要,修改每个tick
的标题)然后面对补丁0 0接下来的120个滴答,然后0 35再次等等。