lunedì 25 luglio 2011

Tutorial: scriviamo un gioco in C++... Tris! (parte 2)

Nella prima parte abbiamo stabilito il gioco da sviluppare, Tris, e le caratteristiche fondamentali che dovrà avere. Abbiamo inoltre stilato una lista di requisiti, una sorta di scaletta delle cose da implementare.

In questa seconda parte metteremo a punto i tool da utilizzare e inizieremo ad imbastire il codice che ci porterà a testare tutte le dipendenze.

Io svilupperò questo progetto sotto Windows avendo riguardo di utilizzare tecnologie portabili senza intoppi particolari anche sotto Linux e, immagino, Mac.

Come editor la mia scelta (personale) ricade su CodeBlocks. Le librerie saranno SDL e la sua estensione SDL_ttf per la gestione dei font e del testo. Non gestiremo l’audio, veramente inutile (se non dannoso) in un gioco da ufficio. Per limitare al massimo le dipendenze e la relativa complessità di gestione ci faremo andar bene il supporto ai formati grafici di SDL, cioè il bitmap (.bmp). Esiste comunque l’estensione SDL_image per il supporto a praticamente tutti gli altri formati.

Preparare l’ambiente


Ci sono molti modi per impostare l’ambiente e le librerie: sotto Windows preferisco copiare tutti gli include, le lib e le dll direttamente nella struttura di MinGW (il compilatore) presente dentro la directory di installazione di CodeBlocks.

Questo passaggio non dovrebbe creare particolari problemi tranne per SDL_ttf e la mancanza nelle lib del file di libreria statica .a. Al suo posto troviamo, almeno al momento in cui scrivo, solo il file SDL_ttf.lib, ovvero il file di libreria per Visual Studio. MinGW lavora invece con i .a, ma niente paura. Nonostante il panico che serpeggia in diversi siti è sufficiente rinominare SDL_ttf.lib in libSDL_ttf.a e il gioco è fatto.

(PS: se qualcuno avesse la bontà di spiegarmi questa piccola magia, scoperta molto più per frustrazione che per intuizione, gliene sarei grato)

Lanciamo CodeBlocks e creiamo il nostro progetto C++ con il template Applicazione Console. Io l’ho chiamato TrisLick. CodeBlocks crea per noi il file main.cpp con un tranquillizzante e minimale hello world. Volendo avremmo potuto anche sfruttare il template per applicazioni SDL, ma preferisco sempre partire da una base pulita e aggiungere. Voi fate pure come credete meglio.

Ora dobbiamo includere i file header e linkare le rispettive librerie statiche dei nostri componenti di terze parti. Tasto destro sul titolo del progetto nell’albero di sinistra e Build Options. Nella scheda Linker settings specifichiamo i collegamenti alle librerie:



Se non abbiamo copiato i file nella struttura di MinGW sarà opportuno anche specificare i percorsi sul nostro disco perchè il compilatore trovi le risorse: lo possiamo fare dalla scheda Search directories di Build Options.

Testare le dipendenze


Modifichiamo leggermente il nostro hello world perchè testi il corretto collegamento con SDL:

#include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>

using namespace std;

int main(int argc, char** argv)
{
SDL_Init(SDL_INIT_VIDEO);
TTF_Init();

cout << "Hello world!" << endl;

TTF_Quit();
SDL_Quit();

return 0;
}

Compiliamo ed eseguiamo. Se abbiamo fatto tutto bene il programma parte e termina senza errori. Ora siamo veramente pronti per partire!

1 commento:

  1. Le librerie statiche su GNU/Linux hanno estensione .a, essendo MinGW un set di tools di sviluppo provenienti da quell'ambiente ma modificati per funzionare su windows, e probabile che nonostante tutto si debbano utilizzare le estensioni che si utilizzano in ambiente GNU/Linux, per essere riconosciute dal linker.

    RispondiElimina