답변:
근처 블록을 확인하고 거기에 따라 확률을 변경하는 알고리즘을 사용할 수 있습니다. 그러나 그것은 대부분 잘못된 접근법이라고 생각합니다.
당신이보고 싶은 것은 프랙탈 노이즈 유형입니다-이 경우 펄린 또는 단순 노이즈입니다. 노이즈를 생성하면 -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
세분화 할 때 잃어버린 크로스바가 없기 때문에 삼각형에 더 효과적입니다.
물론, 가장 좋은 결과는 이러한 방법을 결합하여 얻을 수 있습니다. 계층별로, 일부 기술은 큰 땅을 제공하고, 다른 기술은 멋진 동굴을 제공하고, 다른 사람들은 언덕을 위해 일하며, 더 많은 것은 물 시스템을 위해 일할 것입니다.
이 작업을 수행하는 비교적 간단한 방법은 임의의 위치에 많은 핵을 생성하는 것입니다. 이 점 들의 보로 노이 다이어그램 을 그립니다. 결과의 각 영역에 요소를 지정하십시오.
이로 인해 추악하고 기계적인 느낌이 듭니다. 테두리를 약간 어둡게하면 괜찮은 모양이됩니다.
큰지도를 생성하는 경우 두 가지 수준에서이 작업을 수행 할 수 있습니다. 핵 20 개를 사용하여 초기 보로 노이 다이어그램을 만들고 각 결과 지역을 국가라고합니다. 400 핵을 사용하여 다른 다이어그램을 작성하고 각 결과 영역을 하나의 비 캐리지라고합니다.
한 국가 내에 완전히 포함 된 모든 목차에는 국가의 요소가 있습니다. 두 개 이상의 국가에 부분적으로 포함 된 Vicarage는 둘러싼 국가의 요소 중 하나를 무작위로 가져옵니다.
이 포스트는 사진을 볼 가치가 있지만, 나는 그것을 제공하기에는 너무 게으르다.