Generazione di un layout di città in una griglia


9

Voglio generare un layout di città in una griglia quadrata (renderizzata in modo isometrico, ma non importa) utilizzando i seguenti elementi:

  • 2x2 case
  • Strade, 1 unità di larghezza
  • Canali, 1 unità di larghezza

Layout di esempio:

Layout di esempio

  • Ho sempre un numero specifico di case e tutte le strade e i canali necessari per collegarle tutte.
  • Le case devono avere due pezzi di strada davanti alla porta d'ingresso (che punta sempre verso destra)
  • Sarebbe bello avere dei campi di erba (vuoto) tra di loro.

Esiste un algoritmo pronto per questo? In caso contrario, quale direzione dovrei pensare per implementare questo?

Risposte:


8

Ci sono molti modi per andare a seconda di come lo desideri. Ecco uno schema approssimativo di un modo che penso si adatterà alla tua descrizione:

Per prima cosa genera i canali. Quindi inizia a posizionare le case a caso, per ogni casa che posizioni, posiziona la strada di fronte a essa e traccia una strada da quel pezzo alla rete stradale esistente, se non è possibile o posizionando la strada di fronte si ottiene un brutto blocco 2x2 di riposizionamento stradale della casa. Rileva alcuni punti stradali vicini tra loro ma molto distanti seguendo le strade esistenti e prova a creare delle scorciatoie per quelli.

Questo genere di cose richiede soprattutto sperimentazione ed esperienza. Spesso otterrai buoni risultati facendo alcuni dettagli in modo casuale, determina se soddisfa alcuni criteri e annulla e riprova se non lo fa.

Per questo compito esatto avrai sicuramente bisogno di una buona conoscenza del pathfinding di base, a meno che tu non sia già un esperto, vai a leggere sull'argomento. E ricorda, il pathfinding non deve essere solo il percorso più breve, per l'ultima parte della mia descrizione potresti voler dare un peso al riutilizzo di percorsi che sono già lì.

Questo non è affatto un compito facile, se rimani bloccato torna e ci mostra il tuo codice e alcuni esempi di output e spiega in dettaglio come vorresti che fosse diverso.

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.