문제

나는 Pygame을 사용하여 Python에서 모험 게임을하고 있습니다. 나의 주요 문제는 내가 방의 경계를 정의하고 매번 경계를 치지 않고 주인공이 Aroud를 걷는 방법입니다. 안타깝게도 알고리즘을 연구 한 적이 없으므로 경로를 계산하는 방법에 대한 단서가 없습니다. 나는이 질문이 매우 일반적이며 대답하기 어렵다는 것을 알고 있지만 올바른 방향의 요점은 매우 감사 할 것입니다. 감사!

도움이 되었습니까?

해결책

나는 당신이 그것을 읽는 것이 좋습니다 ㅏ* 검색 알고리즘은 경로 문제를 위해 게임에서 일반적으로 사용됩니다.

이 게임이 2 차원 인 경우 (또는 2.5) 타일 시스템을 사용하여 충돌을 확인하는 것이 더 쉬워지는 것이 좋습니다. 온라인으로 많은 정보가 있습니다.

다른 팁

그러한 게임에 적합한 경계를 정의하는 두 가지 쉬운 방법이 있습니다.

더 간단한 방법은 영역을 그리드로 나누고 2D 어레이를 사용하여 그리드의 사각형을 추적하는 것입니다. 일반적 으로이 배열은지도 정보를 저장하므로 각 위치에는 정사각형에 풀이나 벽, 도로 또는 산 등이 포함되어 있는지 (따라서 표시 할 그림)를 나타내는 숫자가 있습니다. 당신에게 거친 사진을 제공하기 위해 :

######
#.#  #
# ## #
#    #
######

일종의 "미로"모양을 원한다면 필요한 더 복잡한 방법 얇은 벽, 그리드 사각형 사이에 수직 벽이 있는지 여부와 그리드 사각형 사이에 수평 벽이 있는지 여부를 나타내는 2D 어레이를 사용하는 것입니다. 거친 그림 (ASCII에서 뻗어있는 것처럼 보이지만 요점을 얻을 수 있기를 바랍니다) :

 - - - -
| |     |
   - - 
|       |
 - - - -

다음으로 결정해야 할 것은 캐릭터가 어떤 방향으로 이동할 수 있는지입니다 (위/아래/왼쪽/오른쪽은 가장 쉽지만 대각선은 그렇지 않습니다. ~도 훨씬 더 어렵다). 그런 다음 프로그램은 기본적으로 현재 위치에서 시작하여 목적지를 가로 질러 오기를 희망하면서 영역을 "정신적으로"탐색해야합니다.

위/다운/왼쪽/오른쪽으로 구현하기 쉬운 간단한 검색이 가장 짧은 경로를 찾을 수있는 간단한 검색이 폭 넓은 첫 번째 검색. 여기 몇 가지 의사 코드가 있습니다.

queue = new Queue #just a simple first-in-first-out
queue.push(startNode)
while not queue.empty():
    exploreNode = queue.pop()
    if isWalkable(exploreNode): #this doesn't work if you use
                                #"thin walls". The check must go
                                #where the pushes are instead

        if isTarget(exploreNode):
            #success!!!
        else:
            #push all neighbours
            queue.push( exploreNode.up )
            queue.push( exploreNode.down )
            queue.push( exploreNode.left )
            queue.push( exploreNode.right )

이 알고리즘은 큰 맵의 경우 느리지 만 그래프 검색 및 경로 찾기 개념에 익숙해집니다. 올바르게 작동하는지 확인하면* 또는 비슷한 것으로 교체 할 수 있으므로 동일한 결과가 적은 시간에 동일한 결과를 얻을 수 있습니다!

A* 및 기타 많은 검색 알고리즘을 사용합니다 우선 순위 대기열 FIFO 대기열 대신. 이를 통해 먼저 "가능성이 높은"경로를 먼저 고려할 수 있지만 직접 경로가 차단된다는 것이 밝혀지면 로터리 경로로 돌아갑니다.

안타깝게도 알고리즘을 연구 한 적이 없으므로 경로를 계산하는 방법에 대한 단서가 없습니다.

게임 작성을 시작하기 전에 게임을 교육해야합니다. 이것은 처음에는 조금 더 노력하지만 나중에 시간을 절약 할 것입니다.

나는 Pygame에 익숙하지 않지만 많은 응용 프로그램이 일반적으로 사용합니다. 경계 볼륨 일부 지역의 가장자리를 정의합니다. 아이디어는 캐릭터가 걸을 때 캐릭터 볼륨이 벽의 볼륨과 교차하는지 확인합니다. 그런 다음 속도를 조정하거나 캐릭터가 움직이지 못하게 할 수 있습니다. 다른 모양을 사용하여 매끄러운 벽을 얻으십시오.

이러한 개념은 빠른 에지 및 경계 감지가 필요한 모든 애플리케이션에 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top