我认为您要寻找的可能是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)的距离是否小于玩家的移动距离。
这是一个非常简单的示例,但是如果您有多个障碍和/或更长的移动范围,则它应该能够处理复杂性。
无论是在编程复杂性还是在执行效率方面,它实际上是否比泛洪都要好,我都不知道。似乎是解决问题的一种更有趣的方法。