我正在尝试将某种形式的AI应用到我的Net Logo游戏中。
我正计划计算曼哈顿从僵尸乌龟到人类乌龟的距离。
到目前为止,我已经成功地计算了两者之间的曼哈顿距离,并绘制了路径,还将僵尸代理沿着计算出的路径向人类乌龟移动。
我现在面临的问题是人工代理的位置将由用户控制。曼哈顿距离使用while循环,在到达人类代理之前不会中断循环。我希望僵尸代理向人类代理移动一步,然后让人类代理移动。
到目前为止的代码Net Logo Game
发布于 2012-12-15 01:59:50
我不确定您在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]表达式所做的事情:它通过比较方向列表与当前标题的绝对差异来对方向列表进行排序。这个排序列表的第一项将是具有最小差异的项,因此是僵尸需要使用的项。
在目前的实现中,人类只是试图离开僵尸,但你可以很容易地将其替换为玩家控制代码。
https://stackoverflow.com/questions/13869599
复制相似问题