Nel Loop. – Creazione di un gioco con SDL.NET
Ci eravamo fermati all’avvio del loop, ed è proprio da qui che riprenderemo. Adesso che il programma è stato impostato correttamente, grazie al metodo AddHandler() sappiamo che ad ogni frame generato dal sistema verrà eseguito un metodo, Events_Tick. Eccolo qui di seguito, riproposto nel suo codice. Prima di continuare, ricordate che il Visual Studio, tramite intellisense, si occupa di generare la struttura base e dare un nome al metodo associato all’evento con la sola pressione del tasto Tab.
[code]]czo1NjA6XCINCnByaXZhdGUgdm9pZCBFdmVudHNfVGljayhvYmplY3Qgc2VuZGVyLCBUaWNrRXZlbnRBcmdzIGUpDQp7DQogICAgICB7WyYqJl19ICAgICAgVmlkZW8uU2NyZWVuLkZpbGwoU3lzdGVtLkRyYXdpbmcuQ29sb3IuQmxhY2spOw0KDQogICAgICAgICAgICBzd2l0Y2ggKHtbJiomXX1zdGF0bykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjYXNlIEdhbWVTdGF0ZS5JbnRybzoNCiAgICAgICAgICAgICAge1smKiZdfSAgICAgIFZpZGVvLlNjcmVlbi5CbGl0KGludHJvKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICB7WyYqJl19ICAgY2FzZSBHYW1lU3RhdGUuR2FtZToNCiAgICAgICAgICAgICAgICAgICAgVXBkYXRlUGFydGl0YSgpOw0KICAgICAgICAgICAgIHtbJiomXX0gICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICBjYXNlIEdhbWVTdGF0ZS5FeGl0Og0KICAgICAgICAgICAgICAgICAgICBFe1smKiZdfXZlbnRzLlF1aXRBcHBsaWNhdGlvbigpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCg0KICAgICB7WyYqJl19ICAgICAgIFZpZGVvLlNjcmVlbi5VcGRhdGUoKTsNCiB9DQpcIjt7WyYqJl19[[/code]
Negli articoli precedenti vi ho parlato dell'importanza delle enumerazioni, degli “stati” che il gioco può assumere e così via. Ecco che mettiamo in pratica queste nozioni. Prima però analizziamo la struttura che ho voluto utilizzare per il Loop principale.
La prima istruzione, Video.Screen.Fill() si occupa di riempire lo schermo di un colore specificato. In questo modo cancelliamo le elaborazioni precedenti e ad ogni frame possiamo disegnare tutto ciò che vogliamo senza “sporcare”. L'ultima istruzione, invece, esegue l'Update dello schermo, mandando quindi sul nostro monitor tutto quello che abbiamo elaborato precedentemente.
Ed ecco che parliamo dell'aspetto più importante: la fase di “elaborazione”. Ora tenete a mente la struttura degli stati che avevo proposto negli articoli precedenti e guardate questo switch:
[code]]czozNTk6XCINCnN3aXRjaCAoc3RhdG8pDQp7DQogICAgICAgICAgICAgICAgY2FzZSBHYW1lU3RhdGUuSW50cm86DQogICAgICAgICB7WyYqJl19ICAgICAgICAgICBWaWRlby5TY3JlZW4uQmxpdChpbnRybyk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgIHtbJiomXX0gICAgICAgIGNhc2UgR2FtZVN0YXRlLkdhbWU6DQogICAgICAgICAgICAgICAgICAgIFVwZGF0ZVBhcnRpdGEoKTsNCiAgICAgICAge1smKiZdfSAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgY2FzZSBHYW1lU3RhdGUuRXhpdDoNCiAgICAgICAgICAgICAgICB7WyYqJl19ICAgIEV2ZW50cy5RdWl0QXBwbGljYXRpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQp9DQpcIjt7WyYqJl19[[/code]
Fa esattamente ciò che ci serve. La variabile “stato”, infatti, contiene informazioni sullo stato attuale del gioco, identificabili con valori dell'enumerazione GameState. In questo modo, per ogni stato possibile ci saranno azioni differenti da eseguire.
Per esempio, analizziamo il primo caso: lo stato del gioco attuale è GameState.Intro? Bene, allora dovremo semplicemente disegnare a schermo la nostra schermata iniziale! Il tutto è tranquillamente fattibile tramite l'istruzione Video.Screen.Blit(intro).
Le cose sono invece differenti per lo stato GameState.Game. Come potete ricordare, per la partita abbiamo una variabile a parte che si occupa di memorizzare le informazioni sullo stato di questa, ovvero “stato_p”. Tutto il codice della gestione della partita, per semplicità di lettura dello stesso, è stato posto nel metodo UpdatePartita(), che vedremo tra un po'. Per adesso, vi basti pensare che nello stato GameState.Game, logicamente, svolgiamo tutte le operazioni necessarie a gestire la partita in corso.
Nel caso di GameState.Exit, invece, le cose sono semplici: eseguiamo il metodo QuitApplication che ci fa uscire dal programma. Nulla di più, nulla di meno.


