我在为此提出一个特定的搜索词时遇到了问题,但是如何在基于2D回合的策略游戏(即FF:战术,火焰纹章,进阶战争)中寻找可能的动作。

在这一点上,我没有太多考虑地形(甚至碰撞)的问题。我只是想知道我可以使用哪种算法来找出X实体可以移动5个图块并比其攻击2个更远的图块。
我知道我可以使用Dijkstra之类的东西来找到两点之间的距离。一种可能的实现方式是从玩家位置开始,然后从那里分支,直到Dijkstra返回的距离大于移动次数。
只是想知道是否有人可以指出我正确的方向(即算法名称,技术,文章等)。
我在为此提出一个特定的搜索词时遇到了问题,但是如何在基于2D回合的策略游戏(即FF:战术,火焰纹章,进阶战争)中寻找可能的动作。

在这一点上,我没有太多考虑地形(甚至碰撞)的问题。我只是想知道我可以使用哪种算法来找出X实体可以移动5个图块并比其攻击2个更远的图块。
我知道我可以使用Dijkstra之类的东西来找到两点之间的距离。一种可能的实现方式是从玩家位置开始,然后从那里分支,直到Dijkstra返回的距离大于移动次数。
只是想知道是否有人可以指出我正确的方向(即算法名称,技术,文章等)。
Answers:
我认为有界Dijkstra正是您要使用的。Dijkstra找到两点之间距离的方式是,它绘制出从原始节点到每个节点的距离,然后从该距离图中“选择”最短路径。您实际上希望做同样的事情,只是希望将其创建的距离节点图作为输出,而不是指向任何特定点的路径。
您要进行的一种修改是跳过计算与已经超出最大移动范围的节点之间的距离。然后,您将获得一个单元可以移动到的所有节点的节点图,再加上一个边界,因此只需剪切距离大于运动允许范围的节点即可。
中提琴
换句话说,您在问题中描述的几乎是您需要做的。 它还具有能够使用输出进行寻路的优势,而无需进行任何进一步的计算。
我现在可以想到的最简单(也许是最幼稚)的方法:
steps - 1。steps - 1,其中steps将当前场的步数,除非新领域具有较高的已经数。我认为您要寻找的可能是Manhattan Distance。假设没有障碍,您可以说只要满足以下条件,便可以达到一个正方形:
| toX-fromX | + | toY-fromY | <maxMoveDistance
如果您以后会遇到障碍,则此算法可能不是正确的方向。适应它的一种可能方法可能包括让障碍物投射“阴影”并从最近的点重新评估。
编辑(因为我现在有更多的空闲时间):
“阴影”的意思是这样的,如果0是可到达的正方形,C是字符,X是障碍物:
012345678
0 0
1 00
2 000X
3 000C000
4 00000
5 000
6 0
012345678
由于(5,2)是一个障碍,因此首先假设x> = 5 AND y <= 2不能到达任何东西。然后,您可以从另一个正方形重新计算;如果要转到(5,1),则可以从(4,1)计算出曼哈顿距离,并查看该距离+从角色到(4,1)的距离是否小于玩家的移动距离。
这是一个非常简单的示例,但是如果您有多个障碍和/或更长的移动范围,则它应该能够处理复杂性。
无论是在编程复杂性还是在执行效率方面,它实际上是否比泛洪都要好,我都不知道。似乎是解决问题的一种更有趣的方法。