我正在做一个炸弹人型游戏。我想计算两点之间的距离;玩家可以向四个方向移动。如果我在(0,0)并且想要去(5,5),我可以使用出租车距离公式((5-0)+(5-0))计算距离,因为我只能移动水平和垂直。
但现在我想在游戏中实现玩家无法通过的墙壁。
我目前实施的距离只是使用出租车公式。
int distanceTo(Position Pos)
{
return (abs(this->x - Pos.x) + abs(this->y - Pos.y));
}
考虑到介于两者之间的不可移动的盒子/墙壁,如何找到两点(x1,y1)和(x2,y2)之间的距离?
答案 0 :(得分:1)
有了障碍物,您需要用更复杂的寻路算法替换您的简单出租车距离公式。
你的网格有多大? Dijkstra的算法适用于小网格,A *(Dijkstra的修改版)适用于较大的网格。
Amit Patel拥有描述Dijkstra和A *的优秀资源,以及每个人的实施细节。您可以查看here。