Introduzione
i
Introduzione
Negli ultimi anni, i videogiochi sono stati soggetti ad un periodo di evoluzione
ed innovazione che hanno portato una grande quantità di utenti ad interessarsi
non solo alla semplice fruizione del prodotto, ma anche alle metodologie con cui
essi vengono sviluppati. Il progresso tecnologico ha contribuito alla diffusione
di dispositivi sempre più all’avanguardia, in grado di sostenere software di volta
in volta più complessi. Il settore videoludico ha giovato di un tale fenomeno,
portando alla realizzazione di dinamiche di gioco simili al contesto reale da cui
esse traggono ispirazione. Pertanto, è stato necessario definire un ruolo specifico
per gli specialisti in grado di concepire tali componenti e per far fronte alle
richieste dell’utenza. In tal modo, il mercato dei videogiochi ha subito una rapida
espansione, attualmente in grado di competere, per fatturato e per utili, con le
tradizionali industrie dell'entertainment e del software. Inoltre, il fattore
Interattività che essi offrono al giocatore e la qualità artistica raggiunta da alcuni
prodotti della categoria ha aperto un dibattito tra critici e filosofi sul definire tale
medium come la Decima Arte.
La Tesi nasce dalla consapevolezza della moltitudine di opportunità espressive
che è possibile comunicare mediante un prodotto videoludico e dal fatto che
l’Italia, in questo contesto, ha visto un incremento sensibile degli sviluppatori
interessati a tali software. Tuttavia, l’enorme quantità di nozioni necessarie a
coprire il lavoro richiesto per la creazione di prodotti di qualità elevata ha portato
i neofiti del settore a dover necessariamente selezionare la componente di
sviluppo da cui iniziare il loro studio, per poi in seguito integrare le proprie
lacune attingendo alle informazioni specifiche delle altre categorie di
specializzazione. Il Game Developer rappresenta una figura professionale che
conosce e sfrutta le sue conoscenze a tutto tondo per realizzare videogiochi su
cui siano presenti meccaniche e logiche innovative e che garantiscano un
feedback positivo da parte degli utenti. L’obiettivo risulta la descrizione di una
metodologia di pensiero adatta a permettere a chi intende approcciarsi per la
prima volta allo sviluppo di videogiochi di conoscere gli strumenti da cui
attingere le nozioni da memorizzare e la moltitudine di approcci applicativi
possibili.
Introduzione
ii
Il dominio di interesse dell’elaborato riguarda la realizzazione di videogiochi
2D, ovvero in due dimensioni. È stata fatta una simile scelta per facilitare la
comprensione di diverse meccaniche di sviluppo e fungere da base per una
trasposizione delle stesse in prodotti tridimensionali. Il Motore (o Engine) di
gioco utilizzato come riferimento risulta Cocos2d-x, uno strumento accessibile,
open-source e versatile, in grado di consentire la realizzazione di diverse
tipologie di videogiochi mediante l’utilizzo delle funzioni che esso mette a
disposizione per l’utente. Inoltre, è compatibile con un considerevole numero di
piattaforme di sviluppo, potendo andare incontro alle esigenze di molti
sviluppatori. Il progetto di tesi in questo documento è stato strutturato
considerando sia la componente tecnologica sia quella sociale e culturale relativa
al particolare contesto preso in considerazione.
Il primo capitolo consiste nella descrizione dei principali strumenti utili al lettore
per realizzare un videogioco. In primo luogo, vengono specificate le componenti
primarie di Cocos2d-x, i dispositivi su cui è possibile crearne i progetti e le
diverse funzionalità necessarie per la comprensione di processi di sviluppo e che
verranno analizzate nei capitoli successivi, tra cui il supporto alla multi-
risoluzione sulle diverse piattaforme. Successivamente, vengono presentati altri
strumenti complementari allo sviluppo di videogiochi 2d multipiattaforma, tra
cui Visual Studio per lavorare su Windows, Android Studio e Genymotion per
testare su Android, Tiled, Photoshop, ACID Pro per modellare rispettivamente
Mappe di gioco, Sprite ed animazioni, musiche.
Il secondo capitolo risulta complementare al primo poiché esamina le
conoscenze teoriche necessarie per poter utilizzare al meglio gli strumenti
proposti, offrendo una visione completa dei vantaggi e degli svantaggi
nell’utilizzo delle diverse soluzioni offerte. Viene discussa l’importanza del
ruolo svolto dall’Intelligenza Artificiale all’interno dei software videoludici e ne
viene presentata una forma realizzativa intuitiva e versatile, le Macchine a Stati
Finiti. A seguire, vengono esaminati gli Algoritmi di Orientamento per risolvere
un Labirinto, compiendo un confronto tra due metodologie applicative differenti.
Conclude questa parte la descrizione dell’importanza e del modo di gestire le
collisioni all’interno di tali prodotti e il ruolo svolto dalla casualità e come essa
possa essere utilizzata in modo vantaggioso in fase di Sviluppo.
Introduzione
iii
Il terzo capitolo entra nel merito della trattazione di una metodologia utile per
permettere di approcciarsi allo sviluppo di videogiochi 2D. Nello specifico,
questa sezione si occupa di definire le linee guida per una corretta progettazione
del prodotto. Lo scopo primario è quello di contestualizzare il più possibile il
titolo da realizzare, permettendo a singoli sviluppatori o team multifunzionali di
poter lavorare con rigore ed in modo efficiente. In primo luogo, vengono forniti
consigli e approcci di pensiero per fissare il genere videoludico ed il contesto
narrativo, che costituiscono la base per la definizione degli eventi e le azioni di
gioco. Dopodiché, vengono discussi i principali elementi necessari alla
concezione di una Mappa per lo scenario adatta alla particolare circostanza in
esame. Infine, vengono forniti i principali aspetti da approfondire nella
strutturazione del Gameplay, ovvero la sequenza di avvenimenti e processi
compiuti dal giocatore che contribuiscono all’evoluzione delle situazioni
descritte nel software.
Nel quarto capitolo, attingendo ai risultati ottenuti durante la Fase di
Progettazione, si delinea il procedimento di sviluppo ottimale per portare a
compimento la realizzazione del videogioco, discutendo anche delle possibilità
offerte da Cocos2d-x per strutturare al meglio soluzioni pertinenti alle
componenti progettate. Cercando di perseguire un ordine simile alle azioni
svolte in precedenza, viene presentata una metodologia di creazione della Mappa
di gioco e dei personaggi. Successivamente, si prosegue descrivendo la
creazione di una Macchina a Stati, discutendo il processo da seguire per
realizzarne struttura e comportamenti associati. Ci si sofferma poi sul ruolo delle
Scene e sul metodo migliore per collegarle e garantire un flusso di informazioni
comprensibile. Viene poi analizzato il comparto sonoro ideale per il progetto
corrente e come strutturare al meglio i suoi elementi. Conclude la sezione una
discussione sul processo di testing del prodotto e la politica più adatta da
applicare a seguito del suo rilascio sul mercato.
Il quinto capitolo presenta un esempio di un videogioco prodotto seguendo le
metodologie e gli strumenti discussi nei capitoli precedenti, Maze Mind.
Vengono analizzate le scelte compiute in fase di Progettazione e le successive
applicazioni in fase di Sviluppo. L’obiettivo di questa sezione risulta non solo la
fornitura di un esempio realizzativo di un prodotto videoludico, ma anche offrire
Introduzione
iv
una base concreta da utilizzare come riferimento per la creazione di
un’architettura software per un gioco. Vengono discusse le tecniche e analizzati
gli approcci concepiti durante l’intero processo di sviluppo, con l’ausilio di
schemi progettuali e il riscontro visivo dei risultati evidenziati all’interno del
titolo terminato.
L’ultimo capitolo descrive i risultati ottenuti attraverso la trattazione delle
metodologie di progettazione e sviluppo. Particolare riflessione viene rivolta al
software Maze Mind, agli aspetti più riusciti del progetto e ciò che può essere
modificato, migliorato o aggiunto per arricchire la qualità del prodotto. Segue
infine una trattazione in merito agli sviluppi futuri della tesi.
Capitolo 1 Background Tecnologico
1
Capitolo 1
Background Tecnologico
Per consentire lo sviluppo di software videoludici, è necessario attingere a
strumenti appositamente progettati per facilitare il lavoro del programmatore e
per permettergli di attingere a determinate funzioni senza il bisogno di crearle
ciclicamente dalle fondamenta. Pertanto, il compito dello sviluppatore consiste
nel comprendere il modo più funzionale di combinare tali caratteristiche e
saperne gestire il carico computazionale da esse apportato all’hardware su cui si
rilascia il prodotto finito.
A seguire, viene presentata la principale strumentazione utile allo scopo
suddetto, elencandone le principali componenti e i vantaggi offerti all’utente.
1.1 Cocos2d-x
Cocos2d-x è un framework open-source scritto in C++, ampliamente utilizzato
nella costruzione di giochi, applicazioni e programmi interattivi basati su una
piattaforma GUI (Graphical User Interface – Interfaccia Grafica Utente). È
supportata anche la programmazione in JavaScript e Lua. [1]
Figura 1.1: Logo di Cocos2d-x
Capitolo 1 Background Tecnologico
2
Lo strumento consta di un’ottima capacità di adattamento a qualsiasi macchina
su cui sia in esecuzione. Inoltre, la documentazione risulta ben fornita ed
organizzata in modo tale da sopperire ad ogni dubbio nell’utilizzo delle sue
funzioni.
Infine, una community florida e consolidata nel tempo ha reso il framework
sempre più accessibile e ha permesso la diffusione di molte più applicazioni
rispetto al passato.
1.1.1 Componenti Principali
Ogni versione di Cocos2d-x utilizza come primitiva principale il concetto di
Sprite. Esso corrisponde ad una grafica bitmap, ovvero un’immagine formata
dalla giustapposizione di pixel, che è progettata per essere parte di un elemento
più grande [2].
Più Sprite vengono disposti insieme per produrre una Scena, come ad esempio
un livello di gioco o un menu. Essa rappresenta un contenitore di componenti e
più Scene vengono interconnesse tra loro al fine di definire un flusso di
informazioni che costituiscono il prodotto finito. Ogni Scena contiene al suo
interno una struttura dati ad albero (Scene Graph) con la quale viene gestito il
livello di disposizione degli elementi. Ogni elemento è assimilabile ad un Nodo
e ad ognuno di essi viene assegnato un ordine-z, ovvero un attributo che
classifica la sua priorità ad essere in primo piano rispetto agli altri [3]. In questo
modo, è possibile definire elementi di Background e Foreground con efficacia e
facilità.
Un esempio lo si può notare negli HUD (Head-Up Display, componenti posti
costantemente in sovrimpressione sullo schermo) di molti videogiochi.
Capitolo 1 Background Tecnologico
3
Figura 1.2: Esempio di Scena
Nell’immagine soprastante, si può osservare un esempio di scena creato tramite
il framework. Essa rappresenta un livello del videogioco Maze Mind (v. Cap. 5).
Si può notare come il bottone posto all’angolo in basso a destra, come quello
posto in alto a destra ed il punteggio situato in alto a sinistra siano in primo piano
rispetto alla mappa. I tre elementi rappresentano l’HUD del gioco in quella
particolare Scena.
Altro importante elemento di Cocos2d-x è costituito dalle Azioni, procedure che
è possibile applicare a qualsiasi Sprite. Alcune di esse possono essere ad esempio
Rotazione, Movimento, Salto, Colorazione, Ingrandimento, Stretching
dell’immagine etc.
Infine, anche i Menu risultano una risorsa basilare ampliamente utilizzata nei
progetti di Cocos2d-x. Essi sono oggetti Nodo con la particolarità di poter