This shows you the differences between two versions of the page.
pm:prj2021:amocanu:tic-tac-toe_ar [2021/05/26 14:20] anca.rosculete [Software Design] |
pm:prj2021:amocanu:tic-tac-toe_ar [2021/05/29 11:18] (current) anca.rosculete [Software Design] |
||
---|---|---|---|
Line 37: | Line 37: | ||
===Schema electrică=== | ===Schema electrică=== | ||
- | {{ :pm:prj2021:amocanu:rosculete-schema-electrica.png }} | + | {{ :pm:prj2021:amocanu:rosculete-schema-electrica-v2.png?750}} |
=====Software Design===== | =====Software Design===== | ||
Line 45: | Line 45: | ||
- Adafruit GFX | - Adafruit GFX | ||
- Adafruit ST7735 | - Adafruit ST7735 | ||
+ | - SPI.h | ||
* algoritmi și structuri de date: | * algoritmi și structuri de date: | ||
- logică simplă (if, while, for, etc.) | - logică simplă (if, while, for, etc.) | ||
Line 52: | Line 53: | ||
- funcția **setup()** inițializează pozițiile pe axe ale liniilor careului, pozițiile pentru X și O în fiecare careu, diferite variabile care marchează statusul jocului și poziția curentă a jucătorului, pinii pentru joystick, buzzer, de asemenea desenează careul inițial și poziția inițială la care se afla jucătorul X. Mai mult, buzzerul va produce un zgomot care marchează începutul jocului. Este inițializată și o matrice 3x3 pentru a ști ce poziții sunt ocupate și de către cine. | - funcția **setup()** inițializează pozițiile pe axe ale liniilor careului, pozițiile pentru X și O în fiecare careu, diferite variabile care marchează statusul jocului și poziția curentă a jucătorului, pinii pentru joystick, buzzer, de asemenea desenează careul inițial și poziția inițială la care se afla jucătorul X. Mai mult, buzzerul va produce un zgomot care marchează începutul jocului. Este inițializată și o matrice 3x3 pentru a ști ce poziții sunt ocupate și de către cine. | ||
- funcția **loop()** afișează de fiecare dată noile informații și citește pinii pentru axele X și Y de la joystick și mută X-ul conform datelor primite de la joystick. Aici, citind pinul SW de la joystick, se confirmă mutarea dacă este validă și se dă prin funcția tone() semnal la buzzer pentru a scoate sunet. | - funcția **loop()** afișează de fiecare dată noile informații și citește pinii pentru axele X și Y de la joystick și mută X-ul conform datelor primite de la joystick. Aici, citind pinul SW de la joystick, se confirmă mutarea dacă este validă și se dă prin funcția tone() semnal la buzzer pentru a scoate sunet. | ||
+ | - funcțiile **drawSymbolX(currentX, currentY) drawSymbolO(currentX, currentY)** desenează simbolul X/O la poziția din matrice primită ca parametrii la funcție. | ||
+ | - funcția **drawBackground()** o folosesc deseori de-a lungul programului pentru a redesena careul și simbolurile X/O deja prezente | ||
+ | - funcția **isMovesLeft(matrix[3][3])** verifică dacă mai sunt locuri libere in matrice pentru a ști dacă s-a finalizat jocul. | ||
+ | - funcția **evaluate(matrix[3][3])** este folosită în algoritmul Minimax pentru a verifica victoria unuia dintre jucători. | ||
+ | - funcția **minimax(matrix[3][3], depth, isMax)** implementează efectiv algoritmul, folosindu-se și de funcția findBestMove. | ||
+ | - funcția **checkgGameStatus()** o folosesc în funcția loop() pentru a verifica dacă a câștigat cineva, dacă e remiză sau încă nu s-a terminat jocul. | ||
+ | |||
+ | =====Rezultate obținute===== | ||
+ | [[https://github.com/ancamaria99/Tic-Tac-Toe|Cod sursă]] \\ | ||
+ | [[https://youtu.be/_ywl_1gQxKk|Video Demo]] | ||
+ | |||
+ | =====Concluzii===== | ||
+ | Proiectul pentru PM a reprezentat o provocare, dar chiar mi-a plăcut să descopăr ce pot realiza. Partea de hardware nu mi s-a părut complicată, în cadrul acest proiect software-ul era cel ce necesita mai mult timp. Sunt sigură că pot îmbunătăți algoritmul pentru mutările calculatorului și se mai pot adăuga noi feature-uri. Proiectul meu m-a ajutat să mă familiarizez foarte tare cu lucrul cu LCD-ul și constituie un punct de plecare pentru alte aplicații pe care le-aș mai putea realiza pe acesta (lucrul cu LCD-ul și desenarea obiectelor a fost partea care mi-a luat cel mai mult, dar odată ce m-am obișnuit lucrurile au mers repede). | ||
+ | |||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | Link către pagină: | + | * https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf |
- | https://ocw.cs.pub.ro/courses/pm/prj2021/amocanu/tic-tac-toe_ar \\ | + | * https://exploreembedded.com/wiki/Analog_JoyStick_with_Arduino |
- | Pagina în format PDF: | + | * https://www.youtube.com/watch?v=xDgwxYMmhGI |
- | {{:pm:prj2021:amocanu:tic-tac-toe_game.pdf|}} | + | |
+ | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||