This shows you the differences between two versions of the page.
pm:prj2023:amocanu:implementare-joc-battleship:create-page [2023/05/23 18:56] robert_andrei.leahu |
pm:prj2023:amocanu:implementare-joc-battleship:create-page [2023/05/30 10:31] (current) robert_andrei.leahu |
||
---|---|---|---|
Line 2: | Line 2: | ||
=====Introducere===== | =====Introducere===== | ||
- | Am decis sa fac implementarea jocului Battleship, folosind un microcontroller, o matrice cu LED-uri, m-am gândit sa folosesc un ecran LCD pentru scor, un timer pe care îl folosesc pentru a avea timeout la miscări si un buzzer pe care îl folosesc atunci cand câstigi/pierzi, eventual dupa fiecare miscare. | + | Am decis sa fac implementarea jocului Battleship, folosind un microcontroller, o matrice cu LED-uri, m-am gândit sa folosesc un ecran LCD pentru scor, un servomotor care indica ce player ataca si un buzzer pe care îl folosesc atunci cand câstigi/pierzi, eventual dupa fiecare miscare. |
Afișajul se va împărți în două regiuni egale, una pentru fiecare jucător si se vor genera cel puțin două forme diferite de nave / vapoare pentru fiecare jucător, plasate aleator pe spațiul de joc. | Afișajul se va împărți în două regiuni egale, una pentru fiecare jucător si se vor genera cel puțin două forme diferite de nave / vapoare pentru fiecare jucător, plasate aleator pe spațiul de joc. | ||
- | Poziția de lovire va fi selectată de un jucător folosind 4 butoane pentru direcțiile stânga, dreapta, sus, jos sau un joystick. Confirmarea poziției se va realiza folosind un alt buton; | + | Poziția de lovire va fi selectată de un jucător folosind 4 butoane pentru direcțiile stânga, dreapta, sus, jos sau un joystick. Confirmarea poziției se va realiza folosind un alt buton. |
- | Odata ce un „vapor” a fost lovit și scufundat, led-urile aferente lui se vor aprinde într-o anumită culoare și vor rămâne aprinse pe toată durata jocului; | + | Odata ce un „vapor” a fost lovit și scufundat, led-urile aferente lui se vor aprinde într-o anumită culoare și vor rămâne aprinse pe toată durata jocului. |
- | Pozițiile de pe matrice unde s-a încercat o lovire, însă ele au fost libere, vor rămâne aprinse pe toată durata jocului înt-o anumită culoare. | + | Pozițiile de pe matrice unde s-a încercat o lovire, însă ele au fost libere, vor rămâne aprinse pe toată durata jocului înt-o anumită culoare(rosu). |
- | În momentul în care un jucător câștigă se va afișa un mesaj corespunzător, precum și scorul, iar buzzer-ul o sa inceapa sa cante. Buzzer-ul o să cânte și atunci când un jucător o să piardă. Dupa fiecare miscare am decis sa pun un timeout, pentru ca jucătorul să se gândească, folosind un timer. | + | În momentul în care un jucător câștigă se va afișa un mesaj corespunzător, precum și scorul, iar buzzer-ul o sa inceapa sa cante. |
=====Descriere Generala===== | =====Descriere Generala===== | ||
Line 19: | Line 19: | ||
**SCHEMA_BLOC:** | **SCHEMA_BLOC:** | ||
- | {{:pm:prj2023:amocanu:implementare-joc-battleship:screenshot_2023-05-07_135554.png?500|}} | + | {{:pm:prj2023:amocanu:implementare-joc-battleship:poze_pm_schema.png?600|}} |
</note> | </note> | ||
Line 38: | Line 38: | ||
{{:pm:prj2023:amocanu:implementare-joc-battleship:schema_electrica-1.png?755|}} | {{:pm:prj2023:amocanu:implementare-joc-battleship:schema_electrica-1.png?755|}} | ||
+ | |||
+ | **Completarea schemei electrice:** | ||
+ | |||
+ | {{:pm:prj2023:amocanu:implementare-joc-battleship:schema_electrica2.2.png?755|}} | ||
=====Software Design===== | =====Software Design===== | ||
Line 56: | Line 60: | ||
void setup() { | void setup() { | ||
+ | const int buzzer = 9; //buzzer to arduino pin 9 | ||
randomSeed(analogRead(0)); // seeds the random number generator by a value obtained from doing AnalogRead on pin A0 | randomSeed(analogRead(0)); // seeds the random number generator by a value obtained from doing AnalogRead on pin A0 | ||
myServo.attach(13); // attaches the servo on pin 9 to the servo object | myServo.attach(13); // attaches the servo on pin 9 to the servo object | ||
lcd.backlight(); // turn on backlight | lcd.backlight(); // turn on backlight | ||
- | lcd.begin(); // initialize the lcd | + | //lcd.init(); |
+ | lcd.begin(); // initialize the lcd | ||
lc.shutdown(0, false); // turns the display on | lc.shutdown(0, false); // turns the display on | ||
Line 105: | Line 111: | ||
poziția atacată se găsește o navă și returnează 1 la hit, 0 la miss; la fiecare | poziția atacată se găsește o navă și returnează 1 la hit, 0 la miss; la fiecare | ||
hit, se marchează acea poziție pe hartă | hit, se marchează acea poziție pe hartă | ||
+ | <code> | ||
+ | int checkWin(int player) { | ||
+ | // if the matrix is full of 0's, then current player wins | ||
+ | if (player == 0) { | ||
+ | for (int i = 0; i < 8; i++) { | ||
+ | for (int j = 0; j < 8; j++) { | ||
+ | if (B[i][j] == 1) { | ||
+ | // no win yet | ||
+ | return 0; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | // win | ||
+ | return 1; | ||
+ | } else { | ||
+ | // same thing, but for player 1 on map A | ||
+ | for (int i = 0; i < 8; i++) { | ||
+ | for (int j = 0; j < 8; j++) { | ||
+ | if (A[i][j] == 1) { | ||
+ | // no win yet | ||
+ | return 0; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | // win | ||
+ | |||
+ | return 1; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | * **displayScore:** afișează pe LCD scorul (numărul de hit-uri) fiecărui jucător | ||
+ | <code> | ||
+ | |||
+ | // function to display the score on the LCD | ||
+ | void displayScore() { | ||
+ | lcd.setCursor(0, 1); | ||
+ | lcd.print("SCORE: "); | ||
+ | lcd.print(scoreP0); | ||
+ | lcd.print("-"); | ||
+ | lcd.print(scoreP1); | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | * am setat ca palyer-ul sa se poata misca de pe butoanele 2,6,8,4(sus,dreapta,jos,stanga) | ||
+ | * de pe butonul 5 de pe keypad sa atace, iar de pe butoanele 1 si 3 sa arate unde sunt pozitionate navele | ||
+ | player-ului 0, respectiv 1 | ||
+ | * de pe butonul 9 am setat sa intre in CHEAT MODE 8-O :!: 8-), adica pentru player-ul 1 nava player-ului 0 o sa se afle pe poz | ||
+ | A[7][0], iar acesta daca o doboara o sa fie WIN | ||
+ | * pentru player-ul 0 am setat dupa CHEAT MODE, ca matricea sa fie full de nave astfel incat orice loveste sa fie HIT | ||
+ | * la fiecare MISS, buzzer-ul incepe sa sune, iar la WIN acesta o sa sune de 3 ori | ||
=====Rezultate Obtinute===== | =====Rezultate Obtinute===== | ||
+ | {{:pm:prj2023:amocanu:implementare-joc-battleship:poza2.jpg?300|}}{{:pm:prj2023:amocanu:implementare-joc-battleship:poza3.jpg?300|}}{{:pm:prj2023:amocanu:implementare-joc-battleship:poza4.jpg?300|}}{{:pm:prj2023:amocanu:implementare-joc-battleship:poza5.jpg?300|}}{{:pm:prj2023:amocanu:implementare-joc-battleship:poza6.jpg?300|}}{{:pm:prj2023:amocanu:implementare-joc-battleship:poza7.jpg?300|}} | ||
+ | |||
+ | Link functionalitate joc: https://drive.google.com/file/d/1RmKv85lGWfdCYsZFTIDbRUb7dYbA8ft5/view?usp=sharing | ||
- | <note> | ||
- | </note> | ||
=====Concluzii===== | =====Concluzii===== | ||
- | <note> | + | Pot afirma că a fost o experiență plăcută și provocatoare, deoarece am întâlnit elemente noi, precum asamblarea pieselor și principiile de funcționare corespunzătoare. Am invatat sa aplic conceptele de electronică în contextul real și noțiunile aduse în discuție în cadrul acestei discipline. Prin intermediul acestui proiect, am reușit să pun în practică funcționalitățile planificate, consolidându-mi cunoștințele acumulate în timpul cursurilor și laboratoarelor. |
- | </note> | + | |
=====Download===== | =====Download===== | ||
<note> | <note> | ||
+ | {{:pm:prj2023:amocanu:implementare-joc-battleship:battleship_game.zip|}} | ||
</note> | </note> | ||
=====Jurnal===== | =====Jurnal===== | ||
- | <note> | + | * 22.04 -> alegerea temei proiectului |
- | </note> | + | * 15.05 -> Milestone 1 |
+ | * 23.05 -> Milestone 2 | ||
+ | * 30.05 -> Prezentare finala | ||
=====Bibliografie/Resurse===== | =====Bibliografie/Resurse===== | ||
Line 132: | Line 194: | ||
* {{:pm:prj2023:amocanu:implementare-joc-battleship:document.pdf|}} | * {{:pm:prj2023:amocanu:implementare-joc-battleship:document.pdf|}} | ||
* [[pm:prj2023:amocanu:implementare-joc-battleship:create-page|]] | * [[pm:prj2023:amocanu:implementare-joc-battleship:create-page|]] | ||
+ | * https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/ | ||
+ | * https://forum.arduino.cc/t/turning-off-i2c-backlight/108963?fbclid=IwAR1xp6YQ1ukRXlfsvukuQEFxVcYd26rFnW6QF1iJ_VPmg6dZ3_G2gvFFvMc | ||
+ | * http://www.geeksforgeeks.org/orientation-3-ordered-points/ | ||
</note> | </note> |