PONG rappresenta il primo approccio con il retrogaming per l’appassionato di giochi. Qui ne presentiamo la nostra versione customizzata.
Per molti appassionati che come noi hanno superato la cinquantina, PONG rappresenta il perfezionarsi di un sogno, la trasposizione del concetto di videogame domestico, la fine (o quasi) del gioco del flipper elettrico o del “calcio balilla”, in favore di un ambiente elettronico che apriva nuovi ed inimmaginabili spazi virtuali.
Anziché l’interazione meccanica muscolar con le leve, o quella elettromeccanica attraverso interruttori e stantuffi, PONG proponeva un sistema di gioco basato sulla logica, sulla capacità cerebrale di anticipare l’avversario, sull’agilità delle dita. In breve era il gioco prediletto dalle vittime di bullismo, che potevano rivalersi all’interno di sale giochi (o del proprio salotto di casa) dei soprusi subiti semplicemente utilizzando tenacia, agilità e concentrazione visiva.
Stavano nascendo i nuovi geek.
Un Pong di storia…
Le prime immagini di un videogioco di ping-pong appartengono al 1966, anno nel quale un giovane ingegnere della Sanders Associates inizia a lavorare su “un progetto per un utilizzo alternativo degli apparecchi televisivi”. Il progetto incontra però grosse difficoltà e la sua conclusione finirà per slittare al 1971; la Magnavox commercializza quindi il gioco prodotto dalla Sanders con il nome di Odyssey. Questo è da considerarsi l’antenato di “PONG” e la prima console della storia.
Poi Nolan Bushnell, allora fresco di laurea, che diventerà in seguito il fondatore della Atari, ispirandosi all’Odyssey fece sviluppare ad Allan Alcorn il gioco Pong per Atari. Sotto la sua direzione nascerà nel 1972 uno dei primi videogiochi coin-op (attivati a monete) della storia (il primo in assoluto fu Computer Space del 1971, ideato dallo stesso Nolan, e che però ebbe meno successo), ovvero PONG, che ricalcava molto da vicino il gioco della Sanders con alcune differenze di gameplay come la possibilità di dare effetti al tiro colpendo la pallina all’ultimo momento.
La versione domestica, costituita da una console da collegare al televisore, fu lanciata sul mercato dalla Atari il 3 agosto 1975. Successivamente nel 1978 la General Instruments lanciò una serie di circuiti integrati VLSI dedicati a questo genere di videogiochi, il più famoso dei quali è stato il modello AY-3-8500, che permise di abbassare notevolmente il costo di produzione del videogioco e di aumentarne di conseguenza la produzione di massa e diffusione casalinga.
Il gioco
Si trattava della classica simulazione del tennis (o del ping-pong): lo schermo televisivo veniva diviso in due da una linea verticale, e ai lati comparivano due “racchette” elettroniche, la cui lunghezza poteva essere definita attraverso due potenzionetri. Il gioco era corredato da un sistema analogico per il centraggio dell’immagine, un paio di switch per definire la velocità della pallina e le modalità di gioco (automatico, single-player o “battimuro”, e “dual-player). Non poteva mancare lo switch di accensione.
Un gioco dall’apparenza così semplice divenne il sogno inconfessato di milioni di giovani (e meno giovani) in tutto il mondo, e diede il via (come detto) ad un mercato tuttora attivissimo di prodotti videoludici.
Con buona pace dei maestri di tennis.
PONG e Arduino
Le regole di programmazione nel gioco di base sono semplicissime: occorre gestire le collisioni con le pareti e con le racchette, e invertire il senso di marcia della pallina in caso di urto con esse. Il controllo del rimbalzo è semplicissimo da riprodurre: dal momento che lavoriamo su uno schermo a pixel, basterà accendere un pixel e spegnere il precedente seguendo un semplice algoritmo di controllo della posizione della pallina:
- Se siamo arrivati alla massima risoluzione X (destra del display), anziché aggiungere 1 sottraiamo 1 allo spostamento orizzontale
- Se siamo sulla parte sinistra dello schermo, anziché sottrarre 1 addizioniamo 1 allo spostamento orizzontale
- Se siamo sulla parte alta (o bassa) dello schermo, invertiamo il senso dello spostamento verticale
Ovviamente, con queste regole la pallina non uscirà mai dallo schermo, ed il “gioco” diventa presto noioso…
Quindi sostituiamo i precedenti punti 1 e 2 come segue:
- Se la racchetta sinistra è sulla traiettoria della pallina, modifichiamo il “delta di spostamento orizzontale” da -1 a +1
- Se la racchetta destra è sulla traiettoria della pallina, modifichiamo il “delta di spostamento orizzontale” da +1 a -1
- Se la pallina è uscita dal campo, la partita riprende riposizionando la pallina e gestendo il nuovo punteggio
Nota: quasi tutte le librerie grafiche per Arduino prevedono un programma PONG Demo in cui Arduino gioca da solo a battimuro o contro sé stesso, gestendo i movimenti di racchetta e pallina in base alla posizione precedente.
PONG e Moreware
Ma una demo, come tutti sappiamo, per quanto affascinante, non è giocabile.
E allora?
Allora occorre mettere mano al nostro IDE e programmarci le modifiche necessarie per renderlo giocabile! Per iniziare occorre stabilire quale interfaccia grafica e quale risoluzione utilizzare… SSD1306 – 1309, ST7735 – 7789, ILI9341, 128×64, 128×128, 160×128, 240×240, 320×240 e via discorrendo. Ovviamente occorre tener conto anche del tipo di protocollo usato per il refresh (I2C o SPI? Abbiamo pubblicato un articolo al riguardo), il modello di display, le sue librerie specifiche…
No, troppo complicato così. Molto più facile invece:
- utilizzare il nostro sistema hardware già pronto,
- acquisire un demo
- allineare il demo alle caratteristiche del nostro sistema hardware
- modificarlo per rendere parametriche le dimensioni necessarie
- aggiungere le features richieste.
Partiamo dal primo punto. In questo video abbiamo presentato un display per Arduino da 1.3″, risoluzione 240×240, abbiamo spiegato quali librerie utilizzare per gestirlo con Arduino, ed abbiamo quindi presentato una shield di nostra progettazione per utilizzare il display e tre pulsanti configurabili come scheda add-on per Arduino. In questo modo conosciamo già le librerie necessarie, ed i collegamenti hardware restano un ricordo del passato: colleghiamo la scheda ed iniziamo a scrivere il nostro software.
Per quanto riguarda il secondo punto, abbiamo scelto il demo PONG presente nella libreria Seeed_Arduino_LCD di Seeed Studio: si tratta di una libreria grafica distribuita con il Seeeduino WIO Terminal di cui ci siamo ampiamente occupati negli scorsi articoli. Abbiamo scelto il demo nella versione 320×240 pixel.
Ed eccoci al punto 3, probabilmente il più ostico: come partire da una libreria nota e da un programma di grafica che ne utilizza un’altra, e far convivere il software… Si parte dal presupposto che le primitive grafiche sono più o meno sempre le stesse, al limite è diverso il modo di inizializzare il display. Fortunatamente, in tutti gli esempi il display viene chiamato “tft”, quindi una volta riconosciuta la stringa di inizializzazione ed i PIN relativi alla connessione, tutte le chiamate successive (i metodi e le proprietà o attributi dell’oggetto tft) rimangono più o meno gli stessi. Nel nostro caso le cose sono ancora più semplici, dal momento che abbiamo serigrafato sul nostro PCB (printed circuit board, circuito stampato) i pin di collegamento tra il nostro display ed Arduino: sapendo che utilizziamo il protocollo SPI (più veloce nel trasferimento di oggetti grafici in memoria) l’inizializzazione è pressoché automatica.
Punto quattro: Proiettare il demo inizialmente previsto per un display 320×240 sul nostro display 240×240… Fortunatamente il demo che abbiamo scelto già prevede un sistema di scaling per farlo funzionare su display di misure differenti, e modificando tali valori, con un minimo di perizia e di pazienza siamo stati in grado di trasportare l’intero gioco sul nostro display più piccolino.
Non appena il demo ha iniziato a funzionare correttamente sul display ridotto, ovvero quando la traduzione tra le due librerie è stata completata, abbiamo iniziato il lavoro relativo al punto cinque: abbiamo aggiunto un menù più simpatico, con la possibilità di scegliere tra demo, partita semplice, media e difficile attraverso i tasti presenti sulla board: tasto in alto o in basso per far muovere la freccina, tasto laterale per confermare la scelta. La difficoltà consiste come sempre nel selezionare l’altezza della racchetta e la velocità della pallina nel gioco contro Arduino. Quindi abbiamo creato una funzione “modalità giocatore”, aggiungendola alle routine di calcolo automatico della posizione delle racchette del demo, e la funzione del riscontro dell’errore e del calcolo punti. Una passeggiata…
Considerazioni finali
In questo articolo abbiamo voluto mostrare come si debba procedere per creare un progetto nuovo, adattando il materiale in nostro possesso: una scheda add-on per Arduino, un display 240×240 con relative librerie, un demo di un game prodotto per utilizzare librerie diverse, una manciata di componenti elettronici.
Ovviamente il progetto si presta a miglioramenti ed evoluzioni: ad esempio è possibile creare un box attraverso un progetto 3D, inserire un vano batterie e rendere il sistema equivalente ad una retroconsole ridotta ai minimi termini.
La scheda add-on PCB per Arduino può essere richiesta scrivendo in redazione, e sarà inviata (con i piani di montaggio dei componenti e lo schema elettrico) previo accordi dietro donazione Paypal di un importo minimo di 9,99 euro + spese di spedizione. La scheda verrà comunque utilizzata per diversi altri progetti nel prossimo futuro.
Il display 1.3″ 240×240 a 65.000 colori e la relativa componentistica passiva per la costruzione è reperibile su Amazon.
Il codice sorgente, come sempre, si trova su GitHub.
Join our groups on Telegram…