나는 파이 게임에서 파이 게임을 사용하여 모험 게임을하고있다. 나의 주된 문제는 방의 경계를 어떻게 정의하고 매번 경계를 두드리지 않고 주인공이 걸어 다닐 수있게 할 것인가이다. 슬프게도, 알고리즘을 공부 한 적이 없어서 경로를 계산하는 방법에 대한 단서가 없습니다. 나는이 질문이 매우 일반적이며 대답하기 어렵다는 것을 알고 있지만 올바른 방향의 한 점은 매우 높이 평가 될 것입니다. 감사!어드벤처 게임 - 방 안을 걷다
답변
경로 지정 문제로 게임에서 일반적으로 사용되는 A* 검색 알고리즘을 읽어 보는 것이 좋습니다.
이 게임이 2 차원 (또는 2.5)이면 충돌 검사가 더 쉬울 것이므로 타일 시스템을 사용하는 것이 좋습니다. 당신이 이것들로 시작하게 할 수있는 온라인 정보가 많이 있습니다.
고마워요. 현재이 http://www.pygame.org/project-AStar-195-.html – kallepersson
슬프게도 알고리즘을 공부 한 적이 없으므로 경로를 계산하는 방법에 대한 단서가 없습니다.
게임을 쓰기 시작하기 전에 게임에 대해 알아야합니다. 처음에는 약간의 노력이 필요하지만 나중에 많은 시간을 절약 할 수 있습니다.
고마워요! 나는 현재 A * 알고리즘을 조사 중이다. – kallepersson
저는 파이 게임에 익숙하지 않지만 많은 응용 프로그램에서는 보통 bounding volumes을 사용하여 일부 영역의 가장자리를 정의합니다. 캐릭터가 걸어 감에 따라 캐릭터 볼륨이 벽의 볼륨과 교차하는지 확인합니다. 그런 다음 속도를 조정하거나 캐릭터가 움직이지 않도록 할 수 있습니다. 캐릭터가 뾰족한 가장자리에 달라 붙지 않도록 매끄러운 벽을 얻기 위해 다른 모양을 사용하십시오.
이러한 개념은 빠른 가장자리 및 경계 감지가 필요한 모든 응용 프로그램에 사용할 수 있습니다.
그런 게임에 적합한 경계를 정의하는 두 가지 쉬운 방법이 있습니다.
더 간단한 방법은 영역을 눈금으로 나누고 2D 배열을 사용하여 눈금에서 어느 사각형이 통과 가능한지 추적하는 것입니다. 일반적으로이 배열은지도 정보도 저장하므로 각 위치에 잔디, 벽 또는 도로 또는 산 등이 포함되어 있는지 (따라서 어떤 그림을 표시 할 것인지) 나타내는 숫자가 있습니다.
이######
#.# #
# ## #
# #
######
당신이 "미로"모양의 종류를 원하는 경우 얇은 벽으로, 필요 더 복잡한 방법은하는이 있는지 여부를 나타내는 2 차원 배열을 사용하는 것입니다 : 당신에게 대략적인 그림을 제공합니다 격자 벽 사이에 수직 벽, 격자 사각형 사이에 수평 벽이 있는지 여부. 거친 그림 (그것이 ASCII에서 뻗어 보이지만 잘하면 당신이 포인트를 얻을 수 있습니다) :
- - - -
| | |
- -
| |
- - - -
다음 일이 결정은 당신의 성격 상/하/좌를 잘 가장 쉬운/최대 (에 이동할 수 있습니다 어떤 방향이다 대각선은 도 아니고 훨씬 더 세게). 다음 프로그램은 기본적으로 "정신적으로"현재 위치에서 출발하여 목적지를 가로 질러이 지역을 탐험해야합니다.
위로/아래/왼쪽/오른쪽으로 구현하기가 쉽고 가장 짧은 경로가있는 경우 가장 간단한 경로를 찾을 수있는 간단한 검색은 Breadth-First search입니다. 여기에 몇 가지 의사 코드는 다음과 같습니다
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 * 등으로 교체해보십시오. 그러면 더 짧은 시간에 동일한 결과를 얻을 수 있습니다!
A * 및 기타 많은 검색 알고리즘은 FIFO 대기열 대신 우선 순위 대기열을 사용합니다. 이렇게하면 "가능성이 더 높은"경로를 먼저 고려할 수 있지만보다 직접적인 경로가 차단되는 것으로 판명되면 교차로 경로로 돌아갑니다.
에 대해 자세히 조사하고 있습니다.이 철저한 설명을 제공해 주셔서 감사합니다. 그것은 알고리즘을 더 잘 이해할 수있었습니다! 나는 아마 나를위한 사고의 대부분을하기 때문에 A * 알고리즘에 정착하고있다. 지도의 크기는 A *에 문제가 될 수있다. 현재 사용하고있는 (http : // www. pygame.org/project-AStar-195-.html)는 1024x768 맵과 함께 아주 천천히 작동합니다. 아마도 나는 모든지도 타일을 더 크게 만들고 타일의 총량을 줄여야합니다. – kallepersson
지도가 너무 큰 이유는 무엇입니까? 1 픽셀 타일은 너무 작습니다. 게임 세계를 타일에서 페인트하지 않고 "손으로 그린"것이 원한다면이지도의 각 사각형에 4x4 픽셀로 통행 가능한/통과 할 수없는 영역의지도 (보이지 않는지도)를 그려 보는 것이 합리적인 해결책입니다. "로컬"여행과 "글로벌"여행을 구별하는 등 다양한 방법으로 A *를 "더 똑똑하게"만들 수도 있습니다. 또는 A *가 얼마나 멀리 보이는지 제한 할 수 있으며, 그렇지 않으면 사용자가 쉽게 클릭 할 수 있도록 강제합니다. – Artelius
예, 1 픽셀 타일은 너무 작습니다. 명확히하기 위해, 2.5D 원근감을 가진 세계에 적합한지도를 만들고 있습니다 (예 : Monkey Island 3). 그럼에도 불구하고, 당신은 1px 타일이 필요 없다는 점에서 옳습니다. 4 또는 10 픽셀 타일도 충분합니다. 타일은 보이지 않습니다. 조언 해 주셔서 감사합니다. – kallepersson
주인공을 직접 조정 하시겠습니까? 아니면 그 자체로 움직이는 인공 지능의 종류입니까? –