Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Netlogo 如果前方有障碍物,则无法使非静止的海龟改变方向_Netlogo - Fatal编程技术网

Netlogo 如果前方有障碍物,则无法使非静止的海龟改变方向

Netlogo 如果前方有障碍物,则无法使非静止的海龟改变方向,netlogo,Netlogo,如果有,请给点时间 我有一个区域(比如说一个殖民地),边界墙是黑色的斑块,在边界内的某个点上有一栋建筑,建筑墙是蓝色的斑块。人(品种)通常在边界和建筑物内移动。他们也在进出边界。由于某种原因(假设谣言),在某种情况下(如果超过15人听到谣言),他们开始随机移动标题0、90、180和270。所以,我无法解决的问题是,对随机移动的海龟(人)进行检查,如果它们感觉到前方的边界或墙壁,就改变它们的方向或返回 我尝试了以下方法,但不起作用,它们是这些补丁的简单通道 1) 问海龟们是否听到谣言?听到的次数>

如果有,请给点时间

我有一个区域(比如说一个殖民地),边界墙是黑色的斑块,在边界内的某个点上有一栋建筑,建筑墙是蓝色的斑块。人(品种)通常在边界和建筑物内移动。他们也在进出边界。由于某种原因(假设谣言),在某种情况下(如果超过15人听到谣言),他们开始随机移动标题0、90、180和270。所以,我无法解决的问题是,对随机移动的海龟(人)进行检查,如果它们感觉到前方的边界或墙壁,就改变它们的方向或返回

我尝试了以下方法,但不起作用,它们是这些补丁的简单通道 1) 问海龟们是否听到谣言?听到的次数>1[ 如果前面补丁的[pcolor]为蓝色[set heading[heading]of self-180]
如果前面补丁的[pcolor]为黑色[set heading[heading]of self-180]]

2) 使用边界墙[设置颜色黑色]和建筑墙[设置颜色蓝色]设置面片,然后设置面片变量边界墙?还有建筑墙?在这些补丁上是正确的。海龟们进一步问道 如果听到谣言?听到的次数>1[ 如果是边界墙?还是建筑墙?[设置self-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

我不知道我做错了什么。但我肯定没有用正确的方法。任何帮助都是非常感谢的。

您从
fd speed
开始,这样您的
人员就可以直接通过该命令上的障碍,而无需测试障碍。请注意,即使在此之前先测试1个补丁,如果
速度可以大于1,您仍然可以直接通过屏障。此外,在一个角落里,
的前面和后面可能都有障碍物,因此倒车也可能是一个问题

顺便说一句,self
[heading]与
heading
相同,要想扭转局面,说
rt180
更自然

编辑(回应评论):

下面是一个简单的循序渐进的例子,一路上检查:

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

你好,艾伦,谢谢。。。。你的意思是,在实现了我想向海龟们提出的要求之后,应该始终使用fd速度……如果你想
fd速度
,那么可能会有障碍。你需要先检查一下路上是否有障碍物。因此,您不能只测试
提前补丁1
;您需要检查所有插入的修补程序。一种策略是一次前进一步,每次检查
前方补丁1
,如果是障碍,则停止。但即使这样,也会让一个人“跑过”障碍物的一角。很抱歉,我没有让你“每次向前走一步,检查前面的补丁并停下来”。你能举例说明吗。谢谢