Skip to content

Polycubes

Unimmagine di gioco

Polycubes è un giochino che ho fatto completamente da solo, tra l’estate 2007 e l’inverno 2008. E’ un clone di block out, un gioco antico che mi piace molto e poi lo schema di gioco mi permette di fare esperimenti vari.

Chi mi conosce da molto tempo saprà che non è il primo clone di block out che faccio, già nel 2000 ne feci uno, a quei tempi mi servi per imparare DirectX e la programmazione in C++. Di quel primo esperimento ricordo le texture create real-time tramite GDI (scelta che mi ha portato ad averlo incompatibile con windows da lì a qualche mese 😛 ) e la scelta di usare l’attuale desktop di Windows come base di gioco: praticamente a inizio partita fotografavo il desktop e lo usavo come sfondo. Pensavo di riusare questa idea per l’introduzione di un gioco, ad esempio fai partire il programma e la prima cosa che vedi è un fade dal tuo desktop e il menù principale oppure vedi il tuo desktop che si stacca e va via.

Il menù principale

Tempo fa’ diedi un’occhiata al codice che scrissi a suo tempo e devo dire che non era così male per essere praticamente il mio primo grosso programma scritto in C++. Le classi sono abbastanza definite e indipendenti ed in generale è abbastanza ordinato, potrei dire che non ho cambiato molto lo stile negli ultimi 8 anni 😀 .

Anche questa versione mi è servita per affinare le mie capacità di programmazione e per studiare al meglio alcune librerie. La parte grafica del gioco è scritta in OpenGL, libreria che conosco molto bene. Ho usato polycubes per crearmi una serie di file da tenere nel PC per cominciare in modo veloce nuovi progetti in OpenGL e per integrare le estenzioni che uso più spesso. Praticamente ho creato dei file che importati in un progetto mi gestiscono subito la modalità in finestra o full-screen dell’applicazione, init di OpenGL e la distinzione tra la parte OpenGL e quella windows nella visione un giorno di scrivere l’unico file che usa pesantemente le API Windows sotto Linux, Mac OS o Haiku.

un altro screenshot

L’altra libreria che ho studiato con Polycubes è OpenAL, libreria per il sonoro con supporto per il mixing hardware, l’audio 3D ed effetti realtime. Devo dire che non mi sono trovato malissimo con questa libreria anche se c’è un’aneddoto che devo raccontare: Quando ho pensato che polycubes fosse abbastanza maturo lo portai in Idoru per farlo vedere ai colleghi, ma appena provai ad avviarlo nel pc dell’ufficio esso fece andare in tilt il sistema e riavviare completamente il Pc, dopo un pò di prove e di studi scoprii che il dispositivo hardware della scheda audio integrata NVidia non funzionava e crashava miseramente, così misi il dispositivo audio tra le opzioni e decisi di usare come dispostivo pre-impostato quello software. Mi ritengo fortunato per avere avuto questo problema, la documentazione OpenAL dicono di usare il dispositivo di default.

ancora unaltra immagine

Per quanto riguarda il sonoro ricordo che sono stato per molto tempo indeciso su cosa mettere, poi un giorno ebbi l’idea di mettere della musica Polka durante le sessioni di gioco, come riferimento alle origini russe di Tetris, capostipide dei giochi rompicapo e palesemente ispirazione di block-out, dopo un pò di ricerche trovai un compositore che rilasciava liberamente le sue musiche per scopi non commerciali.

Per quanto riguarda il resto della grafica ho deciso di mantenere tutto molto sobrio ed elegante (scelta forse non proprio in linea con le polke) infatti uso ovunque un font Roman e la maggior parte del gioco è in bianco e nero. Ho speso molto tempo nei menù, sia nella loro progettazione e che nella loro implementazione, in essi ci sono alcuni controlli strandard di windows come i pulsanti, le caselle di testo e le combo-box (i menu a comparsa con un pulsante sulla destra), che ho ricreati nello stile da me scelto, l’unica nota dolente è che tutto il menù non è navigabile da tastiera, forse un giorno implementerò anche quella parte.

La schermata configurazione

Una delle scelte fatte per i menù riguarda le finestre di dialogo, esse sono pensate per sembrare fatte di vetro smerigliato con un bordo di gomma nera intorno, se sposti la finestra di dialogo intorno allo schermo noterai che lo specular della gomma si adatta, quando l’ho fatto credevo si notasse di più e invece…

La parte gioco è quella che avevo bene in mente quando ho cominciato il progetto, c’è il solito buco a centro schermo ma come per il vecchio block-out esso riceve luce dall’esterno e solo una sua parte è illuminata direttamente, il resto è illuminato solo indirettamente tramite un calcolo radiosity che ho enfatizato sia nel color-blending sia nell’intensità. Esso è un semplicissimo Matrix-Radiosity con ottimizzazioni dal punto di vista computazionale e uso del multi-thread. Mi sono divertito molto a creare il calcolo radiosity, alla fine ho deciso di lasciare la resa con filtro nearest per dare ancora di più un gusto retrò.

il gioco

Successivamente comprai l’ottimo libro di Jensen “Realistic Image Synthesis Using Photon Mapping” e spesso medito di ricreare la parte radiosity tramite photon mapping cosa che incrementerebbe notevolmente la qualità finale.

Una cosa che invece non avevo subito in mente era l’aspetto dei singoli pezzi, essi hanno avuto fin da subito i contorni arrotondati su questo aspetto ho davvero perso un sacco di tempo, quanto poligoni doveva avere la bombatura, come creare un sistema di creazione dei pezzi automatico che mi liberasse dal dovere modellare tutti e 41 policubi. Alla fine ho creato un classe che si occupa di modellare e texturizzare un singolo cubo e gestisce in automatico l’assensa o la presensa di cubi nelle vicinanze. Mi ricordo che sperimentai anche l’effetto della fuzione dei pezzi una volta caduti, ma devo dire che la cosa non mi è piaciuta per niente e che rimanga una certa storicità dei pezzi mi piace davvero molto. Ricordo che le prime versioni non avevano la griglia sui pezzi ma anche se la cosa non dava problemi in fase di anteprima dava molti problemi andando avanti col gioco visto che non avevi più i riferimenti alle basi, e così i pezzi hanno assunto la forma finale che potete vedere.

Ricordo pure che avevo pensato di mettere il pezzo attualmente in gioco come fatto di vetro, con ombra caustica e danti belli effetti real-time, a parte che senza photon-mapping real-time la cosa non era possibile, facendo delle prove in pov-ray ho visto che il pezzo così fatto non permetteva di vedere il gioco sotto rendendo di fatto il gioco ingiocabile… peccato magari un giorno, quando passero al photon-mapping, lo mettero come opzione sboronante 😀 .

Ancora il menù princilpale

Altra cosa del gioco è la visione laterale in basso a sinistra, è presente una cosa simile nel primissimo block-out, ma la’ dava solo una visione dell’altezza a cui si era giunti invece io trovo molto più utile una visione rotante dell’intero schema di gioco.

Polycubes è personalizzabile, anche se dubito che qualcuno ci lavorerà mai sopra, fatto ‘sta che si possono creare i propri set di pezzi e le proprio configurazioni di gioco unendo un set di pezzi ad una particolare dimensione dello schema di gioco. poi ogni configurazione ha il suo sistema di record. La stessa cosa era presente nel vecchio block-out e l’ho sempre trovata una bella cosa. Come altro livello di personalizzazione è la localizzazione, essa si basa su file testo e il gioco è stato creato in modo tale che se vengono creati altri file dello stesso tipo li riconosce e li aggiunge tra le lingue personalizzabili, a tale scopo ho inserito anche molti caratteri accentati, greci e cirillici nel font base ed essendo quest’ultimo basato su png e anch’esso modificabile da un’utente di buona volontà. infine se uno vuole può sostituire gli ogg delle musiche altre di sua scelta.

Una schermata di aiuto

Verso la fine del progetto mi accorsi che sarebbe stato bello ed utile una schermata di aiuto, così da illustrare i tasti. La cosa mi ha preso circa 2 giorni tra progettazione e realizzazione ed alla fine mi sono pure divertito a creare queste piccole animazioncine illustrative, mi ricordo che nella schermata delle rotazioni 2 pezzi sembravano ruotare nelle stesso verso e la soluzione è stata semplicemente fare partire uno dei due 180 già girato… strani scherzi della mente umana 🙂 .

Direi che ho scritto tutto quello che volevo, Polycubes lo trovate su source-forge, avrete bisogno di installare OpenAL a meno che non avete giocato ad unreal o simile ( anche loro usano OpenAL e le installano insieme al gioco).

Ricapitolando: se ci sarà molta richiesta implementerò i menù tramite tastire, il radiosity in photon-mapping e la gestione del pezzo attuale in vetro smegliato. Ma attualmente non ho nessuna intenzone di farlo 😛

One Comment

  1. I must tell you that it’s hard to find your posts in google,
    i found this one on 14 spot, you should build some quality
    backlinks in order to rank your page, i know how to help you,
    just type in google – Arshumaker SEO tips

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

*