我的游戏中有 2 个目标。我正在使用广度优先搜索来查找其中一个的路径。我想知道如何使用它们的坐标确定哪个是最近的目标。我有目标的 X 和 Y 坐标(均为 int 类型)。
int result = 0;
int target1dist = (playerX - target1x) + (playerY - target1y);
int target2dist = (playerX - target2x) + (playerY - target2y);
if (target1dist < target2dist){
result = BFS(target1x,target1y,playerX ,playerY);
} else {
result = BFS(target2x,target2y,playerX ,playerY);
}
当目标之一的距离为负时,此方法无效。所以我添加了绝对值函数。所以 target1dist 和 target2dist 不能为负数。
int target1dist =Math.abs ((playerX - target1x) + (playerY - target1y));
这是否是找到最近目标的有效方法,以便我的 AI 玩家可以直接瞄准它? P.S: 我的人工智能玩家只能走 4 个方向,所以对角线被排除在外。我的另一个想法是使用毕达哥拉斯来计算距离。
最佳答案
稍微修改一下你的方法就应该可以工作。您不想取完整表达式的绝对值,而是取每个分量的绝对值:
int traget1dist = Math.abs(playerX - target1x) + Math.abs(playerY - target1y);
这称为Manhattan distance这是基于图 block 的搜索的常见衡量标准。由于广度优先搜索是 guaranteed to find the optimal solution您的解决方案将会起作用。
关于java - 如何在给定起点坐标的情况下找到最近的目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271040/