태그 보관물: graphs

graphs

연결을 유지하면서 그래프의 가장자리 수를 줄입니다. 가장자리 연결을 고려하여 임의의 위치에

무작위로 생성 된 던전으로 게임을 디자인하고 있습니다. 이것을 노드가 방이고 모서리가 문 또는 복도 인 연결된 무 방향 그래프 로보고 싶습니다 . 그런 다음 “측면”노드를 던전 입구로 선택하고이 입구와 다른 모든 노드 사이의 거리를 계산하고 가장 먼 노드 중 하나가 던전의 “목표”(보물, 보스, 공주 등).

마지막 던전 지형을 생성하는 두 가지 방법을 보았습니다.

  • 먼저 임의의 그래프를 생성 한 다음 가장자리 연결을 고려하여 임의의 위치에 방으로 2D 세계를 채우십시오. 나는 방이 불가능한 장소에 방을 맞추려고 “잠금”될 수 있기 때문에 이것이 때때로 어려울 것이라고 생각했다.
  • 첫 번째 방을 생성하여 원하는 곳에 무작위로 놓고 결과를 노드와 모서리에 매핑합니다. 나는 이것을 시도하기로 결정했다.

내 아이디어는 다음으로 구성됩니다.

  • 먼저 전체 던전을 포함 할 큰 방을 생성하십시오.
  • 큰 방을 임의의 위치에 큰 방 안에 놓고 큰 방을 다른 지역의 2 개의 작은 방으로 나눕니다.
  • 그런 다음 각 객실을 너무 작거나 총 객실 수가 최대치 (또는 다른 조건)에 도달 할 때까지 각 객실을 2로 계속 나눕니다. 각각의 새로운 방은 노드입니다.
  • 완료되면 각 방을 확인하고 인접한 다른 방을 모두 찾아서 두 노드를 가장자리로 연결 한 것으로 표시합니다.

이렇게하면 모든 방이 2D 세계에서 가능한 위치를 유지하고 연결된 그래프로 올바르게 매핑됩니다.

내 문제는 방을 연결하는 문과 복도가 너무 많다는 것입니다.

그래서 연결된 무 방향 그래프의 가장자리 수줄이는 알고리즘을 원 하지만 결국 에는 연결 상태를 유지합니다 (모든 노드에 도달 할 수 있음).



답변

Prim의 알고리즘 을 사용 하여 그래프의 최소 스패닝 트리를 얻거나 (임의의 가중치를 추가하거나 입구 근처에 더 높은 가중치를 추가하거나 원하는 알고리즘을 수행) 문 / 가장자리를 임의로 다시 추가하십시오. 이 방법으로 모든 방을 연결하고 여분의 여분 경로를 만들 수 있습니다.


답변

당신은 또한 Kruskal의 알고리즘을 시도 할 수 있습니다


답변

Inkwell Ideas의이 목록 에있는 일부 던전 생성기 는 공개 소스이거나 알고리즘에 대한 설명서를 제공합니다. 구글은 또한 ‘[programminglanguagename] 던전 생성기’를 검색하여 많은 것을 제공 할 것입니다. 불행히도 내가 찾은 가장 잘 문서화되어 있음에도 불구하고 두 가지 방법 중 하나를 사용하여 내가 가장 좋아하는 것을 찾을 수 없으며 최근 하드 드라이브 충돌로 인해 이름을 잃어 버렸으므로 그 이름을 기억할 수 없습니다. 해당 드라이브에서 복구를 수행 한 후이 답변을 업데이트하겠습니다.


답변