Introducere

Am realizat jocul X si 0, implementat cu ajutorul microcontroller-ului ATmega16. Jocul in sine este reprezentat de o matrice de 5*5 leduri si de un set de butoane pentru a prelua miscarile utilizatorului. Butoanele, in numar de 5 reprezinta miscarile: sus, jos, stanga, dreapta si selectare. Se diferentiaza un jucator de altul prin culoarea ledului aprins(fie rosu, fie verde).

Regurile jocului

Reguli X si 0 pe o matrice 5×5:

  1. “terenul” = un patrat format din 5×5 patrate mai mici
  2. se joaca in 2 persoane
  3. un jucator va completa un patratel cu X iar celalat cu 0
  4. X incepe intotdeauna
  5. se completeaza alternativ patratelele
  6. jocul se termina atunci cand unul din jucatori a reusit sa completeze o linie, o colona sau o diagonala cu acelasi semn (X sau 0) succesiv de 4 ori

Descriere Generala

Proiectul contine module hardware:

  • microcontroller ATMega16
  • matrice de leduri (5x5x2)
  • 5 rezistente 100 Ω

Si software:

  • fisierul .hex

Diagrama Bloc:

Hardware Design

Se folosesc urmatoarele piese:

  • 25 led-uri rosii;
  • 25 led-uri verzi;
  • 5 butoane;
  • 5 rezistente 100 ohmi;
  • placuta de test pe care sunt lipite elemetele circuitului;
  • fire de legatura

Pinii folositi sunt in numar de 20:

  • 5+10 pentru conectarea led-urilor;
  • 5 pentru conectarea butoanelor

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, mai exact varianta Negamax.
Efectiv in functia main(), 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 doua casute sunt completate).
Alte functii sunt pentru a aprinde becurile si pentru a prelua mutarea de la butoane.
Pentru a determina care casuta este selectata, se foloseste urmatorul algoritm:

  • Se seteaza pinii coloanelor pe output low.
  • Pinii linilor sunt setati pe input cu rezistentele pull-up activate. Pinii de intrare ar trebui sa fie 1.
  • Intersectarea unei linii cu o coloana face ca valoarea citita sa fie 0 (exact ca in cazul apasarii unui buton).
  • Se repeta pasii anteriori pentru citirea coloanei si nu a liniei.

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 Obţinute

Proiectul final:
\\
Matricea de leduri:


\\
Placuta cu extensii:

Concluzii

Jocul de X si O ramane interesant.

Bibliografie/Resurse

pm/prj2011/pgp/x_si_0.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