Il gioco del pari e dispari risulta semplice sia da giocare che da spiegare: per questo inizieremo i nostri articoli sui giochi codificandone la strategia su Arduino.
Arduino sta a poco a poco entrando nelle nostre abitazioni, attraverso migliaia di interazioni legate alla IoT. Qualsiasi azione può essere demandata al nostro piccolo microcontrollore: dall’accensione delll’illuminazione esterna all’apertura delle imposte, dal controllo dell’impianto di riscaldamento al sistema di allarme domestico. È persino possibile utilizzarlo come companion per interagire con Alexa.
Tutta questa automazione lascia a noi “umani” tanto tempo libero in più, tempo che potremo utilizzare per ascoltare o produrre musica, leggere o scrivere libri. cucinare… e giocare. Già, ci è stato insegnato che il nostro Arduino, con il suo misero clock da 16 MHz ed i suoi 32K di memoria risulta troppo lento per poter gestire un videogioco, quindi niente Arduino per i giochi.
Ma è davvero così?
Videogiochi con Arduino
Chi scrive ha avuto una lunga esperienza di gioco e programmazione sugli home computer come Sinclair ZX81, Spectrum e Commodore 64: microprocessori con clock da 1 MHz e 16K/48K di RAM utilizzabile, ed ha l’insana intenzione di provare a replicare con voi alcuni giochini di strategia (ma anche qualche arcade) che oggi vanno per la maggiore tra i fautori del retrogaming. In fondo Arduino può essere programmato in C senza problemi. È vero, al momento manca un monitor sul quale visualizzare il campo di gioco, ma fidatevi, ci stiamo attrezzando.
Oggi proveremo ad implementare un classico gioco di strategia, il pari e dispari, e mostreremo che quando si implementa una strategia vincente su di un sistema ottimizzato, il risultato finale è sicuro!
In fondo, anche il computer che portò il Progetto Apollo sulla Luna, il DSKY presente sul LEM, non aveva più di 32K di memoria…
E nel caso ve lo steste chiedendo… Sì, esiste un pazzo che ha replicato il case del DSKY, la tastiera, il display ed ha inserito un Arduino nano all’interno del case. Quindi, andiamo, basta considerare Arduino alla stregua di un giocattolino.
Un’occhiata all’hardware
Per il nostro gioco del Pari e Dispari è sufficiente molto meno: ci bastano i seguenti componenti:
- 1 x Arduino UNO R3 o Elegoo UNO R3
- 1 x Display LCD 16×2
- 1 x Breadboard lunga
- 2 x Pulsanti
- 2 x Resistori da 10 kohm
- 1 x Potenzionetro o trimmer
- n x Cavi Dupont M-M
Il tutto è disponibile in uno starter kit.
Tutto qui.
Di seguito lo sketch che utilizzeremo per il nostro progetto.
La configurazione di un display LCD 16×2 è stata ampiamente analizzata dal nostro Simone in un suo precedente articolo. Noi partiremo dal suo progetto iniziale, aggiungendo solo due pulsanti per consentire all'”umano” di scegliere se giocare “pari” o “dispari”. Le mosse di Arduino saranno definite in base alla strategia adottata dal software.
La gestione del software
La strategia del “pari e dispari” è uno dei primi argomenti trattati dai volumi di Teoria dei Giochi. Moreware ne ha parlato in un precedente articolo dedicato alla simulazione ed alla AI per il Raspberry PI. Il programma è stato scritto in C, ed è quindi facilmente portabile sulla piattaforma di Arduino. L’unica differenza consiste nella gestione dell’interazione: tastiera per il Raspberry, bottoni per Arduino.
Dal momento che l’output consiste esclusivamente nell’indicazione delle “mosse” degli avversari e nel punteggio totale, possiamo tranquillamente utilizzare un display LCD16x2.
Il programma presentato è una di quelle pesti che vincono contro l’uomo. Ha una strategia, per quanto superficiale, e può risultare interessante proprio per questo.
In sostanza il programma mantiene una matrice tetradimensionale delle ultime uscite (pari o dispari), e gioca quella più frequente, partendo dal presupposto che le azioni umane sono di solito abbastanza simili tra loro. Se il giocatore non pone la massima attenzione a non ripetere le sequenze di uscita di zero (pari) e di uno (dispari) si trovera’ ben presto a dover recuperare punti su punti.
Il programma non usa trucchi o liste o alberi, ed e’ di una semplicità disarmante.
Il pari e dispari è un gioco a somma zero. In teoria dei giochi un gioco a somma zero descrive una situazione in cui il guadagno o la perdita di un partecipante è perfettamente bilanciato da una perdita o un guadagno di un altro partecipante in una somma uguale e opposta. Ciò che cambia, invece, è il concetto di variabilità, o randomness, implicito nella scelta del giocatore.
Un computer avrà facilmente campo libero nell’interpretare la sequenza, trovandovi un pattern riconoscibile anche dove io, povero umano, non ne vedo.
Se non ci credete, scaricate il programma da GIT e provatelo voi stessi: vedrete che osso duro è Arduino!