Linee Guida per la programmazione C++ con Irrlicht (1)

Autore : Manuel Montini (aka. Jekrom)

scarica il seguente tutorial in formato pdf 

Se trovate delle imperfezioni, errori o se avete commenti da fare, non esitate a
scrivermi:D

INTRODUZIONE

Benvenuti al primo tutorial dedicato al mondo di Irrlicht, spero di riuscire ad avere il tempo, la voglia e la forza di scriverne molti altri, perchè mi rendo conto che il miglior modo per conoscere effettivamente un software complesso come questo è di andare a sviscerarlo in tutte le sue parti, cercando passo passo di applicare le conoscenze acquisite alla vita quotidiana.

Sinceramente inizio a scrivere questi tutorial partendo quasi da zero, in quanto utilizzo Irrlicht da 2 giorni scarsi, ma spero di riuscire a mettere a disposizione di tutti le conoscenze che man mano apprenderò.

Dato che non mi sento certo ancora in grado di realizzare nulla di significativo con questo motore, ho deciso di dedicare i primi due tutorial ad un argomento che difficilmente viene preso in considerazione e che invece svolge un ruolo fondamentale in progetti di grandi dimensioni.

Parleremo quindi di organizzazione, cercando di buttare giù delle linee guida per lo sviluppo di un software chiaro, leggibile e sopratutto professionale. Quello che verrà descritto in questi tutorial è destinato principalmente a tutte quelle persone che non hanno idea di cosa significhi effettivamente lavorare su progetti consistenti o comunque svolti in team di sviluppo.

Le mie saranno solo delle linee guida dettate dall'esperienza di anni di sviluppo software, non voglio certo cercare di definire uno standard di lavoro, e sinceramente non credo nemmeno di essere in grado di farlo, ma mi auguro che questi tutorial almeno facciano riflettere. Prendete quello che vi sembra valido e tralasciate il resto, alla fine solo l'esperienza vi potrà dire se la strada è quella giusta o se state sbagliando totalmente. Ok quindi cosa tratterà in dettaglio questo tutorial? Inizieremo col vedere come suddividere il nostro ambiente di lavoro in modo tale da avere una struttura fissa per ogni progetto, ordinata nel suo insieme e di facile comprensione, successivamente vedremo il codice. In particolare prenderemo come laboratorio per gli esperimenti Dev-C++ (se non lo avete e volete utilizzarlo vi rimando al tutorial “Iniziare con Irrlicht e Dev-C++” presente sul sito di Irrlichtitalia).

Vedremo quindi come settare i parametri dell'ambiente di sviluppo in modo tale da sfruttare le potenzialità della nostra struttura e successivamente andremo a vedere bremente come suddividere il codice su più file, per consentire una migliore strutturazione del progetto.

Se pensate che questo tutorial non vi sia utile, passate direttamente al prossimo :D

Buona lettura.

La struttura del progetto

Quando nasce l'idea di un progetto, raramente si ha ben chiaro quale sarà il traguardo di arrivo, molto spesso non avere obiettivi chiari porta al fallimento dei progetti. Questo avviene ancor più frequentemente quando i progetti sono di grandi dimensioni e si sottostimano i tempi di sviluppo e di test. Una buona fase di analisi preliminare riesce talvolta a fornire una stima più adeguata. Tralasciando totalmente come effettuare e gestire una buona fase di analisi preliminare di un progetto, passiamo a quello che ci interessa esaminare, ovvero la parte relativa allo sviluppo vero e proprio.

Partiamo dal presupposto che il 90% delle persone che sono a leggere questo tutorial hanno intenzione di sviluppare un videogioco, oppure cercare di fare una cosa molto simile. Ebbene spesso si tende a sottostimare la mole di lavoro che sta dietro ad un problema così complesso.

Come possiamo muoverci in modo tale da non fallire ancora prima di partire? Come possiamo evitare di scrivere in un unico listato 2 milioni di righe di codice, per poi impazzire quando ci si presenta un inevitabile errore?

La soluzione a questi interrogativi è molto semplice, strutturando il progetto in modo tale da poter sempre tenere sotto controllo ogni singola parte. Andiamo nel dettaglio. Creiamo una cartella che conterrà il nostro progetto e la chiamiamo “tutorial” che fantasia vero? Ottimo adesso al suo interno iniziamo ad inserire le sottocartelle che andranno a scomporre il problema. Iniziamo col creare la cartella “src”, la cartella “include” e la cartella “prj”. A che cosa servono?

Nella cartella src andremo ad inserire i nostri file con i codici sorgenti, in pratica i file di tipo nome.ccp, in questo modo avremmo un unico luogo dove saranno inseriti questo tipo di file.

Nella cartella include invece andremo a mettere tutti i file di tipo nome.h, ma cosa andremo a mettere dentro la cartella prj?

La cartella prj sarà dedicata alla gestione dell'intero progetto, tipicamente all'interno andremo a mettere quei file di controllo generati dal nostro ambiente di lavoro. (Per esempio il file progetto.dev creato da Dev-C++).

Adesso? Non è finita, abbiamo ancora da inserire altre cartelle, la cartella “data” dove andremo a mettere tutti i dati utilizzati dal nostro gioco, come le immagini, le mappe, i modelli, etc. Creiamo una cartella “obj” dove andranno a finire i compilati, ed una cartella “doc” dove andremmo a mettere tutte le nostre documentazioni. Chiudiamo inserendo una cartella “test” dove andremo a tenere traccia dei test che effetueremo sul nostro codice.

Solitamente oltre a queste cartelle sono presenti anche alcuni file di testo, un README che ci informa brevemente su come utilizzare gli strumenti all'interno del progetto, un AUTHOR nel quale troviamo i contatti degli autori e un CHANGELOG dove sono annotate le modifiche significative che vengono apportate al codice. Se il software necessita di un'installazione particolare avremo anche un file INSTALLATION che ci dice come muoverci.

Questo è tutto, ed ora?

Impostare Dev-C++

Appena avviato Dev-C++ decidiamo di creare un nuovo progetto. Per fare questo andiamo nel menu e scegliamo

File->Nuovo->Progetto

Scegliamo Empty Project e come Nome mettiamo il nome che vogliamo dare al progetto. “Tutorial” naturalmente :D

A questo punto ci chiederanno dove creare il progetto, scegliamo la cartella prj che abbiamo creato in precedenza ed il file Progetto.dev verrà messo li in automatico. Perfetto ed ora? Iniziamo ad impostare tutto, premiamo con il tasto destro del mouse sul nome del progetto, si aprirà un menù a tendina dal quale andremo a scegliere la voce “Opzioni di Progetto”.

Nel dialog che si è aperto abbiamo la possibilità di selezionare tutte le impostazioni, se volete nella voce “Generale” potete scegliere l'icona che andrà a contraddistinguere il vostro eseguibile. Mettete un'icona dentro la cartella data e inseritela. Andiamo sul tab “Parametri” , premiamo sul bottone “Aggiungi libreria o oggetto” e selezioniamo la libreria di Irrlicht… per chi non lo sapesse questa si trova nella cartella “\lib\Win32-gcc” di Irrlicht e si chiama “libIrrlicht.a”.

Ottimo, ora andiamo in “Files/Cartelle” e scegliamo “Cartelle Include”, aggiungiamo il path relaivo agli include di Irrlicht “c:\irrlicht\include” ed il path relativo ai nostri include “c:\Tutorial\include”.

Non abbiamo ancora finito, in Opzioni come cartella di output dell'eseguibile scegliamo la nostra cartella chiamata Tutorial, in modo tale che il nostro file eseguibile sia subito pronto all'uso e come cartella di output dei file oggetto scegliamo la cartella “obj”. Perfetto, ora possiamo dire ok ed uscire dal dialog. Cosa ci resta ancora da fare?

Andiamo nuovamente sul nome del progetto con il tasto destro del mouse e scegliamo “Aggiungi Cartella” che andremo a chiamare “src”, ripetiamo l'operazione inserendo una cartella di nome “include”. In questo modo potremo vedere ordinati tutti i nostri file anche da
dentro Dev-C++. Perfetto ora potete salvare il progetto.

Entriamo nel codice

Finalmente possiamo mettere mano al codice, prendiamo come esercizio il secondo esempio presente nella cartella di Irrlitch, sicuramente non è un codice fatto male, ma quello che noi vogliamo ottenere è qualche cosa di strutturato e non una marea di codice in un unico file.

Iniziamo quindi con l'organizzarlo in questo modo: Avremo un file “main.cpp” che conterrà tutta la parte di inizializzazione del gioco, avremo un file “Game.cpp” con relativo “Game.h” che al suo interno avrà il codice utile per la gestione effettiva del gioco: camere, livello …. ed infine avremo un file chiamato “Define.h” dove al suo interno verranno inserite tutte le informazioni dell'intero software.

Ed ora? Ebbene ora vi resta da leggere il tutorial numero 2, che spiega alcuni formalismi per la scrittura di un codice pulito e chiaro. Una volta finito di leggerlo troverete allegato ai due tutorial un progetto che unisce entrambi i tutorial, quindi suddiviso bene e scritto secondo i formalismi definiti nel secondo tutorial.

Quindi non vi resta che esercitarvi :D

Ciao e a presto!!!

Manuel <aka. Jekrom>


Un commento per “Linee Guida per la programmazione C++ con Irrlicht (1)”

  1. Paolo ha scritto:

    Un tutorial molto chiaro e lineare, forse non sarĂ² l’unico a dire questo, ma voglia aggiungere che se gli altri che seguiranno saranno dello stesso livello ci sarĂ  da imparare molto.
    Auguri e buon lavoro.