Introducere

Jocul X si O, cunoscut si sub numele de Tic Tac Toe, este unul dintre cele mai intuitive jocuri. Acesta implica doi jucatori, fiecare cu un marcaj reprezentativ (X, respectiv O). Mutarile sunt alternante, castigatorul fiind persoana care reuseste sa construiasca o secventa de trei marcaje consecutive cel mai rapid. Daca nici un jucator nu reuseste sa construiasca o secventa de trei, apare o situatie de remiza.

Descriere Generala

Jocul implementat aici este o adaptare a clasicului joc X si O. Fiecare jucator va fi reprezentat nu de un marcaj(X sau O), ci de o culoare. In cazul acesta, jucatorul va concura impotriva calculatorului, nu impotriva altui jucator.

Un jucator se poate misca pe linii sau coloane folosindu-se de butoanele Sus, Jos, Stanga, Dreapta, si va putea seta pozitia dorita cu ajutorul butonului Centru. Mutarea intre casute va fi vizibila, led-ul respectiv fiind aprins intr-o culoare neutra (de exemplu alb).

Hardware Design

Lista compponente:

  • placa de test
  • 9 led-uri RGB cu 4 pini
  • 5 butoane
  • 3 rezistente 1Kohmi
  • bareta cu 40 pini
  • magistrala
  • cablu utp

Schema:

PA, PB si PC sunt porturile microcontrollerului ATMEGA16. Butoanele de asemenea sunt legate la pinii PB1, PB2, PB3, PB4, PB5 ai microcontrollerului.

Software Design

Programul urmareste sa implementeze un joc de X si O, in care mutarile adversarului sunt realizate de microcontroller. Mediul de dezvolatare este AVRStudio 4.0. Pentru desenarea schemei electrice s-a folosit Eagle 5.7.0.

Pentru a genera mutarile, microcontroller-ul foloseste algoritmul minimax.

Se verifica apasarea unui buton, se preia mutarea utilizatorului si apoi se calculeaza mutarea microcontroller-ului. Dupa fiecare mutare, se verifica daca a castigat cineva sau daca este remiza (adica toate cele noua casute sunt completate).

Pentru a determina care casuta este selectata, se foloseste urmatorul algoritm:

  1. Se seteaza pinii coloanelor pe output low. (citirea liniei)
  2. Pinii linilor sunt setati pe input cu rezistentele pull-up activate. Pinii de intrare ar trebui sa fie 1.
  3. Intersectarea unei linii cu o coloana face ca valoarea citita sa fie 0 (rezistenta 0 - scurt).
  4. Se seteaza pinii liniilor pe output low. (citirea coloanei)
  5. Pinii coloanelor sunt setati pe input cu rezistentele pull-up activate. Pinii de intrare ar trebui sa fie 1.
  6. Intersectarea unei linii cu o coloana face ca valoarea citita sa fie 0 (rezistenta 0 - scurt).

Aprinderea becurilor se face prin setarea pinului de linie pe output high si a pinului de coloana pe output low(ground). Pentru a se aprinde mai multe becuri in acelasi timp, se selecteaza liniile separat, dar la un interval de timp atat de mic, incat toate becurile par aprinse.

Rezultate Obtinute

Dupa asezarea componentelor si lipirea acestora conform schemei, a rezultat urmatoarea placa:

Am testat cu multimetrul ca toate legaturile sunt functionale si ca se aprind toate led-urile. Urmatorul pas este lipirea magistralei si programarea placutei.

Concluzii

In final nu am reusit sa mai parcurg urmatorii pasi:

  • lipirea magistralei (desi pinii sunt deja lipiti) - mai trebuiau doar conectati intre ei.
  • implementarea efectiva a algoritmului.

Desi nu am dus pana la capat proiectul (lipsa de timp), consider ca tema propusa de mine este una realizabila si foarte interesanta.

Resurse

pm/prj2011/dtudose/x-si-0-inteligent.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0