如果前方有一个障碍,则无法使非固定龟改变方向

时间:2015-08-04 07:36:34

标签: netlogo

如果有人请给你一些时间。

我有一个区域(比如一个殖民地),边界墙为黑色斑块,在边界内的某个点上有一栋建筑物墙体为蓝色斑块。人(品种)通常在边界和建筑物内移动。他们也进入和离开边界。由于某种原因(假设谣言)和一定条件(如果超过15人听到谣言),他们开始随机移动任何标题0,90,180和270.所以,我无法解决的问题是,申请检查海龟(人)随机移动以改变他们的方向,或者如果他们感觉到边界或向前方贴墙,则返回。

我尝试了以下方法,但没有工作,他们简单的传递形成这些补丁 1)被问到乌龟是否有传闻?和时间听到> 1 [[       如果前贴片1的[pcolor] =蓝色[设置自我的标题[标题] - 180]       如果前贴片1的[pcolor] =黑色[自我设定标题[标题] - 180]]

2)设置边界墙[set pcolor black]和building-wall [set pcolor blue]的补丁,然后设置补丁变量boundary-wall?和建筑墙?这些补丁都是如此。进一步问龟     如果听到 - 谣言?和时间听到> 1 [[         如果边界墙?还是建筑墙? [设定标题[标题]自我 - 180]]

程序顺序是

to go
    ask people [ ;breed
    fd speed
    spread-rumor
    people-wander ]
end

所以在传播谣言功能之后,

 to people-wander
    if heard-rumor? and times-heard > 1 and inside-boundary?
    [ 
        if people-heard-rumor > 10 [ set heading one-of (list 0 90 180 270)     ]  ];random 360 
      ;people-heard-rumor is a count how many have received rumor

        if heard-rumor? or fear-worst? [
         ; if [pcolor] of patch-ahead 1 = blue [set heading [heading] of self - 180]]          
         ; if [pcolor] of patch-ahead 1 = black [set heading [heading] of self - 180]]

  boundary-wall? or temple-wall? [set i? true set heading [heading] of self - 180 show 5] ]

end

我不知道我在做什么错。但我当然没有采用正确的方法。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

您从fd speed开始,这样您的people就可以直接通过该命令的障碍,而无需测试屏障。请注意,即使您在此之前要测试1个补丁,如果speed可能大于1,您仍然可以直接通过障碍。此外,在一个角落里person可能在它前面和后面都有一个障碍,所以逆转过程也可能是一个问题。

顺便说一下,[heading] of selfheading相同,转而言论rt 180更为自然。

编辑(回应评论):

这是一个逐步移动的简单示例,沿途检查:

to fd-with-checks [#speed]
  repeat #speed [
    ifelse (isbarrier? patch-ahead 1) [
      stop
    ] [
      fd 1
    ]
  ]
end

to-report isbarrier? [#patch]
  report pcolor = blue or pcolor = black
end