Come funziona un videogioco?!

Tutti quanti siamo abituati a giocare a videogiochi sempre più realistici e complessi, ma vi siete mai chiesti come funziona un videogioco?

Dalle loro origini ad oggi i videogiochi sono cambiati molto. Siamo passati da semplici giochi come PONG. Dove il videogioco doveva solo calcolare i rimbalzi di una palla e verificare il contatto della palla contro le racchette dei due giocatori (o contro la fine dello schermo per segnare un punto)

fino a moderni videogiochi dove migliaia di elementi si muovono contemporaneamente per simulare il fruscio dei fili d’erba nel vento, la neve che cade dal cielo ed il riflesso dei raggi del sole sull’acqua.

Eppure alla base, PONG ed i moderni videogiochi, condividono ancora lo stesso funzionamento.

Come funziona un videogioco

Per spiegare il funzionamento di un videogioco è sicuramente più facile partire da PONG, il gioco in sé è molto semplice, chiunque può capirlo e non si intromette aggiungendo altre informazioni da spiegare a parte il suo funzionamento in sé.

Gli elementi di cui il gioco deve occuparsi solo solo 3:

  • La palla
  • La racchetta sinistra
  • La racchetta destra

Inoltre, di questi tre elementi, due sono mossi dal giocatore. Quindi il computer deve gestire solo la palla in sé e per sé.

Di base un videogioco funziona perché il computer continua a ripetere sempre le stesse tre operazioni:

  1. Verificare se il giocatore sta premendo un tasto
  2. Aggiornare lo stato del personaggio del giocatore in base al tasto premuto dal giocatore
  3. Aggiornare lo stato delle cose controllate dal computer
  4. Ridisegnare lo schermo.

E così via, all’infinito. Appena finito di ridisegnare lo schermo, ricomincia da capo dal punto uno.

Potete immaginare questo ciclo infinito come il battere del cuore del videogioco, ogni giro è un battito cardiaco ed il mondo nel videogioco cambierà un pochino (il tempo andrà avanti, i personaggi si muoveranno un poco, i fili d’erba si piegheranno un poco sospinti dal vento simulato e così via).

Il cambiamento apportato da un singolo battito del cuore del videogioco, quindi di un solo giro di questo ciclo, è quasi impercettibile per noi uomini. Tutto ciò che accade all’interno di un ciclo, incluso ridisegnare lo schermo, avviene in un tempo che è solitamente tra 0,03 secondi e 0,016 secondi.

Come mai in questo tempo? Perché se avete mai sentito parlare di FPS (frame per second) questi tempi sono ciò che determinano i frame per secondo del videogioco. Se un ciclo del videogioco completa in 0,03 secondi, significa che in un secondo possiamo fare 30 cicli. Questo significa che possiamo ridisegnare lo schermo 30 volte al secondo, di conseguenza che stiamo ottenendo 30 FPS.

La conseguenza di questo fattore è che programmare un videogioco è una delle cose più difficili che si possa fare, perché il programmatore deve riuscire a far tutto ciò che gli serve in solamente 0.03 secondi.

Se il videogioco impiega più di 0.03 secondi a ridisegnarsi lo vedremo andare a scatti, o muoversi troppo lento. Più è alto il numero di FPS che il gioco riesce a mantenere in modo costante più fluida sarà la percezione del giocatore.

Inoltre è fondamentale, che oltre a non impiegarci più di 0.03 secondi per ogni battito cardiaco del videogioco, si eviti anche di impiegarcene mai meno di 0.03 secondi.

Il tempo di un battito deve rimanere sempre costante.

Questo perché se il videogioco a volte impiegasse meno di 0.03 secondi per uno o più battiti cardiaci, il giocatore avrebbe l’impressione che per un attimo il tempo si sia mosso più velocemente. Magari vedrebbe un nemico muoversi più in fretta o un bonus sparire prima di aver fatto in tempo a vederlo. E vedere il gioco muoversi troppo velocemente è altrettanto fastidioso che vederlo andare troppo lentamente.

Solitamente, una rapida soluzione a questo secondo problema, è semplicemente di calcolare quanto tempo ha impiegato un ciclo del gioco e se è inferiore al tempo che abbiamo deciso di mantenere per ottenere gli FPS desiderati, ci limiteremo ad aspettare il tempo che serve per arrivare alla durata prevista.

Questo ciclo, che determina il battito cardiaco del gioco, è chiamato “main loop” e tutta la vita di un videogioco si svolge all’interno del suo main loop.

Pong Main Loop

Ritornando al nostro esempio di PONG, possiamo provare ad immaginare come fosse fatto il main loop del gioco.

Probabilmente il funzionamento del gioco era il seguente:

  1. Verifica se il giocatore sta premendo un tasto
    1. Verifica se il giocatore 1 sta premendo il tasto SU o GIU`
    2. Verifica se il giocatore 2 sta premendo il tasto SU o GIU`
  2. Aggiorna lo stato del personaggio del giocatore
    1. Se il giocatore 1 stava premendo SU, togli 1 alla coordinata Y della racchetta di sinistra. Se stava premendo GIU`, aggiungi 1 alla Y della racchetta di sinistra.
    2. Se il giocatore 2 stava premendo SU, togli 1 alla coordinata Y della racchetta di destra. Se stava premendo GIU`, aggiungi 1 alla Y della racchetta di destra.
  3. Aggiorna lo stato delle cose controllate dal computer
    1. Se la palla è contro lo schermo sopra o sotto inverti la direzione in cui si deve muovere (simula il rimbalzo)
    2. Calcola di quanto spostare le coordinate X e Y della pallina moltiplicando la velocità della pallina per il seno e coseno della direzione in cui si sta muovendo la palla.
    3. Aggiorna le coordinate X e Y della pallina
  4. Ridisegna lo schermo.

Per semplicità abbiamo omesso tutta la parte riguardante l’effettuare un punto mandando la palla a fondo del campo dell’avversario, ma è facile immaginare come possa funzionare.

La matematica dei videogiochi

I videogiochi sono forse uno degli ambiti in cui la matematica da il meglio di sé.

Tutti gli argomenti imparati a scuola come geometria, trigonometria, matrici, vettori, velocità etc… trovano finalmente una loro applicazione concreta ed intuitiva nell’ambito dei videogiochi.

Se noi dobbiamo muovere la nostra palla di PONG a 10 pixel al secondo, di quanto dobbiamo spostarla ad ogni ciclo? Se il nostro gioco fa 30 fps, significa che dobbiamo spostarci di 10/30 pixel ad ogni ciclo.

Se la palla procedeva in linea retta, è facile vedere che dovremo aggiungere o rimuovere 0,3 pixel alla coordinata X della nostra palla (a seconda che ci stiamo spostando verso destra o verso sinistra), ma se la palla si stava spostando in diagonale?

In questo caso la trigonometria viene in nostro aiuto e sappiamo che se la nostra palla procede in diagonale con un angolo A di 30gradi allora dovremo aggiungere alle X 0,3*cos(A) e dovremo aggiungere alle Y 0,3*sin(A)

Allo stesso modo, siccome lo schermo del nostro computer è bidimensionale, nei videogiochi tridimensionali è grazie al calcolo su matrici che possiamo mappare le coordinate tridimensionali in punti del nostro schermo.

Oppure se dobbiamo disegnare la nostra palla di PONG, è grazie alla geometria se siamo in grado di calcolare l’insieme dei punti che compone un cerchio e disegnare quindi la palla.

Tutte questi calcoli sono solitamente gestiti da quello che è chiamato il Motore Fisico del videogioco e che si occupa proprio di simulare il mondo reale tramite formule matematiche. Mentre il Motore Grafico si occupa di effettuare tutti i calcoli matematici atti a disegnare i personaggi e gli oggetti che vengono mostrati sullo schermo dal videogioco.

Cimentarsi nella realizzazione di videogiochi è sicuramente un buon modo per scoprire che la matematica può essere parecchio divertente!

 

COMMENTI

Share