我正在尝试在我的Net Logo游戏中实现某种形式的AI。
我计划计算从僵尸龟到人类乌龟的曼哈顿距离。
到目前为止,我已经设法计算了两者之间的曼哈顿距离并绘制了路径,并将僵尸代理沿着计算出的路径移向人类龟。
我现在面临的问题是人员代理位置将由用户控制。曼哈顿距离使用while循环,并且在它到达人类代理之前不会突破循环。我希望僵尸代理向人类代理移动一步,然后让人工移动。
到目前为止的代码Net Logo Game
答案 0 :(得分:0)
我不确定您在plot-manhattan-distance
程序中尝试做什么。这似乎是一个复杂的方法,应该相对简单,但也许我误解了你的目的。以下是我将如何处理整个问题:
globals [
zombie
human
]
to setup
clear-all
ask n-of 2 patches [ sprout 1 ]
set human turtle 0
ask human [ set shape "person" ]
set zombie turtle 1
ask zombie [ pen-down ]
end
to go
ask human [ flee zombie ]
ask zombie [ pursue human ]
end
to pursue [ target ]
face target
set heading first sort-by [abs (?1 - heading) < abs (?2 - heading)] [0 90 180 270]
fd 1
end
to flee [ pursuer ]
face pursuer
rt 180
fd 0.5
end
肉是pursue
程序。由于僵尸无法预测人类的去向,所以它只是试图朝着大方向前进。它首先直接面对人类(使用方便的NetLogo face
原语)。但由于它可能只允许在四个主要方向中的一个方向移动,因此它必须选择最理想的方向,即:与其当前(理想)方向最不同的方向。这就是sort-by [abs (?1 - heading) < abs (?2 - heading)] [0 90 180 270]
表达式的作用:它通过比较它们与当前标题的绝对差异来对方向列表进行排序。这个排序列表的第一项将是差异最小的项目,因此是僵尸需要使用的项目。
在当前的实现中,人类只是试图远离僵尸,但你可以轻松地用玩家控制代码替换它。