用于在2D网格游戏板上的移动攻击区域内寻找攻击目标的空间的算法

时间:2013-12-17 15:48:22

标签: algorithm map grid game-ai

我正在寻找一个算法名称或实现,它可以从我可以攻击给定目标的有效动作列表中为我提供有效位置。

我有一个2D平铺地图和一个可以移动一定数量的移动并在范围内攻击敌人的英雄。由于地图上的障碍物,英雄的移动区域会有所不同,并且可能会出现漏洞:

enter image description here

在这个问题中,我学会了how to combine this move area with attack area to get the total "threat" range我的英雄在游戏板上的表现。在这种情况下,2个敌人处于威胁范围内并可能受到攻击:

enter image description here

我正在寻找有关通用算法的名称或信息:

  • 威胁区域(黄色)
  • 有效动作(橙色)
  • 目标位置(绿色)

并且返回橙色区域内我可以攻击给定目标的所有细胞。因为敌人施加了自己的威胁区域,我不一定需要最接近的方块 - 我会检查可能的移动并挑选一个对我的英雄威胁最小的人来攻击。

2 个答案:

答案 0 :(得分:1)

您的HERO可到达的瓷砖已知。每个瓦片周围都是一个威胁区域,它就像一个(凸?)多边形(钻石?)然后敌人的位置可以被认为是另一个凸多边形(在这种情况下是一个正方形)。在一般情况下,你想测试这些多边形是否相交,是吗?

不幸的是,似乎这个普遍的问题是more difficult,而不是人们所希望的。

如果我们发现您的问题有一些特殊属性,我们可能会有更好的运气。如果你的HERO的威胁区域总是凸起的,那么你可以使用钻石的边界进行内部/外部测试(类似于CGAL的bounded_side_2测试)

如果您发现方法不够好,那么您可以做以下事情:为电路板预先生成一组“可攻击位置”;每个细胞都知道HERO可以攻击的其他细胞集。这是一个时空权衡,如果你没有大的内存限制或移动障碍,那么它应该可以很好地工作。

答案 1 :(得分:0)

以下是我认为问题可以解决的方法:

1)找到英雄的威胁(移动+攻击方块)

对于威胁区域内的每个目标,请执行以下操作:

2)对于有效移动中的每个方格,计算Manhattan distance到特定目标

3)如果(距离< =攻击范围)AND square在有效移动范围内,Hero可以从该方格攻击目标

在我的特殊情况下,我允许近战英雄攻击他们周围的所有8个方格(连接8),所以他们在国际象棋中表现得像国王,而不是曼哈顿距离将计算Chebushev distance

Algorithm find cells to attack target from