Bạn có thể sử dụng một thuật toán kiểm tra các khối gần và thay đổi xác suất tùy thuộc vào những gì ở đó - nhưng tôi nghĩ đó phần lớn là cách tiếp cận sai.
Những gì bạn muốn được xem xét là các loại tiếng ồn fractal - trong trường hợp này, tiếng ồn perlin hoặc đơn giản. Nếu bạn tạo ra tiếng ồn, bạn sẽ nhận được các giá trị từ -1 đến 1.
http://en.wikipedia.org/wiki/Perlin_noir
Sau đó, bạn có thể điều chỉnh mực nước của mình bằng cách đặt ngưỡng của những gì tạo ra nước. Đối với các khối khác, bạn có thể chạy một tiếng ồn thứ hai để chuyển đổi giữa đá và cỏ. (bằng cách này bạn có thể có những mảng nước lớn, nhưng những khối đá nhỏ hơn).
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
}
Vì tôi nghĩ rằng phương pháp quét và quăng quá phức tạp và không quá mạnh mẽ, tôi sẽ đề xuất một phương pháp khác mà tôi rất thích:
Đặt một lưới trên bản đồ của bạn, phá vỡ bản đồ thành các hình vuông lớn.
Tạo một số ngẫu nhiên tại mỗi giao lộ (từ 0 đến 1 sẽ hoạt động theo tỷ lệ phần trăm của bạn)
Chia nhỏ bằng cách cắt mỗi hình vuông thành 4 hình vuông chẵn - theo các đường cũ và nơi bạn tìm thấy các đường phân chia, tạo một số ngẫu nhiên giữa 2 điểm liền kề, tương tự, đối với tâm của chữ thập, tạo ra một điểm nằm giữa điểm cao nhất và các giá trị thấp nhất.
Rửa sạch và lặp lại. Bạn sẽ nhận được sự ngẫu nhiên ban đầu từ lần đầu tiên, nhưng những lần sau sẽ mang lại sự đồng nhất Xin lỗi cho các số ngẫu nhiên psuedo:
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
Điều này thậm chí còn hiệu quả hơn đối với các hình tam giác, bởi vì bạn không có thanh ngang bị mất khi bạn chia nhỏ.
Tất nhiên, kết quả tốt nhất tuyệt đối sẽ đến từ việc kết hợp các phương pháp này - lớp trên lớp, một số kỹ thuật sẽ mang lại cho bạn những khối đất lớn, những cái khác sẽ cho bạn những hang động tuyệt vời, những cái khác hoạt động cho những ngọn đồi và nhiều thứ khác sẽ hoạt động cho hệ thống nước.