2011-01-19 65 views
0

我創建了一個遊戲,我試圖用Bresenham的線算法(http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)讓敵人追逐玩家在2D地圖上。遊戲的概念與下面的概念類似。下面的僞代碼是從http://herselfsai.com/2007/07/simple-predator-prey-chase-algorithms.html使用Bresenham線算法的簡單追逐遊戲運動

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之間),有時會過度拍攝玩家,然後嘗試糾正和反覆拍攝。這可能是一個單獨的問題。

我當然沒有完全理解算法的概念。什麼是實施這個的正確方法?

在此先感謝。

+0

你說「我確定只是沒有完全理解算法的概念」 - 所以你決定在什麼基礎上使用算法? Bresenham線算法確定應繪製n維柵格中的哪些點以形成兩個給定點之間的直線的緊密近似。 http://en.wikipedia.org/wiki/Bresenham's_line_algorithm – 2011-01-19 01:52:36

回答

0

Bresenham's Line算法是一種易於理解和易於計算的算法,可讓您的角色通過最接近眼睛的路線移動到一條直線上。

如果45度的成本與90度或0度相同,該算法將適用於您的情況。否則Bresenham所走的路線不會是最快的。