远离2D网格中的对象

时间:2012-01-22 19:31:36

标签: python dijkstra path-finding a-star

我正在用python开发一个小游戏。我正在使用2D矩形网格。我知道,对于寻路我可以使用A *和喜欢,我知道这是如何工作的,但我遇到的问题有点不同。

假设我们有一个计算机控制的人类和一些计算机控制的僵尸。当人类看到一个僵尸时,它应该尽可能地远离这个。此刻,为了测试一切,我只需转动180°并逃跑,直到我发现另一个僵尸并重复。

显然这不是很聪明(如果双方都有僵尸,可能会导致问题)。

我想知道是否有更聪明的方法来做到这一点?有点像使用Dijkstra找到一个我可以跑到的“安全区”吗?总是欢迎替代品,我似乎无法弄明白。

2 个答案:

答案 0 :(得分:1)

你可以假设僵尸可以看到特定范围内的所有东西(半径或者更聪明)然后让人类寻找他认为僵尸看不到的地方。选择僵尸无法看到的最近点,并使用A *算法查找路径(如果存在),否则尝试不同的路径。注意什么时候无处可逃。或者,如果您选择该位置,您可以根据您与僵尸之间的距离为您的可见区域中的所有斑点加权。

答案 1 :(得分:0)

就在我的脑海中,你可能会做一些矢量数学,让人类在僵尸的法线向量中运行。

我不知道这会有多好(或者它会如何扩展到你拥有的僵尸数量),但你可以这样做:

  • 对于每个僵尸,计算与人类的距离及其与人类的距离。

  • 使用距离的方向和倒数为每个僵尸(或关闭僵尸的某个子集)创建一个向量,因为僵尸离越近它就越重要。

  • 找出所有向量的总和。

  • 让人类在你的结果的法线向量中运行。

我不确定这会占用多少资源,但这似乎是确定运行位置优先顺序的最合理方式。