Netlogo 如果前方有障碍物,则无法使非静止的海龟改变方向
如果有,请给点时间 我有一个区域(比如说一个殖民地),边界墙是黑色的斑块,在边界内的某个点上有一栋建筑,建筑墙是蓝色的斑块。人(品种)通常在边界和建筑物内移动。他们也在进出边界。由于某种原因(假设谣言),在某种情况下(如果超过15人听到谣言),他们开始随机移动标题0、90、180和270。所以,我无法解决的问题是,对随机移动的海龟(人)进行检查,如果它们感觉到前方的边界或墙壁,就改变它们的方向或返回 我尝试了以下方法,但不起作用,它们是这些补丁的简单通道 1) 问海龟们是否听到谣言?听到的次数>1[ 如果前面补丁的[pcolor]为蓝色[set heading[heading]of self-180]Netlogo 如果前方有障碍物,则无法使非静止的海龟改变方向,netlogo,Netlogo,如果有,请给点时间 我有一个区域(比如说一个殖民地),边界墙是黑色的斑块,在边界内的某个点上有一栋建筑,建筑墙是蓝色的斑块。人(品种)通常在边界和建筑物内移动。他们也在进出边界。由于某种原因(假设谣言),在某种情况下(如果超过15人听到谣言),他们开始随机移动标题0、90、180和270。所以,我无法解决的问题是,对随机移动的海龟(人)进行检查,如果它们感觉到前方的边界或墙壁,就改变它们的方向或返回 我尝试了以下方法,但不起作用,它们是这些补丁的简单通道 1) 问海龟们是否听到谣言?听到的次数>
如果前面补丁的[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
,如果是障碍,则停止。但即使这样,也会让一个人“跑过”障碍物的一角。很抱歉,我没有让你“每次向前走一步,检查前面的补丁并停下来”。你能举例说明吗。谢谢