2011-01-19 5 views
0

Bresenham의 라인 알고리즘 (http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)을 사용하여 플레이어를 쫓아 가려는 게임을 만들고 있습니다. 2D지도에. 게임의 개념은 아래에있는 것과 유사합니다. 의사 코드는 아래의지도 주위 플레이어하지만 0의 그것의 에테르, 45, 90 등도 각도가 아닌 직선을 쫓아 http://herselfsai.com/2007/07/simple-predator-prey-chase-algorithms.htmlBresenham 's Line Algorithm을 사용한 간단한 체이스 게임 이동

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과 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 's Line Algorithm은 눈에 가장 가까운 경로를 따라 직선으로 이동하도록 알고리즘을 쉽게 이해하고 계산하기 쉽습니다.

45도 진행 비용이 90도 또는 0 도인 경우 알고리즘이 작동합니다. 그렇지 않으면 Bresenham이 취하는 경로가 가장 빠르지 않을 것입니다.

관련 문제