X și 0
Grupa: 335CC
Nume: Andreea Tănase
E-mail : Login to see contact info.
Introducere
Proiectul constă în implementarea jocului clasic de X si 0, unde cei doi jucatori vor folosi joystick-uri pentru a controla miscarea iar tabela de X și 0 va fi afisata cu ajutorul unei matrice cu LED-uri. Jucatorul al carui rand este va fi indicat prin bratul unui servomotor iar castigatorul va fi anuntat printr-un buzzer si prin colorarea matricii in culoarea jucatorului - rosu sau albastru.
Descriere generală
Jocul incepe prin alegerea pozitiilor jucatorilor: jucatorul 1 (ce va juca pe joystick cu culoarea rosie) si jucatorul 2 (ce va juca cu joystick cu culoarea albastra). Un servomotor va indica spre jucatorul al carui rand este iar in final desemnarea castigatorului si incheierea jocului va fi anuntata cu ajutorul unui buzzer.
Afisarea pe tabla de joc va fi simbolizata prin 2 culori, rosu pentru X si albastru pentru 0; cum modulul cu matrice prezinta 8×8 LED-uri, voi scala numarul lor astfel incat sa pastreze schema de 3×3 a jocului (4 leduri → scalat la o pozitie + 2 coloane 1×8 si 2 linii 8×1 care delimiteaza pozitiile).
In momentul finalizarii jocului, matricea se va colora in culoarea castigatorului sau in alb in cazul unei remize.
Hardware Design
Număr Piese | Denumire Piese | Descriere |
1 | Arduino UNO R3(ATmega328p+ATmega16u2) | 30 lei (Optimus Digital) |
1 | Matrice cu LED-uri RGB WS2812 (8×8) | 60 lei (Optimus Digital) |
1 | Cablu USB alimentare | 2 lei (Optimus Digital) |
1 | Sursa alimentare 3,3/5V | 2 lei (Ardushop) |
1 | Breadboard830 | 3 lei (Ardushop) |
1 | Buzzer pasiv | 3 lei (Ardushop) |
65 | Fire Jumper | 10 lei (Ardushop) |
20 | Fire Dupont | 7 lei (Optimus Digital) |
2 | Modul Joystick Biaxial Negru cu 5 pini | 2 x 5.49 lei (Optimus Digital) |
1 | Micro Servomotor SG90 | 10 lei (Optimus Digital) |
Software Design
Mediu de dezvoltare: Arduino IDE.
Fiecare casuta este reprezentata de 4 LED-uri ce iau culoarea jucatorilor - rosu sau albastru - si sunt despartite de 2 linii si 2 coloane de culoare galbena.
Cum indicii matricei sunt cititi serpuit, am folosit mai multe instructiuni for pentru a parcurge invers pe liniile cu numar par. Trecerea dintre o casuta la alta se face cu incrementare cu 3 a pasului.
Cu bratul servomotorului se indica randul jucatorului respectiv - in jos (45°) este jucatorul cu culoarea rosie si in dreapta (135°) cel cu albastru.
Casuta curenta pe unde se plimba jucatorul ia culoarea alba si pentru ea am implementat o functie ce face un blink pentru a se vedea mai bine unde se afla. Functia foloseste un delay de 0.2s pentru a clipi intre alb si culoarea precedenta de pe casuta (rosu, albastru sau negru).
Cand matricea se intalneste aceeasi culoare pe o linie sau pe o diagonala, tabla se coloreaza in culoarea castigatorului si se actioneaza si buzzerul ce indica finalul jocului; daca este remiza, tabla se coloreaza in alb.
Rezultate Obţinute
Am reusit sa implementez toate functionalitatile proiectului. Intentionam sa folosesc si intreruperi pentru joystick insa las aceasta imbunatatire pentru viitor.
Mai jos, pe prima imagine, se afla un film ce prezinta proiectul intr-o maniera dramatica.
In filmul alaturat se prezinta un gameplay cu cele 3 finaluri posibile: X wins, 0 wins si draw.
Concluzii
Download
Jurnal
25.04.2021: Am creat pagina de wiki pentru proiect. Am renuntat la ideea ca jucatorul cu X sa foloseasca 4 butoane in loc de inca un joystick pentru ca ar fi aglomerat foarte tare breadboard-ul iar jocul ar fi aratat asimetric.
26.04.2021: Cu ajutorul substantei decapante am curatat pinii de pe cele 2 barete urmand mai apoi sa ii lipesc cu letconul pe matrice folosind cositor.
10.05.2021: Am inceput sa testez diferite afisari pe matrice si m-a deprimat faptul ca indecsii sai sunt parcursi intr-un mod serpuit.
Astfel, a trebuit sa reproiectez codul pentru a putea crea casutele de pe tabela si vizitarea acestora.
20.05.2021: Am reusit sa implementez gameplay-ul si in plus functionaliatea de a afisa la final culoarea invingatorului.
22.05.2021: Am adaugat servomotorul si buzzer-ul si am imbunatatit miscarea pe joystick.
25.05.2021: Proiectul a fost definitivat si urmeaza aranjarea codului sursa pentru a elimina urmele de hardcode.
29.05.2021: Tot ce tine de proiect a fost definitivat, impreuna cu pagina de wiki ce va suferi imbunatatiri pana la deadline
02.06.2021: Finalizare wiki.
Bibliografie și Resurse
-
-
Laboratoarele de pe OCW: laboratoarele 0,1,2,3,4,5,6