Netlogo 如何查看颜色识别信号灯?

Netlogo 如何查看颜色识别信号灯?,netlogo,Netlogo,布置有交通灯的交叉口。我希望当红灯和灯熄灭时,车停下来。这就是我应该使用的汽车算法可以识别灯的颜色 我使用了如下的灯光布局算法 to draw-stop-light ifelse stop-light = "north" [ ask patch -7 12 [set pcolor green ] ask patch 10 10 [ set pcolor red ] ask patch -10 -10 [ set pcolor red ]

布置有交通灯的交叉口。我希望当红灯和灯熄灭时,车停下来。这就是我应该使用的汽车算法可以识别灯的颜色

我使用了如下的灯光布局算法

to draw-stop-light

  ifelse stop-light = "north"
  [ 

      ask patch -7 12 [set pcolor green ]
      ask patch 10 10 [ set pcolor red ]
      ask patch -10 -10 [ set pcolor red ]
    ]
    [ 
      ask patch -7 12 [ set pcolor red ]
      ask patch 10 10 [ set pcolor green ]
      ask patch -10 -10 [ set pcolor green ]
    ]
end

这确实是一个比堆栈溢出更适合NetLogo用户组的问题,因为您要问的是如何编写定义不好的规范。例如,用户组可以为您指出类似的模型。堆栈溢出实际上是修复代码中的特定问题。然而,在问题被删除之前,这里有一些东西可以让你开始

将您希望发生的事情分解为非常小的步骤,然后对每个步骤进行编码。步骤如下:

if [pcolor] of patch-right-and-ahead 90 1 = red
  [ set speed 0 ]
  • 当汽车接近十字路口时,检查交通灯的颜色
  • 如果红灯亮,记得在十字路口停车
  • 如果需要,在十字路口停车
  • 如果在十字路口,等绿灯亮后再走

  • 不要试图把整件事都写下来。相反,一次只写一位,然后测试它是否工作。以下是第一位的一些近似代码:

    ask cars
    [ ifelse heading = 180 and ycor > 20 and ycor < 25 and not stop-flag
      [ if [ pcolor of patch -7 12 ] = red [ set stop-flag true ] ]
      [ ... (cars from other directions)
    ]
    ask cars
    [ forward speed
      if stop-flag and ... (on intersection patches)
      [ ... (move backwards to be outside the intersection)
        set stop-flag false
      ]
    ]
    
    询问汽车
    [如果其他航向=180且ycor>20且ycor<25且不停止标志
    [如果[pcolor of patch-7 12]=红色[设置停止标志为真]]
    [……(其他方向的汽车)
    ]
    问车
    [前进速度
    如果停止标志和…(在交叉点补片上)
    […(向后移动到交叉路口外)
    将停止标志设置为false
    ]
    ]
    
    右前方补丁(
    ())在这里可能很有用。可能类似于:

    if [pcolor] of patch-right-and-ahead 90 1 = red
      [ set speed 0 ]
    

    “一次写一点,然后测试它是否有效”——这是一个很好的建议。