Autorul poate fi contactat la adresa: Login pentru adresa
Ultimate TicTacToe este un joc inspirat din clasicul X si 0 (TicTacToe) insa jucat pe o matrice de 9×9. Jocul are 9 cadrane, dupa cum se poate vedea si in poza de mai sus.
In alegerea proiectului, am pornit de la ideea ca mi-ar placea sa fac un joc pe LED-uri si am incercat sa complic X si 0-ul clasic, ajungand la Ultimate Tic Tac Toe, scopul fiind de relaxare si distractie.
Reguli
Functionalitate dorita
Cea mai mare problema pe care am intalntit-o in proiectarea aplicatiei, a fost numarul relativ mare de pini de care am nevoie pentru a comanda cele 81 de LED-uri care reprezinta playground-ul, motiv pentru care am ales sa folosesc registrele de shift (comandate prin 3 pini, vor putea comanda 8 linii).
Buttons - este o matrice de 9 butoane folosita pentru a selecta o noua mutare (casuta unde player-ul vrea sa joace) in cadrul unui cadran deja ales sau a selecta cadranul in care player-ul vrea sa joace, in cazul in care exista mai multe optiuni. Se va indica folosind blocul Indicator care din cele 2 mutari vor fi facute.
Game Selector - este o matrice de 3×3 LED-uri care va indica in ce cadrane player-ul curent poate juca. In cazul in care mai multe LED-uri sunt aprinse, deci mai multe cadrane disponibile, player-ul mai intai va selecta cadranul, folosind buttons
9×9 LED Matrix - este o matrice de 81 de LED-uri bicolore care va reprezenta tabla de joc. Fiecare player va avea asociata o culoare.
Indicator - este reprezentat printr-un LED bicolor (sau 2 LED-uri normale) care va comunica daca trebuie aleasa o mutare sau un cadran.
Lisa de piese necesare:
Schema electrica
Comandarea coloanelor se face similar cu cea a liniilor, folosind 2 shift register pe culoare.
Matricea de LED-uri
Pentru dezvoltarea software-ului am folosit
Pentru inceput, am implementat comandarea matricii de led-uri folosind registrele de shift:
La fiecare front pozitiv pe intrearea CLOCK, datele sunt deplasate spre bitii mai semnificativi, iar valoarea de la intrare este pusa pe bitul 0. Pe frontul pozitiv al LATCH-ului, informatia este copiata in zona de memorare si de aici ajunge pe iesiri.
In implementarea mea, semnalul de CLOCK si LATCH este comun pentru grupuri de 2 circuite (linii, coloane rosii, coloane verzi). Pentru linii am o valoare de 1 care se deplaseaza pe bitii corespunzatori fiecarei linii, activand astfel linia. Pe coloane, valorile sunt transmise serializat.
Am continuat cu citirea inputului de la tastatura. Pentru identificarea butonului apăsat se procedeaza astfel:
Pasul final a constat in implementarea logicii jocului care functioneaza ca un automat cu 4 stari:
Am implementat si o stare de eroare, in cazul unei mutari invalide: tabela de scor se coloreaza in rosu. Jucatorul trebuie sa refaca mutarea.
Am terminat proiectul, implementand jocul Ultimate Tic Tac Toe pentru 2 jucatori, invingatorul urmand sa fie desemnat dupa castigarea a 2 meciuri din 3. Acest lucru poate fi observat dupa tabela de scor, dar si dupa W(inner)-ul afisat pe matricea de LED-uri in culoarea corespunzatoare player-ului care a castigat.
Mai jos, puteti vedea cateva imagini cu proiectul:
Video: watch
A fost placut si interesant sa lucrez la acest proiect, mai ales la partea hardware, cu toate ca am avut foarte mult de lipit. Cea mai mare provocare a fost sa lucrez cu shift registers, deoarece nu mai avusem contact cu aceste circuite pana acum.
Fisiere .sch ioana_neamtu_sch.zip
Arhiva cod ioana_neamtu_sourcecod.zip
DataSheet ATMega324 atmega.pdf
DataSheet 74HC595 shiftreg.pdf
DataSheet 2N2222A 2n2222.pdf
DataSheet LED led.pdf
Link-uri utile:
https://learn.adafruit.com/adafruit-arduino-lesson-4-eight-leds/the-74hc595-shift-register
https://www.arduino.cc/en/Tutorial/ShiftOut
http://extremeelectronics.co.in/avr-tutorials/4x3-matrix-keypad-interface-avr-tutorial/