Hello world - Rogue - Le Mappe

Come descritto nella pagina di Wikipedia, in un roguelike:

- Deve esserci una generazione casuale dei livelli,sebbene possano essere inclusi anche livelli predefiniti. In genere i livelli sono stanze interconnesse da corridoi, ma possono esserci anche zone all'aperto.

La mia idea è proprio questa. Generare mappe casuali ad ogni livello, ma non escludo di realizzarne anche qualcuna predefinita, tipo la mappa introduttiva per un probabile tutorial ed una conclusiva un eventuale boss o altro, ancora da decidere.

Come accennato nel post precedente, la piattaforma sarà inizialmente Windows Phone 7, tale scelta è dettata fondamentalmente da 2 motivi:

- È  un sistema che conosco bene, dato che ho già sviluppato e pubblicato applicazioni per tale piattaforma.
- Silverlight se pur limitato e dal punto di vista di prestazioni discutibile, è indubbiamente uno strumento che permette di sviluppare velocemente applicazioni ed inoltre con poche modifiche è possibile farle girare anche su Pc in locale e sul web.

Detto ciò passiamo all'argomento del post: le mappe.

Poiché la risoluzione di uno smartphone è limitata, nello specifico 800x480, la mia prima idea (che potrebbe cambiare nel tempo) è quella di creare mappe con dimensioni pari a multipli di quella risoluzione. Ciò non sarebbe necessario ai fini del gioco ne della programmazione, ma in tal modo ogni volta che considero una porzione della mappa so che questa può essere visualizzata nella sua interezza, e questo può tornar utile se in tale porzione voglio creare una singola stanza ed ambientarvi magari un dialogo.

Come funziona.

Ogni porzione di mappa è costituita da 16 celle orizzontali e da 9 verticali, di grandezza 50x50 (infatti 800 / 50 = 16 e 480 / 50 = 9).

Logicamente sono rappresentate da una matrice di questa forma

P[9][16] =
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1;
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1;
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1;
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1;
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1;
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1;
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1;
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;

Dove il valore 1 rappresenta un muro e lo 0 un’area libera
Si P una porzione espressa come sopra, e siano QRSTV altre porzioni
Una mappa viene generata combinando casualmente alcune di queste porzioni facendole aderire orizzontalmente e verticalmente.

Ad esempio
PQR
STV

È una mappa di dimensione (16+16+16)x(9+9) ottenuta dalla combinazione di 6 porzioni.
Ovviamente bisogna garantire che le zone siano comunicanti.
Inoltre, dopo la combinazione, bisogna accertarsi che sia presente o eventualmente create un muto perimetrale dalla mappa.

Ecco un’illustrazione. Spero sia più chiara delle mie farneticazioni.



Se conoscete altri metodi, magari più efficienti, fatemi sapere, grazie

Commenti

Post popolari in questo blog

Indovinello: Soluzioni!!!

Gli indovinelli che ci avete mandato 10