This shows you the differences between two versions of the page.
pm:prj2023:danield:tictactoe [2023/05/19 19:40] eduard.petcu |
pm:prj2023:danield:tictactoe [2023/05/28 23:38] (current) eduard.petcu [Rezultate Obţinute] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== TicTacToe ====== | ====== TicTacToe ====== | ||
- | Student: Petcu Eduard | + | Student: Petcu Eduard \\ |
Grupa: 334CC | Grupa: 334CC | ||
Line 7: | Line 6: | ||
Pentru acest proiect, voi implementa jocul de X si O pe un ecran de LCD SPI de 1.8". | Pentru acest proiect, voi implementa jocul de X si O pe un ecran de LCD SPI de 1.8". | ||
- | Cei doi jucatori vor putea controla un joystick pentru a face o mutare. | + | Acesta va putea fi jucat fie de catre 2 jucatori, in modul ''P v P'' fie de catre un singur jucator in modul ''P v Com''. |
+ | Controlul jocului va avea loc exclusiv din joystick. | ||
Am ales sa pornesc pe ideea aceasta intrucat am vrut sa imbin invatarea programarii | Am ales sa pornesc pe ideea aceasta intrucat am vrut sa imbin invatarea programarii | ||
Line 13: | Line 13: | ||
de imagini pe un LCD. | de imagini pe un LCD. | ||
- | Proiectul are ca scop realizarea unui joc utilizand componente hardware. | + | Proiectul are ca scop realizarea unui joc standard utilizand componente hardware. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
Line 41: | Line 41: | ||
{{ :pm:prj2023:danield:schema_electrica_ttt.png?500 |}} | {{ :pm:prj2023:danield:schema_electrica_ttt.png?500 |}} | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Pentru implementarea partii software a jocului de TicTacToe am inclus bibliotecile ''SPI.h'' si | ||
+ | ''TFT.h''. \\ In functia ''setup()'' am configurat LED-ul RGB, ecranul LCD si joystick-ul si am randat meniul principal | ||
+ | din care jucatorul poate alege daca sa joace contra unui alt jucator sau contra calculatorului. \\ | ||
+ | In functia ''loop()'' se asteapta ca jucatorul sa aleaga unul din cele 2 moduri de joc. \\ \\ | ||
+ | La inceperea jocului, se apeleaza una din functiile ''PvPGame()'' sau ''PvComGame()'', care se ocupa de jocul de TicTacToe propriu-zis. \\ \\ | ||
+ | In cele doua functii, se verifica daca jocul nu este terminat (in metoda ''resultOfGame()''). In cazul in care meciul este inca in | ||
+ | desfasurare, se verifica daca a avut loc o mutare a cursorului pe tabla de X si O. Verificarea are loc in functia ''moveCursor()'' la fiecare | ||
+ | 500 ms folosind tehnica de debounce. La apasarea joystick-ului, se verifica daca mutarea dorita este una valida iar in caz contrar, un sunet corespunzator se va auzi la buzzer. \\ \\ | ||
+ | Metoda ''endGameText(int result)'' este apelata la finalul jocului, iar in functie de rezultatul partidei, se va afisa: | ||
+ | * X won! | ||
+ | * O won! | ||
+ | * DRAW! | ||
+ | pe ecran timp de 5 secunde. \\ \\ | ||
+ | LED-ul RGB este folosit in modul de ''PvP'' pentru a indica ce jucator trebuie sa faca o mutare (culoarea rosu -> X trebuie sa mute; culoarea albastra -> O trebuie sa mute). De asemenea, acesta se aprinde la finalul jocului in culoarea jucatorului castigator sau in culoarea galbena (daca rezultatul este o remiza). | ||
+ | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | Schema electrica: |
- | Descrierea codului aplicaţiei (firmware): | + | {{ :pm:prj2023:danield:ttt-fizic.jpeg?200 |}} |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | ===== Rezultate Obţinute ===== | + | Meniu principal: |
+ | {{ :pm:prj2023:danield:ttt-mainmenu.jpeg?200 |}} | ||
- | <note tip> | + | Tabla de joc: |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | {{ :pm:prj2023:danield:ttt-tablepvp.jpeg?200 |}} |
- | </note> | + | |
+ | Victorie X: | ||
+ | {{ :pm:prj2023:danield:ttt-x-won.jpeg?200 |}} | ||
+ | |||
+ | Remiza: | ||
+ | {{ :pm:prj2023:danield:ttt-draw.jpeg?200 |}} | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Experienta de lucru la acest proiect a fost mai placuta decat ma asteptam intrucat am reusit sa aplic cunostintele invatate in cadrul laboratorului si am reusit sa realizez tot ce mi-am propus. Cel mai mult mi-a placut sa lucrez la partea software deoarece fiecare functie implementata avea un impact vizual pe LCD. \\ De asemenea, mi-a placut sa lucrez cu functiile din biblioteca ''Adafruit_GFX.h'' intrucat functionau similar cu functiile din framework-ul folosit la cursul de // Elemente de Grafica pe Calculator//. | ||
===== Download ===== | ===== Download ===== | ||
- | + | Codul sursa se poate gasi in arhiva: | |
- | <note warning> | + | {{:pm:prj2023:danield:tictactoe.zip|}} |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | + | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | |
- | </note> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | * 2 mai - achizitionarea componentelor hardware necesare proiectului |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * 17 mai - configurarea partii hardware a proiectului si verificarea ca toate componentele functioneaza |
- | </note> | + | * 20 mai - inceputul design-ului software |
+ | * 27 mai - finalizarea partii software a proiectului | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | + | https://eessential.blogspot.com/2017/12/18-128-x-160-tft-lcd.html?m=1 \\ | |
- | * [[https://ocw.cs.pub.ro/courses/pa/tutoriale/minimax]] | + | https://docs.arduino.cc/library-examples/tft-library/TFTDisplayText |
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |