使用Bresenham线算法的简单追逐游戏运动

时间:2011-01-19 01:17:05

标签: algorithm bresenham

我正在创建一个游戏,我正在尝试使用Bresenham的线算法(http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)让敌人在2D地图上追逐玩家。游戏的概念类似于下面找到的概念。下面的伪代码来自http://herselfsai.com/2007/07/simple-predator-prey-chase-algorithms.html

prey current position ( xp, yp )
predator current position ( xP, yP )

x = x position to move to
y = y position to move to
dx = xp – xP
dy = yp – yP
Adx = AbsoluteValue ( dx )
Ady = AbsoluteValue (dy )

if ( xp > xP ) stepX = 1 else stepX = -1
if ( yp > yP ) stepY = 1 else stepY = -1

if ( Ady > Adx ){ //the y distance from prey is larger than the x distance

fraction = 2*dx – dy;

if (( yP != yp ) && ( fraction > 0 )){
x += stepX
}

y += stepY

}else{

fraction = 2*dy – dx;

if (( xP != xp ) && ( fraction > 0 )){
   y += stepY
}

x += stepX
}

敌人在地图周围追逐玩家,但它在0度,45度,90度等等角度而不是直线。此外,在我的代码中,敌人也有随机速度(0到5之间)并且有时超过射击玩家,然后尝试纠正并反复拍摄。这可能是一个单独的问题。

我确定没有完全掌握算法的概念。实现这个的正确方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

Bresenham的线算法是一种易于理解且易于计算的算法,可让您的角色在最接近直线的路线上移动。

如果45度的成本与90度或0度相同,该算法将适用于您的情况。否则,布雷森汉姆的路线将不会是最快的。