This shows you the differences between two versions of the page.
pm:prj2023:adarmaz:joc_de_sah [2023/05/06 15:43] victor.moldovan |
pm:prj2023:adarmaz:joc_de_sah [2023/05/26 23:08] (current) victor.moldovan |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | Joc de sah | + | ====== Joc de Sah - Moldovan Victor 343C4 ====== |
+ | ===== Introducere ===== | ||
- | {{:pm:prj2023:adarmaz:microsoftteams-image.png|}} | + | Prezentarea pe scurt: |
+ | Acest proiect doreste sa implementeze un joc de sah | ||
- | Jocul de sah este pornit in momentul in care cei 2 jucatori apasa "○" **(select)**. | + | ===== Descriere generală ===== |
+ | |||
+ | {{:pm:prj2023:adarmaz:microsoftteams-image.png|}} | ||
Jucatorii pot naviga cu butoanele "←", "↑", "→", "↓", care muta cursorul pe tabla. Cursorul fiecarui jucator nu poate fi mutat decat atunci cand este tura acelui jucator. | Jucatorii pot naviga cu butoanele "←", "↑", "→", "↓", care muta cursorul pe tabla. Cursorul fiecarui jucator nu poate fi mutat decat atunci cand este tura acelui jucator. | ||
Line 10: | Line 14: | ||
In cazul in care este apasat **(select)** pe altceva decat un spatiu valid, mutarea se anuleaza si trebuie **(select)**ata din nou o piesa. | In cazul in care este apasat **(select)** pe altceva decat un spatiu valid, mutarea se anuleaza si trebuie **(select)**ata din nou o piesa. | ||
- | Jucatorii pot, odata pe tura, selecta "TIE" pentru a oferi o remiza. Asta ofera control celuilalt jucator, care poate accepta **(select)**and "TIE" sau refuza **(select)**and orice altceva. | + | Jucatorii pot, odata pe tura, selecta "TIE" pentru a oferi o remiza. Asta ofera control celuilalt jucator, care poate accepta apasand **(select)** sau refuza apasand orice altceva. |
- | Fiecare jucator are un timp fix pentru a realiza mutarea. In cazul in care nu se incadreaza in timp, jocul va executa o mutare la intamplare. | + | Fiecare jucator are un timp fix pentru a realiza mutarile. In cazul in care nu se incadreaza in timp, jocul va executa o mutare la intamplare. |
Un led este aprins de partea jucatorului activ pentru a indica a cui tura este. | Un led este aprins de partea jucatorului activ pentru a indica a cui tura este. | ||
- | Jucatorii pot (select)a "CONCEDE" pentru a renunta si a oferi victoria oponentului. | + | Jucatorii pot **(select)**a "CONCEDE" pentru a renunta si a oferi victoria oponentului. |
- | In momentul in care un joc se incheie, jucatorii trebuie sa apese (select) simultan pentru a porni un nou joc. | + | In momentul in care un joc se incheie, jucatorul a carui led este aprins trebuie sa apese oricare buton pentru a porni un nou joc. |
{{https://ocw.cs.pub.ro/courses/_media/pm/prj2023/adarmaz/pm_faculta_1_.png}} | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2023/adarmaz/pm_faculta_1_.png}} | ||
+ | |||
+ | ===== Hardware Design ===== | ||
+ | |||
+ | Lista componentelor: | ||
+ | * 2 LED | ||
+ | * 1 placa Arduino UNO | ||
+ | * 1 LCD 128x64 | ||
+ | * 10 butoane | ||
+ | * 10 rezistoare | ||
+ | * Cabluri | ||
+ | |||
+ | Pinul 4 alimenteaza LED-ul jucatorului 1. | ||
+ | Pinul 5 alimenteaza LED-ul jucatorului 2. | ||
+ | |||
+ | {{https://ocw.cs.pub.ro/courses/_media/pm/prj2023/adarmaz/led.png}} | ||
+ | |||
+ | Pinul 2 alimenteaza butoanele jucatorului 1. | ||
+ | Pinul 3 alimenteaza butoanele jucatorului 2. | ||
+ | |||
+ | {{:pm:prj2023:adarmaz:butoane.png?200|}} | ||
+ | |||
+ | Ambele circuite sunt conectate la pinul A2, de pe care se citeste tensiunea aferenta fiecarui buton. | ||
+ | Fiecare din butoane scurtcircuiteaza un numar de rezistente pentru a modifica tensiunea de pe A2. | ||
+ | |||
+ | Daca sunt apasate mai multe butoane deodata, butonul cel mai la stanga (din perspectiva jucatorului activ) are prioritate, deoarece sunt scurt-circuitate toate rezistentele de la dreapta butonului. | ||
+ | |||
+ | Pinii 10 si 11 transmit date LCD-ului. 12 este clock-ul. | ||
+ | |||
+ | Pinul GND al LCD-ului este conectat la GND-ul de pe Arduino. Pinul VCC al LCD-ului este conectat la 5V. | ||
+ | |||
+ | Pinii BLA si BLK controleaza luminozitatea ecranului si sunt conectati la 3.3V si GND, respectiv. | ||
+ | |||
+ | Codul (orientativ) de culoare pentru cabluri este: | ||
+ | * Verde pentru circuitele cu LEDuri | ||
+ | * Alb-galben-gri deschis pentru conexiunile butoanelor care scurtcircuiteaza rezistente | ||
+ | * Portocaliu pentru 3.3V | ||
+ | * Rosu pentru 5V | ||
+ | * Negru si maro pentru ground | ||
+ | * Maro pentru conexiunea cu A2 | ||
+ | |||
+ | ===== Software Design ===== | ||
+ | |||
+ | Mediul de dezvoltare este IDE-ul Arduino. | ||
+ | |||
+ | Datele care trebuiesc afisate pe ecran sunt reprezentate printr-un sir de 128x64 biti. | ||
+ | |||
+ | Tabla de sah este de dimensiune 64x64, fiecare patrat fiind 8x8. Programul are o matrice | ||
+ | de 8x8 char pe care o foloseste pentru a calcula starile jocului. | ||
+ | |||
+ | Bitii de pe ecran sunt setati prin aplicarea unor masti hardcodate care reprezinta fiecare element de UI. | ||
+ | |||
+ | Jucatorii au un cursor, stocand o pozitie pe tabla de joc. | ||
+ | |||
+ | Se genereaza o intrerupere la fiecare masuratoare pe pin analogic pentru a detecta daca butoanele au fost apasate. | ||
+ | |||
+ | Se genereaza o intrerupere la fiecare secunda pentru a decrementa timerul jucatorului activ. | ||
+ | |||
+ | Am folosit biblioteca U8G2 pentru a scrie pe LCD. | ||
+ | |||
+ | ===== Rezultate Obţinute ===== | ||
+ | |||
+ | Un joc de sah cu ecran LCD. | ||
+ | |||
+ | ===== Download ===== | ||
+ | |||
+ | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||
+ | |||
+ | ===== Bibliografie/Resurse ===== | ||
+ | |||
+ | https://github.com/olikraus/u8g2 - Biblioteca u8g2. | ||
+ |