如何实现轻量级NetLogo的倒计时

问题描述 投票:0回答:1

如前所述,我目前正在尝试对此处发现的城镇和交通人群进行仿真,以支持自动驾驶AI汽车,可以在此处找到。

http://www.netlogoweb.org/launch#http://ccl.northwestern.edu/netlogo/community/Town%20-%20Traffic%20&%20Crowd%20simulation.nlogo

我目前遇到的问题是从红灯到黄灯再到绿灯有适当的过渡。

我有一个变量,用于存储每种光,称为下一种颜色;以及一个变量,用于存储经过的时间,称为倒计数。我理想的情况是,红灯显示10秒钟,黄灯显示3秒钟,绿灯显示另外10秒钟。这是我到目前为止的内容。

to change-color [lights ]

 ask lights [
    ifelse color = red [set color yellow set next-color yellow] [set color red set next-color red]]

end

to yellow-color [lights]
  ask lights[
    ifelse color = yellow [set color green set next-color green] [set color yellow set next-color yellow]]
end


to control-traffic-lights
  set count-down 100
  set count-down count-down - 1
  if ticks mod (10) = 0
  [change-color lightsR  change-color lightsL 
 change-color lightsU 
 change-color lightsD]
  if ticks > 10 and ticks mod(145) = 0  [yellow-color lightsR yellow-color 
  lightsL yellow-color lightsU
  yellow-color lightsD ]
end


我需要做一个新的程序,当倒数可以被红色和绿色分别除以10,然后将黄色分别除以3和3时,将颜色设置为下一个颜色吗?如何重置倒数计数的值?

任何帮助将不胜感激。

netlogo
1个回答
0
投票

您不希望所有灯都同时打开,颜色和时间可能会因每个灯而有所不同。这意味着您需要将它们设置为代理变量而不是全局变量。这是一个完整的模型,演示了如何使用计数器。确保您了解其工作原理,然后尝试并修改您的代码以使用相同的逻辑。

turtles-own
[ next-colour
  countdown
]

to setup
  clear-all
  create-turtles 5
  [ setxy random-xcor random-ycor
    set color green
    set next-colour orange + 3
    set countdown 10 + random 20
  ]
  reset-ticks
end

to go
  change-colour
end

to change-colour
  ask turtles
  [ set countdown countdown - 1
    if countdown = 0
    [ set color next-colour
      set next-colour red
      set countdown 5
    ]
  ]
end
© www.soinside.com 2019 - 2024. All rights reserved.