Table of Contents

Ioana NEAMȚU (67014) - TicTacToe Ultimate

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

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).

Descriere generală

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.

Hardware Design

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


Software Design

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:

  1. Choose Board - jucatorul trebuie sa aleaga cadranul in care sa joace, in limita cadranelor libere (aprinse in boardul din dreapta)
  2. Choose Move - jucatorul trebuie sa aleaga miscarea in cadranul indicat de led-ul aprins in cadranul auxiliar din dreapta
  3. Game Done - jocul curent a fost castigat board-ul se coloreaza in culoarea castigatorului. Apasarea butonului 13 va declansa inceperea unui joc nou
  4. Set Done - un jucator a castigat setul curent. Pe matricea de led-uri se va afisa litera W in culoarea corespunzatoare invingatorului. Butonul 14 duce la resetarea scorului si a intregului set

Am implementat si o stare de eroare, in cazul unei mutari invalide: tabela de scor se coloreaza in rosu. Jucatorul trebuie sa refaca mutarea.

Rezultate Obţinute

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

Concluzii

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.

Download

Fisiere .sch ioana_neamtu_sch.zip
Arhiva cod ioana_neamtu_sourcecod.zip

Jurnal

Bibliografie/Resurse

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/