해결 문제 : 모든 방이 연결된 타일 기반 게임에 대해 임의의 2D 던전 맵을 생성하십시오.
현재 가지고있는 것보다 더 나은 솔루션을 찾고 있습니다.
내 현재 솔루션은 두 가지 알고리즘을 실행하는 것입니다. 첫 번째는 방으로 던전을 생성합니다. 두 번째는 모든 방이 연결되어 있는지 확인하십시오. 다른 용제가 무엇인지 궁금합니다. 더 빠르거나 더 쉬운 것 등. 속도는 실제로 문제가되지 않지만, 실제 비용없이 속도를 얻을 수 있다면, 그것은 좋은 것입니다. 더 중요한 것은 저와 다른 사람들이 문제를 해결하고 해결하는 다른 방법을 배울 수 있다는 것입니다.
아래는 내 현재 구현입니다. 객실에는 현재 2, 3 또는 4 방향으로 출구가 없습니다.
던전 룸 생성
설정 : 현재 방을 왼쪽 상단 방으로 설정하십시오.
- 객실의 유효한 객실 유형을 가져 오십시오 (유효한 객실 유형은 던전에서 출구가없고 위의 방의 출구와 왼쪽의 방과 일치하는 출구가있는 유형입니다). 아래 2 단계로 인해 남았습니다.
- 방을 내려 놓고 x 좌표를 한 단계 앞으로 내립니다. x 좌표가 던전 너비를 초과하는 경우 x 좌표를 0으로 설정하고 y 좌표를 한 단계 진행하십시오. y 좌표가 던전 높이를 초과하면 완료됩니다.
- # 1부터 반복하십시오.
그런 다음 모든 방이 연결되어 있는지 확인합니다. 모든 방이 연결되어 있지 않으면 섹시하지는 않지만 던전 레이아웃 측면에서 충분히 좋은 방법으로 두 번째 알고리즘을 실행하고 방을 통과하여 모든 끝을 변경하도록합니다. 연결 중입니다.
모든 방이 연결되어 있는지 확인
설정 : 경로를 나타내는 정수의 2D 맵을 작성하고 항목을 "처리되지 않은"(아직 순회되지 않은) 값 -1로 초기화하십시오. 현재 경로를 추적하는 시작 경로 색인 정수를 1로 설정하십시오. 검사 할 방 스택에 추가하여 현재 방을 왼쪽 상단 방으로 설정하십시오.
- 스택에 확인할 룸이 포함되어 있으면 룸의 경로 색인을 현재 경로 색인으로 설정하십시오. 스택에 방이 포함되어 있지 않은 경우 경로 색인을 늘리고 아직 처리되지 않은 방을 얻을 때까지 열별로 한 줄씩 이동하여 방을 가져 오십시오. 방을 찾을 수 없으면 완료됩니다.
- 방에 출구가 왼쪽에 있는지 확인하십시오. 스택에 남아 있지 않은 경우 왼쪽 방을 스택에 추가 한 경우
- 아래쪽, 오른쪽 및 위쪽 방향에 대해 2 단계를 반복합니다 (스택을 사용하고 있으므로 위쪽 방향부터 시작하여 시계 방향으로 이동 함을 의미합니다).
- 1 단계부터 반복하십시오.
- 경로 인덱스 수가 1보다 크면 연결이 끊어진 방이있는 것입니다.
연결이 끊어진 방이있는 경우 경로 색인으로 방을 그룹화하고 가장 큰 경로의 색인을 가져 와서 다른 모든 방을 해당 방에 연결하십시오. 이것은 진행중인 작업이지만, 나의 (현재, "잔인한") 계획은 룸 그룹의 각 룸을 통과하는 것입니다 (첫 번째 제외) biggeset 룸 그룹에 수평 또는 수직 경로가 있는지 확인하십시오. 그렇다면 그 사이에 방을 주입 / 업데이트하여 수평 / 수직 경로를 만드십시오. 헹구고 반복하십시오. 추악하지만 예, 시각적 패턴 측면에서 눈에 띄지 않는 것이기 때문에 그 의미에서 작동합니다.