Простое движение в погоне с использованием линейного алгоритма Брезенхэма - PullRequest
0 голосов
/ 19 января 2011

Я создаю игру, в которой я пытаюсь использовать линейный алгоритм Брезенхэма (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 голосов
/ 19 января 2011

Алгоритм линии Брезенхэма - это простой для понимания и легко рассчитываемый алгоритм, который заставляет ваших персонажей двигаться по маршруту, наиболее близкому к прямой линии.

Алгоритм будет работать для вашего случая, если стоимость перехода на 45 градусов равна 90 или 0 градусам.В противном случае маршрут Брезенхэма не будет самым быстрым.

...