2011-11-30 4 views
1

나는 .net으로 텍스트 기반의 우주 게임을 만들고있다. 나는지도 주위를 "움직일"수있는 서버와 클라이언트를 가지고있다. 지도는 각 섹터가 최대 8 개의 다른 섹터 (대각선 운동이있는 그리드)에 연결할 가능성이있는 섹터로 나뉩니다. 이것은 연결 섹터를 나열하는 배열에 의해 섹터 클래스에 저장됩니다. 현재 모든 섹터는 목록에 저장됩니다. 이동 명령이 발행되면 연결 섹터 배열이 검사되고 요청 된 섹터가 배열에서 발견되면 새 섹터가로드됩니다.자동 조종을 구현하는 방법

내가하고 싶은 것은 자동 조종 기능을 구현하는 것이지만, 내 인생은 현재 구조로 어떻게 풀어 낼지 알 수 없다. 각 섹터는 연결 섹터에 대해서만 알고 있습니다.

누구에게 의견이나 아이디어가 있습니까?

감사합니다,

답변

3

나는 당신이 최단 경로 알고리즘을 원하는 생각합니다. 섹터는 그래프를 형성하며 섹터를 통한 경로를 찾고자합니다.

이 작업을 수행하는 가장 간단한 방법은 우주선의 현재 위치와 원하는 장소에서 시작하여 두 개의 폭이 넓은 첫 번째 검색을하는 것입니다. 공유 노드를 찾으면 각 위치의 노드에 대한 경로를 병합하면 경로가 있습니다.

근접 데이터가있는 경우 A *로 최적화 할 수 있습니다.

1

이렇게하는 데는 몇 가지 방법이 있습니다. 지도는 공간 자체와 같은 것으로, 모든 방향으로 여행 할 수 있으며 더 미로 같은 곳입니까? 공간 게임, 나는지도 같은 경우

XXXX 
XXXX 
XXXX 
XXXX 

을 것으로 상상할 것, 당신은지도를 저장하는 2 차원 배열을 사용하여 더 나을 수 있습니다. 이렇게하면 목적지를 찾을 때까지 X와 Y를 증가 시켜서 자동 조종 할 수 있습니다.

그러나지도가 더 복잡한 경우 탐색을 위해 "A * 알고리즘"을 조사해야합니다. 당신이하는 일은 가능한 모든 경로를 계산하고 가장 짧은 길을 택함으로써 최고의 길을 찾는 것입니다. 예를 들어,지도 인 경우 :

(U = 최대, 등)

U 
UR 
URU 
URUD 
URUDR 
URUDRD* 
URR 
URRD* 
:

X 
XXX 
A B 

그리고 당신은 A에서 B로 얻기 위해 노력하고, 당신은지도를 생성

이렇게 보일 것입니다. *는 경로가 목적지까지가는 길을 의미하므로, 경로를 만든 모든 경로를보고 가장 짧은 경로를 선택합니다.

A *의 장점은 각 섹터에 대해 가중치를 적용 할 수 있다는 것입니다. 한 섹터에서 성운이 통과하는 데 3 배의 시간이 걸리면 연산 수 대신 총 '노력'을 비교하여 알고리즘에이 성운을 포함 할 수 있습니다. 이것은 경로가 훨씬 빠르기 때문에 캐릭터가 경로를 통해 이동하는 게임에서 멋지다. :)

A * 길 찾기를 온라인으로 검색하는 알고리즘이 많이 있습니다. 행운을 빕니다!

관련 문제