도적 같은 2D 던전 생성에 이상적인 알고리즘은 무엇입니까? [닫은]


47

던전 생성의 맥락에서 절차 적 콘텐츠 생성에 관한 좋은 자료는 무엇입니까?

내가 찾을 수있는 가장 가까운 기사 는 2d 미로를 생성하는 알고리즘 이었습니다 . 이것은 내가 찾고있는 것이 아닙니다. 객실 및 연결된 복도와 같은 기능이 이상적입니다.

감사!


1
또한 미로 생성을 살펴보십시오 .
Anthony

1
에서이 주제에 대한 몇 가지 기사가 있습니다 RogueBasin
PATRY 기욤

답변:


27

이것은 이전에 다소 대답되었습니다. 당신의 첫 번째 장소는 http://pcg.wikidot.com/ 이어야합니다 .

나는 이것이 전혀 유용한 답변이 아니라고 비난 받았기 때문에 (실제로? 누군가 자원을 요구하고 주제를 다루는 위키에 대한 링크를 게시합니까? ), 위키의이 페이지는 던전 생성기를 다루고 주제에 대한 다양한 기사에 대한 링크를 제공합니다.
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

절차 적 컨텐츠 생성은 매우 창의적인 접근 방식이며 모든 아이디어가 유효하기 때문에 전체 위키를 탐색하는 것이 좋습니다. 그것은 측면 사고의 도전이며, 그 점에서 재미있는 것입니다.


"모든 아이디어가 유효하다"는 +1이지만 모든 아이디어는 유효하지만 일부 아이디어는 다른 아이디어보다 더 효과적입니다. 귀하의 <모호한 컴퓨터 전문 용어는 여기> 아이디어는 것이다 기능 및 가능성이 당신이 원하는,하지만 당신이 중 하나를하지 않는 한, 그보다 응집력, 더 무작위,보다 효율적으로 더 많은 사용자 정의, 또는 이들의 조합이 될 것입니다 그것을 할 수있는 다른 방법이있다 정말 좋거나 행운이 있습니다.
Nic Hartley

20

나는 사각형 격자를 기반으로 다음 알고리즘을 사용하여 상당히 좋은 수준을 얻었습니다.

먼저 방 세트를 만듭니다. 임의의 매개 변수는 방의 크기와 그 수를 정의합니다. 적응 형 알고리즘은 큰 복도로 만들어진 일부 구역과 매우 작은 방의 일부 구역을 정의 할 수도 있습니다.

그런 다음 모든 방이 서로 연결되어 있는지 확인해야합니다. 이를 위해 패스 파인더를 실행하여 각 객실 쌍 사이에 복도 (A라고 말하자)를 파서 아직 조각되지 않은 공간 (벽)에 비해 기존 공간 (객실 또는 기타 복도)에 무작위로 선택된 가중치를 부여합니다. 무게의 차이가 작 으면 새로운 복도를 파는 것이 합리적으로 저렴할 것입니다. 알고리즘은 방 사이에 많은 복도를 만들어 장소에서 다른 장소로 갈 가능성이 많습니다. 무게의 차이가 크면 알고리즘은 기존 방과 복도를 통과하는 것을 선호하여 경로를 더 구불 구불하게 만들고 특정 목적지에 도달하기위한 선택의 폭을 줄입니다.

이를 통해 적은 수의 매개 변수를 사용하여 작은 복도가있는 스파 스 거대한 홀에서부터 밀접하게 연결된 챔버의 벌집 모양의 미로에 이르기까지 매우 다른 외관 수준을 만들 수 있습니다.

다음은 생성 된 레벨의 예입니다.

여기에 이미지 설명을 입력하십시오

이 알고리즘을 기반으로 영역에 따라 벽 장식을 추가하고, 복도를 더 작게 또는 더 크게 만들고, 특별한 방을 만드는 등의 작업을 수행 할 수 있습니다.


10

코드를 읽는 것이 좋으며 C #을 구문 분석 할 수있는 경우, 로그 로그인 Amaranth가 사용하는 던전 생성기를 제안해도됩니까? 그것은이다 여기 . 연결된 객실, 확장 가능한 기능 및 기타 멋진 기능을 처리합니다.

전체 프로젝트를 풀고 빌드하면 던전을 생성하고 그릴 수있는 독립형 도구가있어 조정하고 작동 방식을 볼 수 있습니다.


1
몇 달 전의 모습으로 아마란스를 가로 질러 갔지만, 던전 세대에 들었을 때 이름을 잊어 버렸습니다. 링크 주셔서 감사합니다!
Gabriel Isenberg

2
journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes 의 기사 도 정말 좋습니다. 다른 복도 생성 엔진 등과 같은 몇 가지 추가 기능이있는 수정 된 버전을 사용합니다.
Tobsta

3

이 모든 것이 훌륭한 아이디어입니다. RogueBasin 과 pcg.wikidot.com 에서 약간 가져 와서 C #으로 자체 구현을 작성했습니다.

나는 셀룰러 오토마타 방법을 사용하여 생성 될 수있는 동굴 같은 레벨의 '자연적인'모습을 정말 좋아했습니다. 셀룰러 오토마타 방법의 의미를 이해하려면 Conway의 Game of Life를 상상해보십시오. 내 코드는 4-5 방법을 사용합니다. 즉, 타일이 벽이고 9 개 이웃 중 4 개 이상이 벽이거나 벽이 아니고 5 개 이상의 이웃이 벽이면 타일이 벽이됩니다. 먼저 벽이나 공간으로지도를 무작위로 채운 다음 각 x / y 위치를 반복적으로 방문하여 4-5 규칙을 적용합니다. 고립 된 동굴을 형성하는 문제를 완화하기 위해지도를 무작위로 채운 후 4-5 규칙을 각 타일에 적용하기 전에지도 전체에 수평선을 비워 각 타일을 벽 대신 공간으로 설정했습니다.

내지도 핸들러 클래스의 코드와 여기에서 내가 개선 한 부분을 볼 수 있습니다

또는 보관 된 버전은 여기 .


2
이 질문에는 많은 투표권이 있으며이 답변을 조금 더 열 수 있다면 더 좋을 것입니다. 링크는 결국 종료되는 경향이 있으므로 링크를 클릭 할 필요가 없도록 응답하십시오. 어떻게 작동합니까? 주요 아이디어는 무엇입니까? 다른 알고리즘과 어떻게 다릅니 까?
Katu

1
링크는 실제로 죽었다.
htmlcoderexe

2

이것을 찾는 가장 직접적인 장소는 실제로 소스 코드를 보는 것입니다. Angband와 Nethack의 두 주요 업체는 모두 오픈 소스입니다.


3
오픈 소스이지만, 내가 기억하는 것 중 어느 것도 잘 문서화 된 소스 또는 투명 소스 또는 학습용 소스에서 작성된 것이 아닙니다. 그것들은 해킹하기 쉽지만 전체적으로 이해하기는 훨씬 어렵습니다.
Tom Hudson

아마도 원본은 훌륭한 참고 자료는 아니지만 많은 변형이 있으며 그중 일부는 우수합니다. 예를 들어 UnAngband의 개발자는 던전 세대를 대폭 개선 하고 일련의 훌륭한 블로그 게시물 을 작성 했으므로 코드가 아닌 경우 아이디어를 확실히 사용할 수 있습니다.
congusbongus 2016 년

NetHack 소스는 이해하기 어렵다. 던전 제너레이터 (그중 하나)는 3 개 이상의 파일과 약 15 개의 기능으로 구성되어 있습니다.
Élektra
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.