Macros
SCREEN_WIDTH

Altezza della finestra

SCREEN_HEIGHT

Larghezza della finestra

STRUCT
ball_s
Parameters
x

Coordinata x relativa alla posizione orizzontale della palla sullo schermo

y

Coordinata y relativa alla posizione verticale della palla sullo schermo

w

Larghezza della palla

h

L'altezza della palla

dx

velocità della palla lungo l'asse x

dy

velocità della palla lungo l'asse y

paddle
Parameters
x

Coordinata x relativa alla posizione orizzontale della racchetta sullo schermo

y

Coordinata y relativa alla posizione verticale della racchetta sullo schermo

w

Larghezza della racchetta

h

L'altezza della racchetta

VARIABILI GLOBALI
ball
static ball_t ball
paddle
static paddle_t paddle[2]
score
int score[]
width
int width

Larghezza schermo intero

height
int height

Altezza schermo intero

window
SDL_Window* window

Puntatore globale ad un SDL_Window.  E' la finestra su cui facciamo rendering.

renderer
SDL_Renderer* renderer

Puntatore globale ad un SDL_Renderer.  E' il renderer di SDL che useremo per disegnare sullo schermo

Variabili SDL_Surface

Puntatori statici globali a dei SDL_Surface

screen
static SDL_Surface* screen
title
static SDL_Surface* title
numbermap
static SDL_Surface* numbermap
end
static SDL_Surface* end
FUNZIONI
Functions
init_game
static void init_game()

Inizializza le componenti di gioco, ovvero la palla e i paddle, con valori scelti di default.

check_score
int check_score()

Gestisce il punteggio dei giocatori e controlla se il punteggio di uno dei due sia arrivato a 10 (massimo raggiungibile).

Returns

Ritorna 0 se nessuno dei due player ha ancora fatto 10 punti.  Ritorna 1 se il player1 ha fatto 10 punti.  Ritorna 2 se il player0 ha fatto 10 punti.

check_collision
int check_collision(
ball_t a,
paddle_t b
)

Controlla quando la racchetta colpisce la palla e gestisce l'urto della palla con la parete.

Parameters
a
ball_t

Variabile di tipo ball_t .

b
paddle_t

Variabile di tipo paddle_t .

Returns

Ritorna 1 se  la racchetta ha toccato la palla, 0 altrimenti.

move_ball
static void move_ball()

Permette il movimento della palla (inizializzata tramite una chiamata ad init_game() all'inizio della partita che decide quale direzione farle assumere) e, tramite una chiamata a check_collision(), controlla quando la racchetta colpisce la palla e gestisce l'urto della palla con la parete.

move_paddle
static void move_paddle(
int d,
int pad
)

Gestisce il movimento dei paddle. Tramite i tasti up e down il paddle di destra andrà rispettivamente su e giù, tramite W ed S avverrà lo stesso col paddle di sinistra. All’interno del metodo vi sono anche dei controlli per evitare che il paddle non esca dalla schermata di gioco.

Parameters
d
int

Indica la direzione del paddle. Se ha valore 0 il paddle va giù, se ha valore 1 il paddle va su.

pad
int

Indica con il valore 0 il paddle del player0 e con il valore 1 il paddle del player1.

draw_game_over
static void draw_game_over(
int p
)

Implementa delle operazioni per poter impostare la schermata di game over .

Parameters
p
int

Variabile che mi permette di capire quale schermata di fine gioco impostare.  Se vale 1, verrà indicata sullo schermo la vittoria del player1, mentre se vale 2 verrà indicata sullo schermo la vittoria del player0.

SDL_BlitSurface
SDL_BlitSurface(
end,
&p2,
screen,
&dest
)

Esegue un veloce trasferimento di bit dalla superficie di origine a quella di destinazione.

Parameters
SDL_Surface *source_surface

Superficie d’origine.

SDL_Rect *source_rect

La struttura che rappresenta il rettangolo da copiare.

SDL_Surface *destination_surface

Superficie di destinazione.

SDL_Rect *destination_rect

La struttura che rappresenta il rettangolo in cui sarà incollato il rettangolo copiato.

Returns

Ritorna 0 in caso di successo e un codice negativo di errore in caso di insuccesso.

draw_net
static void draw_net()

Disegna la rete al centro dello schermo.

SDL_FillRect
r = SDL_FillRect(
screen,
&net,
0xffffffff
)

Funzione per riempire un rettangolo con un colore dato.

Parameters
SDL_Surface *surface

La superficie target.

SDL_Rect *rect

Il rettangolo da riempire.

Uint32 color

Il colore col quale riempire.

Returns

Ritorna 0 in caso di successo e un codice negativo di errore in caso di insuccesso.

draw_ball
static void draw_ball()

Disegna la palla come un quadratino.

draw_paddle
static void draw_paddle()

Disegna i paddle sullo schermo

draw_player_0_score
static void draw_player_0_score()

Riporta il punteggio del player0 sulla sommità dello schermo.

draw_player_1_score
static void draw_player_1_score()

Riporta il punteggio del player1 sulla sommità dello schermo.

SDL_GetTicks
Uint32 next_game_tick = SDL_GetTicks()

Funzione che dà il numero di millisecondi dai quali la libreria SDL è stata inizializzata.

Returns

Il numero di millisecondi dai quali la libreria SDL è stata inizializzata.

SDL_PumpEvents
SDL_PumpEvents()

Usa questa funzione per aggiornare la coda degli eventi e lo stato interno dei device di input.  Questo dovrebbe solamente eseguirsi nel thread che inizializza il sottosistema Video.

SDL_GetKeyboardState
const Uint8* keystate = SDL_GetKeyboardState(
NULL
)

Dà un’istantanea della posizione corrente sulla tastiera.

Parameters
int *numkeys

se non è NULL, riceve la lunghezza dell’array ritornato.

Returns

Ritorna un array di kaystates.  Per avere gli indici dei valori è sufficiente usare SDL_SCANCODE (+ _NomeTasto).

SDL_RenderClear
SDL_RenderClear(
renderer
)

Pulisce la superficie su cui fare rendering.

Parameters
SDL_Renderer *renderer

Il renderer.

Returns

Ritorna 0 in caso di successo e -1 in caso di errore.

SDL_Delay
SDL_Delay(
500
)

Funzione che aspetta un certo numero di millisecondi per fare return.

Parameters
Uint32 ms

Il numero di millisecondi.

SDL_UpdateTexture
SDL_UpdateTexture(
screen_texture,
NULL,
screen->pixels,
screen->*sizeof(Uint32)
)

Usa questa funzione per aggiornare il rettangolo della texture con i valori dei nuovi pixel.

Parameters
SDL_Texture *texture

La texture da aggiornare.

SDL_Rect *rect

Il rettangolo che rappresenta l’area da aggiornare.

void *pixels

La riga di pixel nel formato della texture.

int pitch

Il numero di byte in una riga di pixel.

Returns

Ritorna 0 in caso di successo e un codice negativo di errore in caso di insuccesso.

SDL_RenderCopy
SDL_RenderCopy(
renderer,
screen_texture,
NULL,
NULL
)

Copia una porzione della texture nel target di rendering corrente.

Parameters
SDL_Renderer *renderer

Il renderer.

SDL_Texture *texture

La texture di origine.

SDL_Rect *source_rect

La struttura SDL_Rect di origine.

SDL_Rect *destination_rect

La struttura SDL_Rect di destinazione.

Returns

Ritorna 0 in caso di successo e un codice negativo di errore in caso di insuccesso.

SDL_RenderPresent
SDL_RenderPresent(
renderer
)

Aggiorna lo schermo con il rendering deciso in precedenza.

Parameters
SDL_Renderer* renderer

Il renderer.

SDL_FreeSurface
SDL_FreeSurface(
screen
)

Carica le immagini su una superficie RGB.

Parameters
SDL_Surface* surface

La superficie.

SDL_DestroyRenderer
SDL_DestroyRenderer(
renderer
)

Distrugge il renderer e le texture associate.

Parameters
SDL_Renderer* renderer

Il renderer

SDL_DestroyWindow
SDL_DestroyWindow(
window
)

Funzione che distrugge la finestra.

Parameters
SDL_Window* window

La finestra.

SDL_Quit
SDL_Quit()

SDL_Quit arresta tutti i sottosistemi, inclusi quelli di default. Dovrebbe essere sempre chiamato prima che venga chiusa un’applicazione SDL.

init
int init(
int width,
int height,
int argc,
char *args[]
)

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.

Parameters
width
int

Larghezza schermo intero.

height
int

Altezza schermo intero.

argc
int

E' un int che contiene il numero di parametri dati in input dal programma

args
char*[]

E' un array di stringhe che sono gli input dati al programma

Returns

Ritorna 1 se window, screen, screen_texture, title, numbermap ed end puntano al valore NULL, altrimenti ritorna 0.

SDL_Init
if (
SDL_Init(SDL_INIT_VIDEO) <0)

Permette di inizializzare la libreria di SDL. Deve essere chiamata prima di ogni funzione di SDL In questo caso stiamo inizializzando i sottosistemi di default e quello relativo al video.

Parameters
SDL_INIT_VIDEO

Flag di inizializzazione del sistema.

Returns

Ritorna 0 in caso di successo, Ritorna un codice di errore negativo in caso di insuccesso.

SDL_GetError
printf(
"SDL non può essere inizializzato! SDL_Error: %s\n",
SDL_GetError()
)

Tale funzione ritorna un messaggio sull’ultimo errore verificatosi.

Returns

Il messaggio d’errore.

SDL_CreateWindowAndRenderer
SDL_CreateWindowAndRenderer(
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_SHOWN,
&window,
&renderer
)

Usa questa funzione per creare una finestra e un renderer di default.

Parameters
int width

La larghezza della finestra.

int height

L’altezza della finestra.

Uint32 window_flags

I flag usati per creare la finestra.

SDL_Window** window

La finestra.

SDL_Renderer** renderer

Il renderer.

Returns

Ritorna 0 in caso di successo e un codice negativo di errore in caso di insuccesso.

SDL_CreateRGBSurfaceWithFormat
screen = SDL_CreateRGBSurfaceWithFormat(
0,
width,
height,
32,
SDL_PIXELFORMAT_RGBA32
)

Funzione per creare la superficie dello schermo dove andranno disegnati i vari elementi.

Parameters
Uint32 flags

I flag sono obsoleti e dovrebbero essere settati a 0.

int width

La larghezza in pixel della superficie da creare.

int height

L’altezza in pixel della superficie da creare.

int depth

La profondità in bit della superficie da creare.

Uint32 format

Il formato dei pixel della superficie da creare.

Returns

Ritorna una nuova SDL_Surface in caso di successo, NULL in caso di insuccesso.

SDL_CreateTextureFromSurface
screen_texture = SDL_CreateTextureFromSurface(
renderer,
screen
)

Funzione che serve a creare la texture per la schermata.

Parameters
SDL_renderer *renderer

Il renderer.

SDL_surface *surface

La schermata.

Returns

Ritorna la texture creata oppure NULL in caso di errore.

SDL_LoadBMP
title = SDL_LoadBMP(
"img/title.bmp"
)

Funzione di SDL che serve a caricare un’immagine.

Parameters
file

il file contenente l’immagine BMP.

Returns

Ritorna un puntatore a una nuova SDL_Surface o NULL in caso di errore.

SDL_MapRGB
Uint32 colorkey = SDL_MapRGB(
title->format,
255,
0,
255
)

Funzione di RGB che dà una terna RBG di colori a un pixel opaco, dato un formato.

Parameters
SDL_PixelFormat *format

Il formato del pixel.

Uint8 r

La componente di rosso del pixel, compresa tra 0 e 255.

Uint8 g

La componente di verde del pixel, compresa tra 0 e 255.

Uint8 b

La componente di blu del pixel, compresa tra 0 e 255.

Returns

Il valore del pixel.

SDL_SetColorKey
SDL_SetColorKey(
title,
SDL_TRUE,
colorkey
)

Funzione che imposta la key del colore (pixel trasparente) su una surface.

Parameters
SDL_Surface *surface

La surface da aggiornare.

int flag

SDL_TRUE per abilitare color key, SDL_FALSE per disabilitare color key.

Uint32 key

Il pixel trasparente.

Returns

Ritorna 0 in caso di successo e un codice negativo di errore in caso di insuccesso.