나는 게임 시작시 생성 된 절차 적으로 생성 된 세계로 게임을 만들고 있는데, 그리드로 표현되는 여러 영역으로 구성됩니다 (예 : 8x8, 9x6, 크기는 이상적으로 임의적 임). 이 영역들은 의존성 목록을 통해 서로 연결되어 있어야합니다.
해당 그리드의 3 개 이상의 공간이이 두 영역 사이에 노출되면 연결이 존재합니다. 그 3 공간 연결 영역의 중간 셀에는 영역 사이의 출입구가 있습니다.
나는 그것들을 연결하는 방법을 찾으려고 노력했지만 동시에 고려해야 할 더 많은 영역이 점점 복잡해집니다.
나는 종이 프로토 타이핑을 시도했지만 시각적으로 할 때 매우 간단한 과정이지만 코드로 동일한 효율성을 가진 방을 배치 할 수있는 좋은 수학적 표현 세트를 찾지 못했습니다.
지금 당장 어려움을 겪고있는 "간단한"예는 다음과 같습니다.
- 영역 'a'는 'b'와 'c'에 연결되어야합니다.
- 영역 'b'는 'a'와 'd'에 연결되어야합니다.
- 영역 'c'는 'a'와 'd'에 연결되어야합니다.
- 영역 'd'는 'b'와 'c'에 연결되어야합니다.
간단히하기 위해 목록에 외관 순서대로 방을 배치하고 있습니다 (다른 사람들을 시도했습니다). 표준 절차 던전 생성 알고리즘으로 접근하고 있습니다.
우리는 보드의 어느 곳에 나 'a'를 배치합니다. 첫 번째 영역이기 때문입니다. 다음으로 벽을 무작위로 고르고 그 벽에 연결된 것이 없으므로 'b'를 배치 할 수 있습니다.
이제 'c'를 배치해야하지만 'a'는 이미 보드 위에 있고 점유 된 벽이 있으므로 다른 벽에 놓기로 결정합니다. 그러나 'd'가 나오고 'b'와 'c'도 연결해야하기 때문에 모든 게재 위치가 수행되는 것은 아닙니다.
동일한 종속성 세트를 가진 2 개의 방이 반대쪽 벽에있을 수는 없지만 성공을 보장하지는 않는다는 가능한 제한을 시도했습니다.
다른 경우에는 면적이 다른 벽의 반대편에있는 것이 효과가 있습니다.
또한 사용 된 벽을 고려하지 않는 것은 유효한 솔루션을 배제하기 때문에 잘못된 가정입니다.
Optimal Rectangle Packing 및 Graph Layout 알고리즘과 같은 다른 Procedural Generation 알고리즘 또는 이와 유사한 것에 대한 연구를 시도했지만 일반적으로 이러한 알고리즘은이 문제의 모든 제약 조건을 고려하지 않으며 혼합하기가 어렵습니다.
적절한 배치를 찾을 때까지 영역 및 역 추적 배치를 포함하여 여러 가지 접근 방식에 대해 생각했지만 시행 착오에 매우 의존하고 계산 측면에서 비용이 많이 드는 것으로 보입니다. 그러나 내가 언급 한 마지막 두 가지 문제에 대한 광범위한 연구를 고려할 때 이것이 유일한 해결책일까요?
나는 누군가 과거에 비슷한 문제가 있었는지 알고 싶었고 이것을 알아 내고 알고리즘으로 시작 해야하는 곳에 대한 몇 가지 지침을 제공하려고합니다. 또는 실패하면 설정 한 제약 조건을 풀어야합니다.