我正在用python开发一个小游戏。我正在使用2D矩形网格。我知道,对于寻路我可以使用A *和喜欢,我知道这是如何工作的,但我遇到的问题有点不同。
假设我们有一个计算机控制的人类和一些计算机控制的僵尸。当人类看到一个僵尸时,它应该尽可能地远离这个。此刻,为了测试一切,我只需转动180°并逃跑,直到我发现另一个僵尸并重复。
显然这不是很聪明(如果双方都有僵尸,可能会导致问题)。
我想知道是否有更聪明的方法来做到这一点?有点像使用Dijkstra找到一个我可以跑到的“安全区”吗?总是欢迎替代品,我似乎无法弄明白。
答案 0 :(得分:1)
你可以假设僵尸可以看到特定范围内的所有东西(半径或者更聪明)然后让人类寻找他认为僵尸看不到的地方。选择僵尸无法看到的最近点,并使用A *算法查找路径(如果存在),否则尝试不同的路径。注意什么时候无处可逃。或者,如果您选择该位置,您可以根据您与僵尸之间的距离为您的可见区域中的所有斑点加权。
答案 1 :(得分:0)
就在我的脑海中,你可能会做一些矢量数学,让人类在僵尸的法线向量中运行。
我不知道这会有多好(或者它会如何扩展到你拥有的僵尸数量),但你可以这样做:
对于每个僵尸,计算与人类的距离及其与人类的距离。
使用距离的方向和倒数为每个僵尸(或关闭僵尸的某个子集)创建一个向量,因为僵尸离越近它就越重要。
找出所有向量的总和。
让人类在你的结果的法线向量中运行。
我不确定这会占用多少资源,但这似乎是确定运行位置优先顺序的最合理方式。