如果有人请给你一些时间。
我有一个区域(比如一个殖民地),边界墙为黑色斑块,在边界内的某个点上有一栋建筑物墙体为蓝色斑块。人(品种)通常在边界和建筑物内移动。他们也进入和离开边界。由于某种原因(假设谣言)和一定条件(如果超过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
我不知道我在做什么错。但我当然没有采用正确的方法。任何帮助都非常感谢。
答案 0 :(得分:2)
您从fd speed
开始,这样您的people
就可以直接通过该命令的障碍,而无需测试屏障。请注意,即使您在此之前要测试1个补丁,如果speed
可能大于1,您仍然可以直接通过障碍。此外,在一个角落里person
可能在它前面和后面都有一个障碍,所以逆转过程也可能是一个问题。
顺便说一下,[heading] of self
与heading
相同,转而言论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