Potresti usare un algoritmo che controlla vicino ai blocchi e varia la probabilità a seconda di cosa c'è, ma penso che sia in gran parte l'approccio sbagliato.
Quello che vuoi vedere sono i tipi di rumore frattale - in questo caso, rumore perlin o simplex. Se generi rumore, otterrai valori da -1 a 1.
http://en.wikipedia.org/wiki/Perlin_noise
È quindi possibile regolare il livello dell'acqua impostando la soglia di ciò che rende l'acqua. Per gli altri blocchi è possibile eseguire un secondo set di rumore per passare da roccia a erba. (in questo modo puoi avere grandi macchie d'acqua, ma piccoli blocchi di pietra).
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
}
Poiché penso che il metodo scan and toss sia eccessivamente complicato e non eccessivamente scalabile, suggerirò un altro metodo che mi è piaciuto:
Posiziona una griglia sulla mappa, suddividendola in grandi quadrati.
Genera un numero casuale ad ogni incrocio (tra 0 e 1 funzionerà per le tue percentuali)
Suddividi tagliando ogni quadrato in 4 quadrati pari - segui le vecchie linee e, dove trovi le linee di suddivisione, genera un numero casuale tra i 2 punti adiacenti, allo stesso modo, per il centro della croce, genera un punto che si trova tra i più alti e valori più bassi.
Risciacqua e ripeti. Otterrai la casualità iniziale dal primo passaggio, ma questi ultimi daranno un po 'di uniformità Ci scusiamo per i numeri psue-casuali:
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
Questo funziona ancora meglio per i triangoli, perché non si ha la barra trasversale persa quando si suddivide.
Naturalmente, il risultato migliore in assoluto verrà dalla combinazione di questi metodi: strato su strato, alcune tecniche ti daranno grandi masse terrestri, altre ti daranno fantastiche grotte, altre lavoreranno per le colline e altre lavoreranno per i sistemi idrici.