Ping pong

Et voilà: una riproduzione di PONG, il primo videogioco arcade della storia, ed il primo a diventare veramente popolare! Fu sviluppato dalla Atari. E' un gioco che simula una partita di tennis (dove le sponde valgono... direi che una fusione fra il racquetball e il ping pong). Obiettivo del gioco è far arrivare la palla al lato opposto senza che l'avversario riesca ad intercettarla.

Questa volta ve lo presento in versione HTML5 (coi canvas), giocabile online. E' perciò supportato da Chrome, Firefox, IE10+, Opera, Safari. Fino a IE10 è presente un bug che non rende possibile mostrare linee tratteggiate... chi lo usa si becca solo linee continue!

Sarebbe possibile anche supportare IE9, ma in questo esperimento ho voluto utilizzare la funzione window.requestAnimationFrame().



Istruzioni

Selezionare tipo di giocatori.
I controlli per il giocatore 1 sono i tasti [Freccia su] o [W] per mouvere la racchetta verso l'alto e [Freccia giù] o [S] per muoverla verso il basso.
I controlli per il giocatore 2 sono invece [I] o [Numpad 8] per andare verso l'alto, [K] o [Numpad 5] per andare verso il basso.
E' possibile anche utilizzare le freccette agli angoli del campo di gioco.



Computer vs Computer
Player vs Computer
Player vs Player




Design

Generale

L'algoritmo del computer è molto semplice: quando la palla è dalla parte avversaria la racchetta viene posizionata al centro per avere la minima distanza rispetto ai possibili movimenti per raggiungere la pallina. Non appena la pallina giunge nel campo del computer, la sua racchetta segue la pallina. Per motivi di animazione, la velocità di spostamento della racchetta viene modulata (solo ridotta) prevedendo dove la pallina arriverà. Il giocatore invece muove la racchetta sempre alla massima velocità.

Ovviamente sarebbe più furbo prevedere in anticipo i rimbalzi e la posizione finale della pallina, ma questo avrebbe dato troppo vantaggio al computer.

Quando la pallina viene colpita, essa può subire un'accelerazione (se il colpo è concorde al rimbalzo) o una decellerazione (altrimenti) e verrà aumentato/ridotto l'angolo di attacco. In caso il colpo sia discorde, la pallina verrà rimandata dalla parte da cui è venuta. Non c'è limite all'accelerazione impressa.



Meccanica del rimbalzo

In questa immagine si vede come il rimbalzo su una superficie avviene col medesimo angolo di attacco: il punto virtuale di compenetrazione fra i due oggetti (NP) viene specchiato secondo la superficie colpita (BP).

rimbalzo della palla su una superficie qualsiasi

Per superfici ravvicinate è possibile che, fra due frames successivi, la palla possa rimbalzare su più di una superficie. Per risolvere questo problema si procede con un ciclo di controllo fino a che non si intercetta più alcun possibile rimbalzo.

rimbalzo della palla su una superficie qualsiasi

Infine il rimbalzo su una racchetta: si ritiene colpita se il centro della palla cade sulla proiezione dell'altezza della racchetta nel punto virtuale di compenetrazione dei due solidi (NP). Come sopra descritto però, l'angolo di attacco aumenta (anche la velocità) se il verso di movimento verticale della racchetta è concorde con quello della palla. Altrimenti la palla torna indietro con lo stesso angolo di attacco (leggermente diminuito, insieme alla sua velocità).

rimbalzo della palla su una superficie qualsiasi