랜덤 맵 생성


63

Java에서 2D 타일 맵 RPG 게임을 시작 / 시작했으며 임의의 맵 생성을 구현하려고합니다. 워터 타일 및 경로 타일과 함께 다른 타일 (흙 / 모래 / 돌 / 잔디 / 자갈 등)의 목록이 있는데, 내가 가진 문제는 맵을 무작위로 생성 할 위치를 모릅니다.

지형 섹션이 필요합니다 (일부 모래, 먼지 등). Minecraft가 다른 생물 군계가 있고 서로 원활하게 변형되는 방식과 유사합니다. 마지막으로지도에 다른 방향으로 진행하면서 무작위 경로를 추가해야합니다.

나는 나에게 모든 코드 나 아무것도 쓰지 말라고 요구하지 않고 올바른 방향으로 나를 피온하십시오.

tl; dr-생물 군계, 경로로 타일 맵을 생성하고 생물 군계가 서로 원활하게 들어가도록합니다.

답변:


68

사이트의 다른 많은 관련 질문 중에서도 맵 생성에 대한 링크 된 기사가 있습니다. 게임용 다각형 맵 생성 해당 기사에서 좋은 전략을 얻을 수 있지만 실제로는 사용할 수 없습니다.

튜토리얼은 아니지만 Dwarf Fortress 세계지도 생성 방법에 대한 기사 가 있습니다. 기본적으로 높이, 수분, 온도, 염분에 대해 여러 층의 소음을 생성합니다. 그런 다음 다음과 같이 사용하십시오.

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

아니면 이거

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

이전에 생성 한 노이즈 레이어를 기반으로 바이오 메스를 생성합니다. 일반적으로 이것은 생물 군계 사이에 상당히 매끄러운 전이를 제공하며 전이는 논리적입니다. 또한 고도를 기준으로 수분 및 온도 맵을 수정합니다. 이것은 자연스럽게 "목재 라인"을 생성하고 눈 덮인 모자가있는 록키 산맥을 생성합니다.

게임에서이 전략을 사용하고 있으며 다음과 같은 맵을 매우 빠르게 생성합니다.

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

또한 이 비디오 의 시작 부분에서 몇 개의지도를 더 스크롤하는 것을 볼 수 있습니다 .

그리고 여기 시작을위한 몇 가지 더 있습니다 :

타일 ​​엔진에서 무작위 "세계"를 만들려면 어떻게해야합니까?

절차 적으로 생성 된 세계에서 피쳐 영역을 식별하려면 어떻게해야합니까?

맵 생성을 위해 타일 가능한 솔리드 노이즈를 어떻게 만듭니 까?


그 동안 다각형지도 세대 게임에 대한 링크가 아주 좋은 기사입니다, A) 그것은 tilemap 그리드 아니기 때문에 나는이 질문에 대한 매우 적합하다고 생각하지 않습니다와 b)는 생물 군계이없는 - 지형 텍스처가 높이를 기준으로합니다.
Tapio

@Tapio 당신이 맞아요, 더 많은 정보로 업데이트했습니다.
MichaelHouse

@ Byte56 감사합니다.이 모든 것이 저에게 출발점을줍니다! :)
Tom O

@ Byte56 몇 년 전에 내 질문에 대해 언급 했으므로 작업 코드로 업데이트했습니다!
Nick Badal

1
BTW 폴리곤 맵 생성 프로젝트는 높이를 표시하지 않은 타일 맵이있는 게임을 위해 만들어졌습니다. 높이와 다각형은 생물 군계를 생성하기 위해 존재하지만 실제로 게임에는 표시되지 않습니다.
amitp

29

다른 답변은이 특정 요구에 맞는 정적 풍경을 생성하는 데 정말 좋습니다. 시간이 지남에 따라 변화하거나 훨씬 더 사실적으로 보이는 풍경을 만들고 싶다면이 기술을 따르는 사람들이 찾고있는 다른 방법이 있습니다.

다른 답변과 달리 완전히 빈 맵으로 시작합니다. 해수면으로 간주하는 것으로 시작하십시오. Perlin Noise 를 사용 하여 약간의 변동을 추가 하십시오. 256 개의 가능한 고도가있는 경우 어느 방향 으로든 3-5를 넘지 마십시오. 이렇게하면 실제로 오랫동안 시뮬레이션을 실행할 필요없이 처음 몇 십억 년의 풍경이 만들어집니다.

판 구조론

지도를 직선 또는 곡선을 따라 분할하여 판을 만듭니다. 판의 모양이 자세할수록 풍경이 더 흥미로워집니다. 크게 유지하십시오. 각 판에 방향과 속도를 부여하십시오. 주어진 시간 동안 판을지도 주위에서 단계적으로 이동시켜 그 위에있는 모든 타일을 끌어 놓습니다.

두 개의 판이 교차 할 때, 어떤 것이 넘어 질지, 어떤 것이 내려갈 것인지 선택하면,이 선택은 무작위 일 수 있습니다. 아래에 지정된 플레이트의 타일은 높이가 즉시 5 단계 씩 줄어 듭니다. 플레이트가 위 또는 아래에 지정되면 플레이트와의 모든 향후 상호 작용은 다음 규칙을 따릅니다.

  • 지정된 판이 지정되지 않은 판을 가로 지르는 경우, 지정되지 않은 판은 반대 유형이됩니다. (따라서 UD 플레이트가 넘어지면 넘어집니다.)
  • 오버 플레이트가 언더 플레이트 위에있는 경우 모든 타일은 0-1 고도 단계 위로 이동하고 타일은 오버 플레이트의 경로를 따릅니다.
  • 오버 플레이트가 오버 플레이트를 가로 지르는 경우, 모든 타일은 1-2 단계 위로 이동하고 크로스 오버 영역의 타일은 더 이상 드리프트하지 않습니다.
  • 언더 플레이트가 언더 플레이트를 가로 지르는 경우 크로스 오버 영역의 두 플레이트에 대한 표고가 66 %보다 큰 영역의 타일은 1-3 단계 위로 이동합니다 (화산 활동에 의한 것처럼 충분한 시간이 지남에 따라 섬이 생성됨) ) 및이 영역의 타일이 표류를 멈 춥니 다.

각 단계마다 현재 속도의 20 % 느리게 교차하는 모든 플레이트. 사실감을 더하기 위해 각 단계마다 이동 방향을 임의로 -10 %에서 10 %로 변경하십시오.

원하는 단계 수를 수행 한 후. 아마 5-10은 충분합니다. 플레이트가없는 타일은 기존의 가장 낮은 레벨로 떨어 뜨려야합니다.

크거나 작습니까?

이 맵은 그대로 사용하거나 4X4 타일 (셀) 청크로 분할하고 개별 고도에 따라 해당 섹션을 확장하여 훨씬 더 큰 맵을 생성하도록 확장 할 수 있습니다. 각 셀의 고도를 점으로 취급하고 해당 점 사이의 큰지도에서 부드러운 그라데이션을 만듭니다. 따라서 큰지도가 4X4 대신 40X40이고 포인트 (0,0)이 10이고 포인트 (0,1)이 1 인 경우, 더 큰지도의 타일은 10,9,8,7,6입니다. 높이는, 5,4,3,2,1입니다. 경사를 완화하기 위해 펄린 노이즈를 추가 할 수 있습니다. 이 모든 스케일링 기법은 Diamond Square 알고리즘 과 유사합니다 .

강과 호수, 대양 및 물표를 시뮬레이션합니다. 나는 셀룰러 오토마타를 선호한다 .

높이는 수레 또는 확장 된 int 범위가되어 미세한 그레인 추적이 가능합니다. 물 세포는 포화 값, 예를 들어 1-256의 범위를 갖는다. 지도가 고르게 시작되어야합니다. 개별지도 크기에 맞는 숫자를 사용해야하지만 일반적으로 다음과 같은 규칙을 따릅니다.

  • 인접 셀이 더 포화 된 경우 채도를 높이고 높이를 늘리십시오.
  • 인접 셀이 덜 포화 된 경우 채도를 줄이고 높이를 잃습니다.

모든 인접 셀에 대해이 점검을 수행하십시오. 충분한 수의 단계를 수행하십시오. 원하는 경우 해당 온도로 포화 / 손실 된 포화 량을 변경하여이 시뮬레이션에 온도를 추가 할 수 있습니다. 고도를 기준으로 변경할 수도 있습니다. 자연 호수와 강이 형성되어야합니다. 일부는 바다에 빠질 것입니다. (해양은 어떤 측정 기준으로도 채워지지는 않지만 해수면 아래에서 물이 채워질 것을 지정합니다.)

다른 답변과 마찬가지로 온도 및 채도 데이터를 유지하여 생물 군계를 만들 수 있습니다. 더 정확하고 재미 있어야합니다. 극에 눈 덮인 생물 군계가 있고 중간에 뜨거운 생물 군계가 있습니다 (매끄러운 온도 목록을 사용하는 경우).

바람을 시뮬레이트하여 고도에 따른 온도 변화를 시뮬레이션 할 수도 있습니다. 원하는 경우 온도 시뮬레이션 실행과 물 시뮬레이션 실행을 앞뒤로 이동할 수 있습니다. 그러나 나는 온도 변화를 사용하여 아무것도 만들지 않았으므로 그렇게하는 방법에 대해서는 언급하지 않을 것입니다.

진화하는 풍경

육지, 물, 열에 대한 시뮬레이션을 유지하고 그 효과를 크게 줄이고 판의 움직임을 막 으면 시간이 지남에 따라 이러한 모든 지표를 계속 변경할 수 있습니다. 계산을 자주 수행하지는 않지만 이런 방식으로 변경에 응답하는 세계지도를 얻을 수 있습니다.

결론

이러한 종류의 기술은 훨씬 더 복잡하지만 훨씬 더 현실적이고 진화하는 효과를냅니다. 가치있는 것으로 가져 가세요?


15

지형 생성에 Perlin Noise 를 사용할 수 있습니다 . 여기 Minecraft 의 생물 군계 가 작동 하는 방식이 있습니다. 보시다시피 그는 레인 맵과 함께 히트 맵을 사용하여 생물 군계를 만듭니다.

마인 크래프트의 생물 군계

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.