Codrin-Victor POIENARU - X si 0
Autorul poate fi contactat la adresa: Login pentru adresa
Introducere
Proiectul meu are ca scop implementarea in hardware a jocului de X si 0. Astfel, voi folosi o matrice de 3×3 de LED-uri bicolore pentru a reprezenta suprafata de joc pe care cei doi jucatori vor muta. Mutarile se realizeaza prin intermediul joystick-ului (un grup de 5 butoane ce reprezinta SUS, JOS, STANGA, DREAPTA, SELECT). Jucatorul 1 (cel cu simbolul X) va avea asociata culoarea verde, iar jucatorul 2 (cel cu simbolul 0) va avea asociata culoarea rosie. Pentru a anunta castigatorul, toate LED-urile din matrice se vor aprinde in culoarea acestuia, sau in ambele culori in caz de remiza. Un jucator castiga daca culoarea sa este unica de pe o linie, coloana sau diagonala a matricei.
Descriere generală
Alcatuirea schemei bloc consta in 3 module:
Hardware Design
Lista de componente:
Schema electrica:
Software Design
Pentru design-ul software, am folosit Atmel Studio 6.2.
Codul meu sursa este format din 3 fisiere:
game.h → definirea constantelor si a functiilor necesare contruirii logicii jocului.
game.c → implementarea functiilor necesare construirii logicii jocului.
project.c → legarea logicii jocului cu maparea hardware a butoanelor si LED-urilor.
Voi descrie pe scurt ce fac functiile implementate:
game.h si game.c
alloc_board → aloca tabla de joc ca un vector de 9 componente; intoarce un pointer catre zona de memorie alocata in caz de succes sau NULL in caz de esec.
free_board → elibereaza tabla de joc.
init_board → initializeaza tabla de joc cu un anumit simbol (simbolul FREE, egal cu 0); intoarce TRUE in caz de success, altfel FALSE.
move_board → muta pe tabla de joc; in cazul in care mutarea e reusita se intoarce TRUE, altfel FALSE.
check_board → verifica daca s-a terminat jocul; daca nu s-a terminat, se intoarce FALSE, altfel intoarce DRAW, PLAYER_A sau PLAYER_B.
project.c
initialize_registers → initializeaza registrii, activeaza rezistentele de pull-up.
switch_led → aprinde/stinge LED-ul de pe pozitia (i, j) in matricea de LED-uri in culoarea jucatorului primit ca parametru.
leds_mode → aprinde/stinge toate led-urile de pe tabla in culoarea unui jucator primit ca parametru.
refresh_leds → aprinde LED-urile ocupate in culoarea jucatorului care le-a ocupat.
test_leds → aprinde, apoi stinge toate LED-urile de pe tabla; aceasta este o functie de testare.
up_button_pressed → defineste ce se intampla cand se apasa butonul UP - se decrementeaza randul curent.
down_button_pressed → defineste ce se intampla cand se apasa butonul DOWN - se incrementeaza randul curent.
right_button_pressed → defineste ce se intampla cand se apasa butonul RIGHT - se incrementeaza coloana curenta.
left_button_pressed → defineste ce se intampla cand se apasa butonul LEFT - se decrementeaza coloana curenta.
select_button_pressed → defineste ce se intampla cand se apasa butonul SELECT - se incearca realizarea mutarii; daca nu se reuseste, se ramane in aceeasi pozitie cu acelasi jucator la mutare.
test_button_pressed → verifica daca s-a apasat vreun buton si apeleaza actiunea corespunzatoarea acestuia.
initialize_game → initializeaza jocul.
change_player → schimba jucatorul aflat la mutare.
destroy_game → elibereaza resursele alocate jocului.
Rezultate Obţinute
Care au fost rezultatele obţinute în urma realizării proiectului vostru.
Concluzii
Proiectul a fost interesant si destul de usor si placut de implementat. Partea mai grea a fost realizarea cablajului de test. Per ansamblu, ma bucur ca am putut avea aceasta experienta, cu dezvoltarea de la 0 a unui astfel de sistem, incepand cu hardware-ul si terminand cu software-ul.
Download
Codul sursa poate fi obtinut aici: tictactoe.zip.
Imaginile folosite in cadrul acestui wiki pot fi obtinute aici: media.zip.
Jurnal
Pasii urmati pentru a ajunge la finalul proiectului sunt:
Cumparare componente obligatorii
Lipire componente obligatorii
Cumparare componente necesare pentru tema aleasa
Lipire componente
Finalizare hardware
Dezvoltare software
Testare hardware + software
Bibliografie/Resurse