This shows you the differences between two versions of the page.
pm:prj2021:apredescu:battleship [2021/06/03 18:30] 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== | ||
Line 20: | 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 64: | 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 0 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 76: | 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 96: | Line 96: | ||
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-uri, folosind in partea de software functiile din bibliotecile corespunzatoare. |
===== Download ===== | ===== Download ===== | ||
Cod sursa: {{:pm:prj2021:apredescu:tircamiruna_cod_sursa.zip|}} | 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://bitbucket.org/nerdfirst/arduino-8x8-basics/src/master/ | ||
Line 107: | Line 119: | ||
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|}} | ||
+ | |||