비슷한 타일이 서로 옆에 생성 될 가능성 증가


9

나는 타일 맵 시스템에서 일하고 있는데, 지금까지는 다음과 같습니다 (녹색은 잔디, 공기는 ​​흰색, 돌은 회색, 파란색은 물).

타일

간단한 난수 생성기를 사용하여 타일이 풀일 확률은 45 %, 물일 확률은 30 %, 석재 일 확률은 25 %입니다.

어쨌든 잔디 / 돌 블록이 함께 덩어리를 형성하여 육지 덩어리를 형성하고 물 블록을 바다로 만들 수 있습니까 (마인 크래프트와 같은 게임에서 볼 수있는 것과 같은).

답변:


17

근처 블록을 확인하고 거기에 따라 확률을 변경하는 알고리즘을 사용할 수 있습니다. 그러나 그것은 대부분 잘못된 접근법이라고 생각합니다.

당신이보고 싶은 것은 프랙탈 노이즈 유형입니다-이 경우 펄린 또는 단순 노이즈입니다. 노이즈를 생성하면 -1에서 1 사이의 값을 얻게됩니다.

http://en.wikipedia.org/wiki/Perlin_noise

그런 다음 물을 만드는 요소의 임계 값을 설정하여 수위를 조정할 수 있습니다. 다른 블록의 경우 두 번째 노이즈 세트를 실행하여 바위와 잔디 사이를 전환 할 수 있습니다. (이 방법으로 큰 물 패치를 가질 수 있지만 작은 돌 덩어리가 생길 수 있습니다).

getTerrain(x,y) {
if(perlin_noise(x,y) > 0) {
    if(perlin_noise(x * scale,y * scale) > 0) {
        return rock
    } else {
        return dirt
    }
} else {
    return water
}

스캔 및 던지기 방법이 지나치게 복잡하고 확장 성이 뛰어나지 않다고 생각하기 때문에 내가 즐기는 또 다른 방법을 제안합니다.

지도 전체에 격자를 놓고지도를 큰 사각형으로 나눕니다.

각 교차점에서 임의의 숫자를 생성하십시오 (0과 1 사이에서 백분율로 작동 함).

각 정사각형을 네 개의 정사각형으로 자르면 세분화-이전 선을 따르고 세분 선을 찾은 곳에서 두 인접 점 사이에 임의의 숫자를 생성합니다. 마찬가지로 십자가 중심에 대해 가장 높은 점 사이에 점을 생성합니다 최저값.

헹구고 반복하십시오. 첫 번째 패스에서 초기 임의성을 얻을 수 있지만 후자는 일부 균일 성을 제공합니다. 의사 난수에 대해서는 죄송합니다.

0-------5  0---3---5 0-1-3-4-5 011233455
|       |  |   |   | | | | | | 012344555
|       |  |   |   | 0-2-4-6-5 002445665
|       |  |   |   | | | | | | 123445666
|       |  2---5---7 2-4-5-7-7 234455777
|       |  |   |   | | | | | | 233455688
|       |  |   |   | 2-3-5-5-9 223455589
|       |  |   |   | | | | | | 233455589
2-------9  2---4---9 2-4-4-5-9 234445579

세분화 할 때 잃어버린 크로스바가 없기 때문에 삼각형에 더 효과적입니다.

물론, 가장 좋은 결과는 이러한 방법을 결합하여 얻을 수 있습니다. 계층별로, 일부 기술은 큰 땅을 제공하고, 다른 기술은 멋진 동굴을 제공하고, 다른 사람들은 언덕을 위해 일하며, 더 많은 것은 물 시스템을 위해 일할 것입니다.


+1 소음으로의 도약은 일반적으로 이것이 이끄는 곳이라고 생각합니다. 비록 그것이 초기의 '주변 스캔과 퍼센트 변경'이 투표에 도움이 되긴했지만 이것이 너무 큰 도약인지 궁금합니다. :)
James

3

이미 언급했듯이 노이즈는 좋은 솔루션입니다. 또 다른 옵션은 데이터에서 두 번째 패스를 수행하여 원하는 레이아웃으로 조금 이동하는 것입니다. 가우시안 블러 는이를 달성 할 수있는 많은 방법 중 하나입니다. 패스를 사용하면 각 유형의 "둥근"모양을 얻을 수 있습니다.

그래도 어떤 방법을 사용하든 명심해야 할 중요한 사항은 프로세스 결과를 새로운 위치에 저장하는 것입니다. 지도를 제자리에서 수정하면 이미 처리 한 부분이 알고리즘에 영향을 미치기 시작하고 이상한 패턴이 생깁니다.


2

이 작업을 수행하는 비교적 간단한 방법은 임의의 위치에 많은 핵을 생성하는 것입니다. 이 점 들의 보로 노이 다이어그램 을 그립니다. 결과의 각 영역에 요소를 지정하십시오.

이로 인해 추악하고 기계적인 느낌이 듭니다. 테두리를 약간 어둡게하면 괜찮은 모양이됩니다.

큰지도를 생성하는 경우 두 가지 수준에서이 작업을 수행 할 수 있습니다. 핵 20 개를 사용하여 초기 보로 노이 다이어그램을 만들고 각 결과 지역을 국가라고합니다. 400 핵을 사용하여 다른 다이어그램을 작성하고 각 결과 영역을 하나의 비 캐리지라고합니다.

한 국가 내에 완전히 포함 된 모든 목차에는 국가의 요소가 있습니다. 두 개 이상의 국가에 부분적으로 포함 된 Vicarage는 둘러싼 국가의 요소 중 하나를 무작위로 가져옵니다.

이 포스트는 사진을 볼 가치가 있지만, 나는 그것을 제공하기에는 너무 게으르다.


2

다각형 맵 생성기 는 다른 '영역'으로 맵을 작성하는 데 도움이되므로 더 잘 구성된 맵을 얻을 수 있습니다. 그것은 voronoi 다이어그램을 기반으로하지만 이것으로 시작하는 것이 좋을 것 같습니다.


0

이 방법을 사용하여 수행 할 수 있습니다.

  • 모든 타일을 지정되지 않은 목록에 넣습니다
  • 지정되지 않은 목록에 타일이있는 동안
  • 시작하다
  • 해당 목록에서 타일 하나를 선택하십시오
  • 해당 타일의 이웃을 확인하고 이웃에 따라 유형을 선택하십시오
  • 지정되지 않은 목록에서 해당 타일을 제거
  • 종료
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.