首页 文章

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

提问于
浏览
1

如果有人请给一些时间 .

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

我尝试了下面的方法,但没有工作,他们简单的通过形成这些补丁1)问龟听到 - 谣言?和时间听到> 1 [如果[pcolor]的补丁提前1 =蓝色[设置 Headers [ Headers ]的自我 - 180]
如果[pcolor]的补丁提前1 =黑色[设定 Headers [ Headers ]的自我 - 180]]

2)设置边界墙[set pcolor black]和building-wall [set pcolor blue]的补丁,然后设置补丁变量boundary-wall?和建筑墙?这些补丁是真的 . 进一步询问乌龟是否听说过 - 谣言?和时间听到> 1 [如果边界墙?还是建筑墙? [设定 Headers [ Headers ]自我 - 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 回答

  • 2

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

    顺便说一句, [heading] of selfheading 相同,而转向它更自然地说 rt 180 .

    EDIT (in response to comment):

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

    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
    

相关问题