1

您好,我会尽量快点,我有一个房间,火势扩大了,我有两个出口,我想做的就是对特工说,如果一扇门被火堵住了,那就去另一个门。我想出了这样的东西,但没有结果。

to doorblock
show count neighbors with [pcolor = 77] ;; the patch color of the two doors
end

;;to go 

  ask smarts [    ;;smarts are the agents inside the room that need to get oout
    if [ doorblock > 5 ]    
   [ set target one-of sexits]]  ;;sexits is the other door

有人有更好的主意吗?谢谢

4

1 回答 1

3

好的,所以如果我理解正确,您希望您的特工查看他们当前目标的门,检查该门周围是否有超过 5 个消防特工,如果是,请选择另一个目标门。

如果你的灭火剂只是红海龟(没有特定品种),你可能想要这样的东西:

ask smarts [
  if count ([ turtles-on neighbors ] of target) with [ color = red ] > 5 [
    if-else ([ breed ] of target = sexits )
      [ set target one-of nexits ]
      [ set target one-of sexits ]
  ]
]

这里的关键原语是:

  • neighbors,这会给你乌龟周围的补丁(target这种情况下,周围的补丁)
  • turtles-on,这将为您提供补丁集成员上的海龟(这里,这将是属于 的补丁上的neighbors海龟target
  • 最后,with允许您仅从代理集中获取满足某些条件的海龟(这里,我们使用它仅获取代表火的红色海龟)。

您还应该尝试理解of原语。

而且我猜你想分配一个与前一个不同品种的新目标(如果是北,如果是南,如果是南,那么北),但这取决于你。

于 2013-04-17T02:20:12.630 回答