2011-01-19 1 views
0

Я создаю игру, в которой я пытаюсь использовать линейный алгоритм Брешенема (http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm), чтобы враги преследовали игрока на двумерной карте. Концепция игры аналогична концепции, описанной ниже. Псевдокод ниже от http://herselfsai.com/2007/07/simple-predator-prey-chase-algorithms.htmlПростая игра с движением Chase с использованием алгоритма линии 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 –

+0

@Mitch, я натолкнулся на алгоритм с сайта, указанного выше. Я ищу использовать алгоритм, поскольку он относится к вышеуказанному коду с указанного веб-сайта, но у меня есть чувство, что код некорректен. Если есть лучший алгоритм, я открыт для изменения кода. Благодарю. – user580777

+0

Я, возможно, ошибочно вижу гвоздь здесь, но вы считали, что используете Алгоритм A *? http://en.wikipedia.org/wiki/A_star –

ответ

0

Линейный алгоритм Bresenham - это простой и понятный алгоритм расчета, чтобы ваши персонажи перемещались по маршруту, ближайшему к прямой линии.

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