Una semplice mappa, quattro biomi e come distribuirli


16

Ecco l'idea di base: ho un gioco Rogue-ish, forse Dwarf Fortress-ish, con un mondo sotterraneo generato casualmente e diversi ingressi sotterranei sparsi intorno ad esso. Ho già praticamente coperto i sotterranei , ma sono bloccato su un aspetto del mondo sotterraneo .

Detto overworld, considerato come una mappa 2D di schermi, dovrebbe avere una distribuzione forse simile a un blob di quattro diversi temi o biomi: praterie, deserto, neve e palude, ciascuno con la propria quantità totale di schermi. Diciamo che la mappa è 8x8, che offre 64 schermate uniche. La metà di questi potrebbe essere praterie, un quarto di deserto e palude e neve ne ottengono un quarto ciascuno:

mockup di una possibile mappa del mondo con città e luogo di partenza, ma nessun ingresso sotterraneo

Sembra che la riduzione della palette abbia reso la neve dello stesso colore della palude. In origine, c'erano otto schermi di neve nell'angolo inferiore e un'area di palude a otto schermi leggermente sfalsata nel mezzo. Mi dispiace, e per favore ignora gli indicatori di posizione.

Il meglio che potevo ottenere erano alcune forme serpeggianti, e spesso abbastanza con combinazioni insensate come il deserto che serpeggiava nella neve (o viceversa). Non posso per la vita di me capire come renderlo bello e insipido, per non parlare del fatto che abbia un senso climatico (?). Quindi, come faccio a generare una mappa del bioma come nel modello?

Va bene, su richiesta: il mondo in realtà non è molto più grande di quell'esempio, e quello di cui ho bisogno è solo un modo per diffondere alcune macchie che determinano aspetti tematici, con l'ulteriore limitazione che la neve non può toccare il deserto. Gli schermi non scorrono e se uno schermo è impostato su "deserto", non ci sarà erba da nessuna parte su di esso.


Sei disposto a utilizzare librerie di terze parti o vuoi codificare la tua soluzione?
William Mariager,

Mi piacerebbe preferisco codifica mio.
Kawa,

Le dimensioni del bioma sono fisse?
Kaao

Potresti modificare il post con un elenco di punti delle regole esatte che vuoi che segua la generazione della mappa? Sarebbe più facile per noi affrontare il problema sapendo esattamente cosa stiamo cercando.
William Mariager,

Modificato, e le dimensioni del bioma, beh, sono andato con quelli per esempio. Per un mondo 16x16, Desert potrebbe essere ancora un quarto dell'area e così via, ma questo è principalmente per garantire che certe aree saranno lì.
Kawa,

Risposte:


8

Esistono molti modi per scuoiare questo gatto, tuttavia uno dei più interessanti è l'uso degli automi cellulari . Inizia con la griglia vuota e aggiungi alcune celle iniziali seme in posizioni casuali. Questi dovrebbero essere di alcuni tipi di biomi di base non miscelati. Dì: erba, deserto, neve, oceano.

Sulla base delle regole di crescita del tuo progetto, che potrebbero presentare una certa casualità (non mi interessa che tecnicamente rompa l'idea di CA, vero?) Le hanno fatte crescere ad ogni passo nella mappa. Regole aggiuntive possono essere tali che se sei sull'oceano e sei vicino all'erba o alla palude, potresti trasformarti in palude. Se sei vicino alla neve, potresti diventare ghiaccio, se sei vicino al deserto, potresti prosciugarti e diventare anche deserto.

Lo stesso potrebbe valere per altri mix, e in teoria anche sub-mix come paludi ghiacciate, tundra o giungla che spuntano da grandi distese di foreste che si sono sviluppate da grandi distese di prati.

Le possibilità sono infinite e possono anche essere continue. Poiché queste regole sono tutte semplici, è possibile implementare ambienti che cambiano nel tempo. In combinazione con le informazioni sull'altezza e le regole che ne tengono conto, puoi coltivare laghi e fiumi, bloccare la crescita delle foreste sulle montagne e altre cose fantasiose.

Quella mappa di altezza può essere il risultato del rumore del perlin, o del diamante quadrato o persino di interi altri modelli di CA. In effetti, è possibile modificare quella mappa anche col passare del tempo modellando la tettonica a zolle, spingendo verso l'alto le montagne, affondando nelle trincee e persino lasciando che i fiumi abbassino il paesaggio creando canyon.

Questa tana di coniglio si estende per sempre.


Upgrade per il suggerimento della CA. Si adatta bene al commento di Valmond.
Kawa,

Sareste sorpresi di quanto una soluzione CA possa essere semplice per questo problema. Regole semplici e una mappa iniziale casuale possono produrre paesaggi straordinariamente dettagliati e "realistici".
DampeS8N,

Sono andato con il principio CA. Non è ancora del tutto corretto poiché l'unica cosa che tiene separati deserto e neve sono alcune regole di posizione assolute, ma per ora funziona bene.
Kawa,

1
Una soluzione opzionale al problema neve / deserto è quella di stabilire una regola per creare un diverso tipo di bioma in cui la neve incontra il deserto. Di ', palude. Quindi la palude può continuare a crescere normalmente. Potresti avere ancora bordi neve / deserto, ma in realtà è abbastanza naturale. In effetti, gran parte del deserto sulla terra è coperto di neve. - in breve, la neve potrebbe avere la regola tale che se un vicino è deserto, si trasforma in palude.
DampeS8N,

11

Risposta breve ma dovresti davvero controllare questo articolo out- www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ Spiega un algoritmo sulla generazione della generazione casuale di terra asciutta e biomi basato su zone di umidità designate e regioni di altitudine. Ma nel tuo caso, basta impostare i propri valori per la distribuzione desiderata.

(modifica grande) Lo renderò molto più chiaro per quali concetti di generazione delle mappe è necessario applicare. Utilizzare un sistema di coordinate con 1 unità per schermo, con valori in virgola mobile. Genera un piccolo insieme casuale di punti all'interno di queste coordinate, come se stessi creando un diagramma Voronoi ma in realtà non creeremo le forme casuali. Invece il diagramma sarà implicito e approssimato dalla mappa dopo aver impostato i biomi.

Ogni punto è il centro di ciascuna area del bioma. Imposta le tue regole per associare un punto a un bioma. Ad esempio, se vuoi un deserto a est e non troppo a sud o a nord, tutti i punti che sono maggiori di un certo valore X e all'interno di un certo intervallo Y avranno il deserto che li circonda.

Associa ogni schermata a uno di questi punti, che si ottiene prendendo il centro dello schermo in coordinate XY (diciamo 4.5, 8.5) e restituendo il punto più vicino al centro dello schermo.

Ecco un disegno approssimativo di un diagramma di forma sulla griglia di schermi. Non siamo veramente interessati alle linee che circondano le forme, ma sono lì per illustrare come gli schermi iniziano ad approssimare le regioni delle forme.

Voronoi-grid

Ripetere l'operazione per ogni schermata, dando a ciascuno il proprio bioma.


L'ho già visto prima ed è un po 'troppo bazooka su una zanzara per i miei gusti.
Kawa,

Bene, va bene. È molto bazooka su una zanzara. L'esempio 8x8 non era solo un esempio: il mondo non sarà davvero abbastanza grande da giustificare quella soluzione.
Kawa,

Va bene, vedo ora. Non hai davvero bisogno di differenziare i biomi da ogni singola tessera della mappa. Inoltre, il concetto proposto dall'articolo sembra fatto su misura per l'autore, ma alcune parti possono essere scelte. Sto modificando la mia risposta per renderlo più chiaro.
ChrisC,

Una soluzione ancora troppo complessa. Non c'è altezza o umidità da usare qui. Tutto ciò di cui avevo bisogno, tutto ciò che intendevo chiedere era un modo per "spargere" macchie di deserto, palude e neve fino agli importi richiesti, seguendo alcune regole extra come "la neve non può avvicinarsi troppo al deserto" .
Kawa,

@Kawa: sembra che tu sia pronto per scavare e scrivere la tua soluzione! Da quello che posso dire, hai tutto visualizzato nella tua mente, Fallo e basta! :) Ricorda che non deve essere il generatore di mappe definitivo al mondo, purché Sembri. ;)
Zolomon il

1

Risposta 1:

crescere neve e deserto, quando ciò è fatto, cercare gli incroci (proibiti) e crescere (più o meno grande) palude lì.

Scuotere e ripetere.

Risposta 2:

Per la parte 'blob', ho spostato il mio commento (come richiesto) al post:

Se cresci per iterazione, ad es. esponi 1 punto di deserto e poi cresci in modo casuale attorno a qualsiasi punto di deserto (ogni volta prendi in modo casuale uno dei punti di deserto esistenti e aggiungi 1 punto su uno dei suoi lati (dove non c'è ancora nulla)) quindi dovresti ottenere un effetto blobby ( nessuna linea lunga per esempio).

Puoi anche aggiungere una regola in modo da non poter creare una tessera deserto se c'è neve su qualsiasi tessera nelle vicinanze.


Questo non aiuta esattamente con l'aspetto blobby del problema.
Kawa,

2
se cresci per iterazione, ad es. esponi 1 punto di deserto e poi cresci in modo casuale attorno a qualsiasi punto di deserto (ogni volta prendi in modo casuale uno dei punti di deserto esistenti e aggiungi 1 punto su uno dei suoi lati (dove non c'è ancora nulla)) quindi dovresti ottenere un effetto blobby ( nessuna linea lunga per esempio).
Valmond,

puoi anche aggiungere una regola in modo da non poter creare una tessera deserto se c'è neve su qualsiasi tessera vicina.
Valmond,

Valmond, inseriscilo in una risposta.
Kawa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.