Introduzione :
Questo progetto è stato completato nell'ambito del corso di computer opzionale 2013-2014 presso la Scuola Superiore Gymnase de Beaulieu di Losanna. Lo scopo di questo lavoro di valutazione è stato quello di implementare un'applicazione che consente a due persone di giocare a "Tic-tac-toe" (tris) con i robot Thymio.
Materiale:
- 2 Thymio
- Foglio di carta formato A3/A2
- Pennarello
Approccio
Concetti generali:
Questo progetto utilizza due Thymio. Il primo è utilizzato per disegnare le forme nella griglia 3 x 3 Tic-tac-toe, si chiama "designer". Il secondo si occupa della gestione dei turni degli utenti e dei riquadri della griglia (calcolo vittorie / pareggi), delle azioni dell'utente, verificando la loro validità, nonché l'invio delle coordinate selezionate al robot designer. Questo robot è chiamato "master".
Operativitá del "designer" :
Il codice del designer è separato in 3 blocchi, il primo rappresenta le funzioni motorie di base ed imposta la velocità del motore in avanti, indietro, ruotare, ecc. Queste sono usate nel secondo blocco, rappresentato dal loop in un timer onevent consentendo a Thymio di creare figure complesse come una croce, un quadrato, rotazioni e movimento lineari. Tutti i dati sono basati sull'incremento di un contatore che indica al Thymio quale funzione motoria usare e quando, prendendo spunto da (Thymio disegnatore).
Il primo blocco è in grado di fornire una serie di istruzioni per il secondo blocco da svolgere a seconda del riquadro di destinazione. Si potrebbe riassumere così:
ricezione del riquadro di destinazione da parte del gestore di evento prox.comm
→ movimento lungo l'asse x
→ movimento sull'asse y
→ disegno della forma appropriata a seconda del turno del giocatore.
Il designer utilizza le seguenti caratteristiche del Thymio:
- Motori
- Comunicazione infrarossi tra robot
- Penna a sfera per il disegno
- Led per l'informazione visiva
Codice sorgente del "designer"
Operativitá del "master" :
Il comportamento del master può essere descritto così:
inizio del gioco
→ eseguire le mosse
→ la partita finisce con una vittoria / pareggio.
Una mossa si compone di diverse parti:
inizio dell'azione
→ colonna / selezione coordinata x
→ conferma di linea / coordinata y di selezione
→ conferma di validazione / rifiuto del punto di entrata
→ controllare lo stato delle scatole (vittoria? )
→ Se no: l'invio del "designer" la coordinata di destinazione, in attesa della risposta del "designer" e alla fine del turno, se vittoria: fine.
La scelta della colonna e di riga è realizzata con i pulsanti laterali del Thymio, conferma con il tasto centrale. Le informazioni sono attualmente passa attraverso la luce e il suono, i led e l'altoparlante indica: quale giocatore deve giocare (in basso a destra: verde / rosso), è il giocatore selezionando la colonna / riga (in basso a sinistra: verde / viola), qual è il valore corrente di x / y (leds.circle) Il gioco è gestito da un elenco (array) di 9 interi, permettendo una vera tabella 3 x 3 da simulare. Ognuno di questi numeri interi può prendere tre valori: -1 se è stato giocato dal giocatore 2, 0 se è vuoto, 1 se è stato giocato da giocatore 1 Per una coordinata per essere accettato, la casella di destinazione deve essere vuoto, altrimenti. viene generata un'eccezione. Questo array serve anche per gestire la vittoria di uno dei giocatori, è sufficiente quando si verifica per un totale di ogni riga / colonna / diagonale. Se una di queste somme dà 3 o - 3, sappiamo che uno dei due giocatori ha vinto. Se la coordinata è convalidato, viene inviato al progettista nella forma "xy", ed è lì estratta. Il master utilizza pertanto le seguenti caratteristiche del Thymio:
- La comunicazione tra robot
- LED e altoparlante per trasmettere le informazioni sullo stato di avanzamento del gioco
- I pulsanti per gestire il gioco
Codice sorgente del "master" :
- file sorgente .aesl
- pacchetto compresso dei suoni che devono esserecopiati sulla scheda micro SD.
Sessione di gioco
In questo video é possibile vedere una sessione di gioco:
Considerazioni sul modulo Designer.
Sic Parvis Magna
La Velocità di rotazione del motore varia a seconda dello stato di carica del robot. Ciò implica che quando il robot deve ruotare di un angolo retto, l'angolo ruotato non è sempre corretto. Similmente per il resto dei disegni, anche se l'effetto è meno evidente. Nelle istruzioni della velocità del motore passa per lo zero tra ogni cambio di velocità per mantenere le forme più possibile simili nel tempo.
Sic Parvis Magna
Usando dei lego fare in modo che la penna si alzi e si riabbassi andando indietro oppure girando su se stesso in senso orario o antiorario utilizzando degli ingranaggi.
Sic Parvis Magna
Fare disegnare cerchi invece che quadrati come nella versione piú classica.
Sic Parvis Magna
Considerazioni sul modulo master.
Sic Parvis Magna
Il button.onevent sembra innescare troppo spesso, certamente ad una frequenza di 50 Hz. Ciò implica che un semplice tocco di un tasto esegue il ciclo associato circa da 3 a 5 volte. Per aggirare questo problema, si utilizza un timer con un flag che permette di avere un controllo diretto sulla durata di un tocco di tasto e il tempo tra due tocchi. L'evento whens sembra voler innescare in modo casuale una volta che la condizione è soddisfatta. Pertanto non ci si è basati su questa possibilità durante la creazione del master.
Sic Parvis Magna
Per risolvere in maniera più efficace questo problema, invece di usare l'istruzione if … then … else per testare lo stato dei bottoni nel gestore degli eventi buttons, utilizzare when … then … else che viene eseguita con successo solo la prima volta che si verifica una transizione verso la condizione riportata nella parte when.
Sic Parvis Magna
Per fare disegni meno casuali e più accurati, sarebbe stato possibile cambiare il modo in cui il designer si muove nell'area di gioco. Ad esempio, si potrebbe rappresentare la griglia con linee nere e assicurarsi che il designer le segua. Tuttavia, un tale cambiamento richiederebbe un ripensamento di tutta l'operativitá del designer.
Sic Parvis Magna
Per il master si potrebbe lavorare sull'idea di una funzione che permette di giocare a giochi nuovi mantenendo una traccia o tabellone delle partite in continua evoluzione, perché è raro nella vita reale giocare solo una partita di tris Occorre tuttavia trovare un modo per non confondere le partite per esempio cambiando la penna.
Sic Parvis Magna
Un'altra idea potrebbe essere l'aggiunta di una euristica di gioco al master, permettendo di scegliere se giocare contro Thymio o contro un altro utente.
Sic Parvis Magna