diumenge, 15 de febrer del 2009

Estructura de l'aplicació

Hui no he fet res del Arounders. M'he tirat tot el matí configurant el Pitufo i baixant codecs per a que Guillem se puga vore els Baby Einstein eixos. Al final, despres de ficar el FFDSHOW eixe de sempre, nomes puc vore la meitat. Ara que caic, no he fet la típica instalació del PowerDVD per a que el comp tinga codecs de MPEG2, igual es aixó (encara que me pareix extrany que el ffdshow no en duga). Be, ja ho miraré el cap de setmana que ve. De totes formes, si algú mes ilustrat en codecs me pot guiar un poc...

Com no tinc res nou que contar, aprofite per a explicar un poc la estructura que segueix el joc. Si una cosa volia era que el programa fora lo suficientment modular i estructurat com per a no ser un fer la mà si el dia de dema (o hui mateix) necesitava canviar alguna cosa. Tampoc volía que, si algún objecte volía pintar en pantalla, tinguera que cridar a mà a les funcions de SDL, perque si demà canvie de llibreria tindria que recorrer tot el codi fent canvis. Així que he creat diversos moduls amb diferents responsabilitats. El sistema encara no es optim del tot, pero ja aniré refinant-ho en seguents jocs.

En primer lloc tinc un objecte anomenat AppController, el qual el cree en el main(), invoque el seu mètode Go() i quan acava el destrueixc. Eixe es tot el codi que hi ha al main() (per als que ja no recorden C, la funció main() es el punt d'entrada a l'aplicació).

I que fa aquest objecte? Per a començar, inicialitza SDL, despres crea un objecte DrawManager i un objecte GameInfo i fica titol a la finestra. DrawManager es un objecte que inicialitza la pantalla i pinta sobre ella. Serà l'unic encarregat de tocar directamente les funcions gràfiques. GameInfo es un objecte tonto que l'unic que fa es mantindre informació general del joc, en aquest cas, el estat del joc i el nivell en el que estem.
Una vegada inicialitzat, entra en un bucle del qual nomes eixirà quan gameInfo->estat == ESTADO_SALIR. Dins del bucle fa un switch per a comprobar en quin estat estem i, depenent del estat, crea i crida a un altre objecte, que serà del tipus SequenceController, MenuController, GameController... passant-li el GameInfo, i que prendrà el control. I quan eixe objecte acave, tornarà el nou estat en el que està la aplicació.

Així un fluxe habitual serà començar amb el estat == ESTADO_LOGOS, cridar al objecte LogosController, que mostrará els logos de JailDoctor Games, de THX i aixó, i quan acave tornarà ESTADO_SECUENCIA. De nou en el bucle, al vore eixe estat se cridarà a un objecte SequenceController, que al vore que GameInfo->fase = 0, mostrarà la sequencia de inici i tornarà ESTADO_MENU. I així tot el programa, fins que algun d'eixos objectes torne ESTADO_SALIR, que acavarà el bucle, finalitzarà SDL i els objectes que li pertanyen, i s'acavarà la execució.

Be, amb açò vos feu una idea. També esta el objecte KeyboardManager, MouseManager... Eixe tipus d'objecte se'ls aniràn passant tots els demes. Així la gestió de pantalla, teclat, so... està centralitzada en un únic objecte, pero tots els que ho necesiten tenen eixe objecte per a demanar-li coses.

En resum, els objectes *Controller son objectes que tenen inicialització, execució i finalització. Controlen la sequencia del programa. El objectes *Manager son responsables d'una part de la funcionalitat a baix nivell del programa, es creen nomes una vegada i els demes objectes tenen acces a ells (pero no directament a la seua funcionalitat).

Be, si de cas ja contaré més cosetes altre dia...

Cap comentari:

Publica un comentari a l'entrada