Note di Rilascio Questo simulatore permette all’utente di giocare al celebre gioco pong. Il codice è composto quindi da alcune funzioni atte a gestire le funzionalità di gioco al suo avvio e durante il suo svolgimento. Il codice, scritto su Visual Studio 2019 con un sistema operativo Windows, si avvale del linguaggio operativo d’alto livello C con porzioni di codice in linguaggio assemblativo (Assembly), opportunamente introdotto col meccanismo dell’assembler inline. Tale aggiunta aumenta le prestazioni del codice in termine di velocità, poiché Assembly è di basso livello e può essere ottimizzato dal programmatore. Il codice considerato è quello contenuto nella cartella “src\Pong” nel file “Pong.c”. All’inizio sono presenti due Struct: ball_s, che contiene le coordinate che indicano la posizione della palla sullo schermo, la larghezza, l’altezza e le coordinate relative alla sua velocità; paddle, che contiene le coordinate che indicano la posizione della racchetta, la sua larghezza e la sua altezza. La prima funzione che entra in gioco è int init(int width, int height, int argc, char* args[]) che inizializza la libreria SDL. All’interno di init abbiamo funzioni che si occupano di gestire la schermata di gioco e quindi di creare la finestra, la superficie dello schermo dove verranno successivamente creati gli elementi di gioco (rete, paddle e palla), la texture per la schermata, di caricare le immagini con titolo, numeri (per il segnapunti) e game over e impostare i loro colori. La seconda funzione usata nel main è init_game() che permette di inizializzare le componenti di gioco, ovvero la palla e i paddle, con dei valori scelti di default. Vengono inoltre controllati i tasti premuti durante l’esecuzione del gioco, richiamando così move_paddle() che si occuperà dei movimenti dei paddle (con “up” e “down” verrà mosso quello di destra e con “W” ed “S” quello di sinistra). Vengono gestite anche l’apertura della finestra di gioco; la visione del menu mediante draw_menu(); l’avvio del gioco tramite la barra spaziatrice; il disegno degli elementi di gioco tramite draw_net(), draw_paddle() e draw_ball(); la gestione dei punteggi tramite check_score() (il massimo numero di punti raggiungibile è 10) e la loro visualizzazione tramite draw_player_0_score() e draw_player_1_score(); il movimento della palla tramite move_ball() e i suoi urti contro le racchette e le pareti tramite check_collision(); la visualizzazione della schermata di game over tramite draw_game_over(); l’uscita dal gioco e la chiusura della finestra tramite il tasto “esc”. Maggiori dettagli sulle funzioni di SDL2 utilizzate nel codice vengono forniti nella documentazione del codice. Idee per ulteriori sviluppi Sembra possibile sviluppare il progetto come software multipiattaforma usando Visual Studio 2019 come indicato su: https://devblogs.microsoft.com/cppblog/linux-development-with-c-in-visual-studio-2019-wsl-asan-for-linux-separation-of-build-and-debug Poichè SDL2 è multipiattaforma, un’alternativa all’uso di Visual Studio 2019 potrebbe essere l’uso del compilatore gcc, software libero GNU, di solito pre-installato nelle distribuzioni Linux ma disponibile anche su Windows installando Mingw-w64. Va detto tuttavia che la semplice sintassi Basic Asm di gcc non è sufficiente a supportare l'uso della direttiva _asm fatto nel nostro sorgente, per esempio perché molte delle istruzioni assembly contengono riferimenti a variabili globali, che spesso modificano; occorre pertanto usare la sintassi Extended Asm di gcc, che risulta significativamente più complessa. Si possono anche modificare alcuni elementi riguardanti il gameplay, ad esempio implementare una versione single player del gioco, poter dare la possibilità al giocatore di decidere la forma e il colore della pallina, modificare il font delle scritte e i colori della schermata di gioco.