Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:apredescu:battleship [2021/06/03 17:50]
miruna_dalia.tirca
pm:prj2021:apredescu:battleship [2021/06/04 18:50] (current)
miruna_dalia.tirca [Download]
Line 7: Line 7:
  
 ===== Descriere generală ===== ===== Descriere generală =====
-Fiecare jucator are o harta cu 3 nave de lungimi diferite dispuse random pe o matrice 8x8. Pe rand, fiecare jucator va ataca navele de pe harta adversarului,​ prin alegerea unui pozitii folodind tastele de pe keypad. Interfata cu jucatorii se face prin intermediul unui ecran LCD - pe care se va afisa al cui este randul si un mesaj atunci cand un jucator a atacat o pozitie - daca este hit sau miss. In timpul jocului, matricea de LED-uri este folosita pentru a-i arata jucatorului curent pe ce pozitie se afla (prin aprinderea unui LED), iar la castogarea ​jocului, va fi afisata +Fiecare jucator are o harta cu 3 nave de lungimi diferite dispuse random pe o matrice 8x8. Pe rand, fiecare jucator va ataca navele de pe harta adversarului,​ prin alegerea unui pozitii folodind tastele de pe keypad. Interfata cu jucatorii se face prin intermediul unui ecran LCD - pe care se va afisa al cui este randul si un mesaj atunci cand un jucator a atacat o pozitie - daca este hit sau miss. In timpul jocului, matricea de LED-uri este folosita pentru a-i arata jucatorului curent pe ce pozitie se afla (prin aprinderea unui LED), iar la castigarea ​jocului, va fi afisata 
-harta cu navele ​doborata ​ale adversarului.+harta cu navele ​doborate ​ale adversarului.
  
 ==Schema Bloc== ==Schema Bloc==
-{{:​pm:​prj2021:​apredescu:​tircamiruna_schema_bloc.png?600|}} +{{:​pm:​prj2021:​apredescu:​tircamiruna_331cc_schemabloc.png?600|}}
     -Arduino Uno R3     -Arduino Uno R3
       * Mediaza fluzul de date intre keypad, matricea de LED-uri si LCD 16×2.       * Mediaza fluzul de date intre keypad, matricea de LED-uri si LCD 16×2.
Line 21: Line 20:
       * La finalul jocului, pentru castigator, va fi afisata pe matricea de LED-uri harta doborata a adversarului.       * La finalul jocului, pentru castigator, va fi afisata pe matricea de LED-uri harta doborata a adversarului.
     -LCD-I2C     -LCD-I2C
-      * Afiseaza care este jucatorul curent (jucatorul 0 sau 1) si, la fiecare apasare a unei taste, este afisata ​deplasarea pe harta.+      * Afiseaza care este jucatorul curent (jucatorul 0 sau 1) si, la fiecare apasare a unei taste, este afisata ​directia deplasarii.
       * La apasarea tastei 5(atac) este afisat pe ecran daca a fost hit sau miss.       * La apasarea tastei 5(atac) este afisat pe ecran daca a fost hit sau miss.
       * La sfarsitul jocului (cand un jucator a doborat toate navele adversarului),​ este afisat pe ecran mesajul "​Player 0/1 won".       * La sfarsitul jocului (cand un jucator a doborat toate navele adversarului),​ este afisat pe ecran mesajul "​Player 0/1 won".
Line 65: Line 64:
  
  - setup()  - setup()
-  * Initializare de variabile: hartile, pozitia de inceput de atac (stanga sus), WON(id-ul jucatorului castigator, initial -1).+  * Initializarea variabilelor: hartile, pozitia de inceput de atac (stanga sus), WON(id-ul jucatorului castigator, initial -1).
   * Initializarea modulelelor:​ LCD, matricea de LED-uri, keypad.   * Initializarea modulelelor:​ LCD, matricea de LED-uri, keypad.
  
  - loop()  - loop()
-  * Cat timp jocul nu este castigat, astept ca jucatorul curent sa aleaga ce pozitie va ataca: afisez pe matricea de LED-uri pozitia selectata de jucator prin apasarea tastelor (si deplasarea) pana cand este apasata tasta 5 - cand se va verifica pe harta adversarului (o matrice ​cu 0/1, unde daca la pozitia i,j este 1, inseaamna ca celula face parte dintr-o nava) daca atacul este hit sau miss. +  * Cat timp jocul nu este castigat, astept ca jucatorul curent sa aleaga ce pozitie va ataca: afisez pe matricea de LED-uri pozitia selectata de jucator prin apasarea tastelor (si deplasarea) pana cand este apasata tasta 5 - cand se va verifica pe harta adversarului (o matrice ​de si 1) daca atacul este hit sau miss. 
-  * Daca a fost hit, se pastreaza acelasi player, iar daca a fost miss, se marcheaza pe harta adversarului ​(se trece celula de la acea pozitie din 1 in 0) si se trece la player-ul urmator.+  * Daca a fost hit, se pastreaza acelasi player, iar daca a fost miss, se marcheaza pe harta adversarului si se trece la player-ul urmator.
   * Jocul a fost castigat atunci cand harta adversarului este complet nula, moment in care este afisat un mesaj pe LCD si pe matricea de LED-uri apare harta "​doborata"​ a adversarului.   * Jocul a fost castigat atunci cand harta adversarului este complet nula, moment in care este afisat un mesaj pe LCD si pe matricea de LED-uri apare harta "​doborata"​ a adversarului.
  
Line 77: Line 76:
  - generateMap  - generateMap
   * Genereaza o matrice de 0 si 1 ce reprezinta o harta cu nave de lungime 2, 3 si 4 aseazate random (navele sunt marcate cu 1 in matrice).   * Genereaza o matrice de 0 si 1 ce reprezinta o harta cu nave de lungime 2, 3 si 4 aseazate random (navele sunt marcate cu 1 in matrice).
-  * Pentru fiecare noua nava, folosesc functia random pentru a gasi pozitia de start (x si y) si directia ​(sus, jos, stanga, dreapta). Pe baza acestor date calculez pozitia in care se termina nava - vazuta ca un segment de la (xStart, yStart) la (xEnd, yEnd). La adaugarea fiecarei noi nave, verific daca intersecteaza cu segmentul unei alte nave deja amplasate.+  * Pentru fiecare noua nava, folosesc functia random pentru a gasi pozitia de start si directia. Pe baza acestor date verific daca nava nu intersecteaza cu alte nave deja amplasate.
  
  - checkHit  - checkHit
-  * Derifica ​pentru player-ul curent daca pe harta adversarului,​ la pozitia atacata se gaseste o nava (daca la acea pozitie se gasetse 1 pe matricea adversarului) ​si returneaza 1 la hit, 0 la miss. +  * Verifica ​pentru player-ul curent daca pe harta adversarului,​ la pozitia atacata se gaseste o nava si returneaza 1 la hit, 0 la miss. 
-  * La fiecare hit, se marcheaza ​cu 0 la acea pozitie.+  * La fiecare hit, se marcheaza acea pozitie ​pe harta.
  
  - checkWin  - checkWin
Line 91: Line 90:
  
  
-{{:​pm:​prj2021:​apredescu:​tircamiruna_final1.jpeg?​600|}} +{{:​pm:​prj2021:​apredescu:​tircamiruna_final1.jpeg?​400|}} 
 +{{:​pm:​prj2021:​apredescu:​tircamiruna_final2.jpeg?​400|}} 
 +{{:​pm:​prj2021:​apredescu:​tircamiruna_final3.jpeg?​400|}}
  
 Video: https://​www.youtube.com/​watch?​v=DhTAVobn_Z4 Video: https://​www.youtube.com/​watch?​v=DhTAVobn_Z4
 ===== Concluzii ===== ===== Concluzii =====
-Proiectul este realizat in intregime si functional. Mi-a placut sa lucrez la acest proiect, pentru ca am putut sa vad si o implemntare ​in harware a unui joc. Am invatat sa folosesc keypad-ul, modulele de LCD si matricea de LED-uri folosind in partea de software functiile din bibliotecile corespunzatoare.+Proiectul este realizat in intregime si functional. Mi-a placut sa lucrez la acest proiect, pentru ca am putut sa vad si o implementare ​in harware a unui joc. Am invatat sa folosesc keypad-ul, modulele de LCD si matricea de LED-urifolosind in partea de software functiile din bibliotecile corespunzatoare.
  
  
 ===== Download ===== ===== Download =====
 +Cod sursa: {{:​pm:​prj2021:​apredescu:​tircamiruna_cod_sursa.zip|}}
 +
 +
 +
 +===== Jurnal =====
 +  * 30 aprilie: alegere tema proiect, creare pagina de documentatie
 +  * 4 mai: achizitionare piese
 +  * 10 mai: asamblare piese hardware, testare componente
 +  * 17 mai: implementarea jocului
 +  * 30 mai: schema electrica
 +  * 4 iunie: finalizare pagina de documentatie
 +
  
 ===== Bibliografie ===== ===== Bibliografie =====
 +https://​bitbucket.org/​nerdfirst/​arduino-8x8-basics/​src/​master/​
 +
 +https://​www.youtube.com/​watch?​v=q9YC_GVHy5A
 +
 https://​www.geeksforgeeks.org/​check-if-two-given-line-segments-intersect/​ https://​www.geeksforgeeks.org/​check-if-two-given-line-segments-intersect/​
 +
 +{{:​pm:​prj2021:​apredescu:​tircamiruna_wiki.pdf|}}
 +
  
pm/prj2021/apredescu/battleship.1622731812.txt.gz · Last modified: 2021/06/03 17:50 by miruna_dalia.tirca
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0