Connect 4

Introducere

Am implementat clasicul joc Connect 4 folosit o matrice de LED-uri bicolore pe care voi afișa cât mai realist mutarea fiecărui jucător. Fiecare jucător are la dispoziție 7 butoane comune pe care le va apăsa când îi va veni rândul. Fiecare buton reprezintă coloana pe care va cădea piesa sa.

Descriere generală

Pentru realizarea jocului am utilizat o matrice de LED-uri bicolore de dimensiune 5×7. Matricea este fixată pe o placă placă de test, împreună cu butoanele și celelalte componente necesare pentru funcționarea întregului joc. Conexiunea între matrice și celelalte componente de pe placa cât și conexiunea între placa de test și placa principală ce conține microcontroller-ul se face cu ajutorul unor fire de legătură.

Comenzile de input sunt date cu ajutorul a 7 butoane. Aceste comenzi ajung la ATmega16, sunt procesate, după care output-ul comenzii este afisat pe matricea de LED-uri.

Am reușit să evit folosirea MUX-urilor, DMUX-urile deoarece pinii rămași liberi pe microcontroller mi-au fost de ajuns pentru legarea tuturor comenzilor necesare funcționării jocului.

Hardware Design

Placa principală (Etapa I) a fost realizată conform specificațiilor de aici http://cs.curs.pub.ro/wiki/pm/tutorial/placa

Etapa II are următoare schemă:

Placa de test conține următoarele componente:

  1. 1 x matrice de LED-uri bicolore, 5×7 (Kingbright TBC20-11EGWA)
  2. 7 butoane
  3. 10 rezistețe 1KΩ (protecție matrice de leduri)
  4. 7 rezistențe 100Ω (rezistențe de pull-up pentru butoane)
  5. socluuri
  6. fire de legătură

Software Design

Realizarea programului constă în următorul algoritm:

  1. iterez prin toate liniile, respectiv coloanele matricei cu o frecventă de peste 90Hz astfel încât să nu apară efectul de flickering. Pentru acest lucru folosesc functia light<COLOR>(linie, coloană)
  2. după ce se pune o piesă pe coloana respectivă verific dacă a câștigat cineva jocul. Dacă cineva a câștigat, atunci cele 4 piese care sunt câștigătoare vor realiza un efect de luminare intermitentă. Apoi se poate apăsa butonul 7 pentru începerea unui joc nou
  3. dacă nu a câștigat nimeni la pasul curent, se schimba jucătorul, respectiv culoarea ce va fi pusă pe coloana aleasă de jucatorul advers
void enableColumn(int column); // activează o coloană
 
void enableLineGreen(int line); // activează o linie de culoare VERDE
 
void enableLineRed(int line); // activează o linie de culoare ROȘU
 
void lightGreen(int i, int j); // aprinde un LED de pe poziția (i, j) de culoare VERDE  
 
void lightRed(int i, int j); // aprinde un LED de pe poziția (i, j) de culoare ROȘU
 
void lightOff(); // stinge toate LED-urile aprinse
 
int drop(int column); // pune o piesă pe coloana 'column'
 
void checkButtons(); // verifică starea butoanelor (up / down)
 
int checkWin(); // verifică starea board-ului
 
void drawBoard(); // aprinde LED-urile din matrice corespunzătoare stării curente

Rezultate Obţinute

Video

The Adobe Flash Plugin is needed to display this content.

Click aici

Concluzii

Partea hardware a fost puțin mai dificilă decât cea software deoarece a trebuit să mă gândesc de la început ce pini ai microcontrollerului trebuie sa îmi aleg pentru a putea așeza mai ușor componentele pe plăcuță, dar și pentru a scrie codul mai ușor.

Partea software a fost mai putin dificilă, dar am întâmpinat câteva probleme la partea de flickering pentru jucătorul câștigător

Proiectul mi s-a parut interesant, și cu ocazia lui am acumulat experiență în lipituri și legături.

Download

Jurnal

Probleme apărute

  1. Debug la scurt-uri
  2. A trebuit să deconectez LED-ul de la bootloader (ping PD7) deoarece debita continuu tensiune și aveam aprins mereu un LED din matrice, cu o intensitate scăzută

Bibliografie/Resurse

Datasheet ATmega16 http://www.atmel.com/Images/doc2466.pdf

Datasheet Kingbright TBC20-11EGWA http://www.farnell.com/datasheets/9622.pdf

pm/prj2012/pbara/connect4.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