Differences

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

Link to this comparison view

pm:prj2024:sseverin:andra_ioana.stoica [2024/04/28 16:41]
andra_ioana.stoica created
pm:prj2024:sseverin:andra_ioana.stoica [2024/05/27 23:30] (current)
andra_ioana.stoica [Rezultate Obţinute]
Line 1: Line 1:
-====== ​Nume proiect ​======+====== ​Minesweeper ​======
 ===== Introducere ===== ===== Introducere =====
  
-<note tip> +Proiectul meu constă într-o simulare a jocului Minesweeper ​pe un display de dimensiuni reduse, în care este inclus un buzzer pentru ​marca începutul și finalul jocului în funcție de verdictul acestuia (câștigător/​necâștigător). 
-Prezentarea ​pe scurt proiectului vostru: + 
-  * ce face +Scopul acestui proiect ​este să recreez experiențclasică ​jocului Minesweeper pe un dispozitiv compact, oferind posibilitatea ​de experimenta acest joc captivant, chiar șîntr-un mediu mai restrâns. 
-  * care este scopul lui + 
-  * care fost ideea de la care aţi pornit +Cred că acest proiect ​este util pentru alții deoarece oferă o alternativă de petrecere a timpului liber șstimulează logica și gândirea strategică. Pentru mine, acest proiect reprezintă o oportunitate de a-mi dezvolta abilitățile în programare și de a oferi o soluție creativă și interactivă ​pentru ​utilizatori.
-  * de ce credeţi că este util pentru alţii şi pentru ​voi +
-</​note>​+
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> +**1. Inițializarea jocului:** 
-O schemă bloc cu toate modulele proiectului vostru, atât software cât şhardware însoţită de o descriere ​acestora precum şi a modului ​în care interacţionează.+  * Se inițializează matricea reprezentând tabla de joc pe placa Arduino ​cu dimensiunile prestabilite șse plasează un număr aleator ​de bombe în diverse poziții în matrice. 
 +  * Se afișează pe display un mesaj de început și se activează buzzer-ul pentru ​marca începutul jocului. 
 +**2. Interacțiunea utilizatorului:​** 
 +  * Utilizatorul selectează o poziție din matrice, reprezentând o celulă din tabla de joc, folosindu-se de butoane (pentru selectare) șjoystick (pentru mutare). 
 +  * Dacă poziția aleasă este o bombă, se declanșează finalul jocului și se activează buzzer-ul pentru ​indica pierderea. 
 +  * Dacă poziția aleasă nu este o bombă, se afișează numărul de bombe adiacente (0, 1, 2, 3 etc.) și se continuă jocul. 
 +**3. Descoperirea zonei:** 
 +  * Dacă poziția selectată are valoarea 0 (adică nu are bombe adiacente), se descoperă automat o zonă de celule conectate care nu conțin bombe, extinzând astfel aria jocului. 
 +  * Pentru aceste celule, se afișează numărul de bombe adiacente sau, în cazul în care sunt și ele 0, se continuă descoperirea zonei. 
 +**4. Verificarea câștigului:​** 
 +  * După fiecare selectare a unei poziții, se verifică dacă toate celulele fără bombe au fost descoperite. Dacă da, jocul este câștigat. 
 +  * În cazul câștigului,​ se declanșează finalul jocului și se activează buzzer-ul pentru a indica câștigul. 
 +**5. Finalizarea jocului:​** 
 +  * Dacă utilizatorul a selectat o poziție cu bombă sau a descoperit toate celulele fără bombe, jocul se încheie. 
 +  * Se afișează un mesaj corespunzător pe display și se dezactivează buzzer-ul pentru a marca sfârșitul jocului.
  
-Exemplu de schemă blochttp://​www.robs-projects.com/​mp3proj/​newplayer.html +{{ :pm:prj2024:​sseverin:​stoicaandrapm.png |}}
-</​note>​+
  
 ===== Hardware Design ===== ===== Hardware Design =====
 +
 +Listă componente necesare:
 +  * Arduino UNO (sau echivalent) x 1
 +  * Display (I2C) x 1
 +  * Buzzer x 1
 +  * LED-uri x 2
 +  * Butoane x 4
 +  * Joystick analog x 1
 +  * Cabluri
 +  * Breadboard x 1
 +  * Rezistori
  
 <note tip> <note tip>
-Aici puneţi tot ce ţine de hardware design: +În imaginile ​ce urmează, am folosit 2 potențiometre în locul joystick-ului care se ocupă ​de mișcările ​pe sistemul de axe xOy.
-  * listă de piese +
-  * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri,​ e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +
-  * diagrame de semnal  +
-  * rezultatele simulării+
 </​note>​ </​note>​
 +
 +Model Tinkercad:
 +
 +{{ :​pm:​prj2024:​sseverin:​andrastoica-tinkercad.jpg?​500 |}}
 +
 +Schematic:
 +
 +{{ :​pm:​prj2024:​sseverin:​andrastoica-schematic.jpg?​500 |}}
 +
 +Cum arată acum:
 +
 +{{ :​pm:​prj2024:​sseverin:​andrastoica-hardware.jpg?​500 |}}
  
 ===== Software Design ===== ===== Software Design =====
  
 +=== Mediu de Dezvoltare ===
  
-<note tip> +  ​* **Platformă de Dezvoltare:** Arduino IDE
-Descrierea codului aplicaţiei (firmware):​ +
-  ​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>​+
  
 +=== Biblioteci folosite ===
 +1. **Wire Library (`Wire.h`):​**
 +     - **Descriere:​** Bibliotecă standard care facilitează comunicarea I2C între Arduino și alte dispozitive I2C.
 +     - **Link:** [[https://​www.arduino.cc/​en/​Reference/​Wire|Wire Library]]
 +2. **LiquidCrystal_I2C Library (`LiquidCrystal_I2C.h`):​**
 +     - **Descriere:​** Utilizată pentru a controla afișajele LCD I2C.
 +     - **Link:** [[https://​github.com/​johnrickman/​LiquidCrystal_I2C|LiquidCrystal I2C Library]]
 +
 +=== Algoritmi şi Metode Implementate ===
 +1. //setup()//
 +  * **Descriere:​** Inițializează toate componentele utilizate în joc, inclusiv LCD-ul, butoanele, LED-urile și buzzer-ul. Afișează un mesaj de întâmpinare pe LCD și pornește sunetul de start. Setează timerul inițial și pregătește tabla de joc.
 +
 +2. //loop()//
 +  * **Descriere:​** Bucla principală a programului care verifică starea jocului. Actualizează afișajul și poziția cursorului în funcție de intrările joystick-ului și butoanelor. Dacă jocul nu s-a terminat, permite selectarea celulelor și resetarea jocului prin butoane. Dacă jocul s-a terminat, afișează un mesaj de final și permite resetarea jocului.
 +
 +3. //​generate_board()//​
 +  * **Descriere:​** Inițializează tabla de joc cu celule acoperite (`#`). Aceasta pregătește tabla pentru jocul nou.
 +
 +4. //​initialize_game()//​
 +  * **Descriere:​** Inițializează jocul cu o configurație predefinită a minelor pe tablă. Copiază configurația minelor într-o variabilă globală.
 +
 +5. //​display_board()//​
 +  * **Descriere:​** Afișează tabla de joc și timpul curent pe LCD. Afișează două rânduri din tablă și timpul de joc în format mm:ss în partea dreaptă a ecranului.
 +
 +6. //​position_cursor()//​
 +  * **Descriere:​** Poziționează cursorul pe baza intrării joystick-ului. Permite deplasarea cursorului în sus, jos, stânga și dreapta pe tablă.
 +
 +7. //​select_cell()//​
 +  * **Descriere:​** Selectează o celulă și dezvăluie conținutul acesteia. Dacă celula conține o mină, jocul se termină. Dacă celula conține `0`, dezvăluie și celulele adiacente care conțin `0`.
 +
 +8. //​reveal_connected_zeros()//​
 +  * **Descriere:​** Descoperă celulele adiacente care conțin `0` și celulele învecinate fără mine. Utilizează o coadă pentru a explora recursiv celulele adiacente.
 +
 +9. //​check_win()//​
 +  * **Descriere:​** Verifică dacă toate celulele non-mină au fost descoperite. Dacă toate celulele non-mină sunt descoperite,​ jucătorul câștigă.
 +
 +10. //​display_win_message()//​
 +  * **Descriere:​** Afișează mesajul de câștig pe LCD pentru 2 secunde.
 +
 +11. //​display_game_over_message()//​
 +  * **Descriere:​** Afișează mesajul de game over pe LCD pentru 2 secunde.
 +
 +12. //​scroll_message()//​
 +  * **Descriere:​** Afișează un mesaj pe LCD care se derulează pentru a încuraja jucătorul să reînceapă jocul. Este utilizat după terminarea jocului.
 +
 +13. //​reveal_final_state()//​
 +  * **Descriere:​** Dezvăluie starea finală a jocului cu bombele clipind timp de 3 secunde. Aceasta este utilizată atât pentru câștig, cât și pentru pierdere.
 +
 +14. //​playStartSound()//​
 +  * **Descriere:​** Redă un sunet de început specific atunci când jocul începe. Utilizează un buzzer pentru a reda o melodie predefinită.
 +
 +15. //​playWinningSound()//​
 +  * **Descriere:​** Redă un sunet specific de câștig atunci când jucătorul câștigă jocul. Utilizează un buzzer pentru a reda o melodie predefinită de câștig.
 +
 +16. //​playLosingSound()//​
 +  * **Descriere:​** Redă un sunet specific de pierdere atunci când jucătorul pierde jocul. Utilizează un buzzer pentru a reda o melodie predefinită de pierdere.
 +
 +17. //​reset_game()//​
 +  * **Descriere:​** Resetează toate variabilele și starea jocului pentru a începe un joc nou. Afișează un mesaj de inițializare pe LCD și redă sunetul de început. Resetează timerul, LED-urile și cursorul.
 +
 +=== Surse şi Funcţii Implementate ===
 +
 +**Codul Principal:​** [[https://​github.com/​andraioanastoica/​Minesweeper-Game-Arduino.git|GitHub link]]
 +
 +=== Laboratoare utilizate ===
 +  - [[pm:​lab:​lab3-2023-2024|]]
 +  - [[pm:​lab:​lab4-2023-2024|]]
 +  - [[pm:​lab:​lab6-2023-2024|]]
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +** Demo Youtube**: [[https://​youtu.be/H7WNXmb3Qjk|Link]]
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</note>+
  
 +Câteva poze cu carcasa finală:
 +
 +{{ :​pm:​prj2024:​sseverin:​rezultat3stoicaandra.jpeg?​nolink&​400 |}}
 +
 +{{ :​pm:​prj2024:​sseverin:​rezultat2stoicaandra.jpeg?​nolink&​400 |}}
 +
 +{{ :​pm:​prj2024:​sseverin:​rezultat1stoicaandra.jpeg?​nolink&​400 |}}
 ===== Concluzii ===== ===== Concluzii =====
  
 +Proiectul a fost o oportunitate excelentă de a învăța și de a aplica cunoștințe despre programarea microcontrolerelor,​ integrarea componentelor hardware și dezvoltarea unui joc complet funcțional. A fost un exemplu clar de cum se poate combina hardware-ul și software-ul pentru a crea o experiență interactivă și captivantă.
 +
 +Consider că acest proiect m-a ajutat să vizualizez mai bine ce anume vreau să fac pe viitor.
 +
 +Per total, proiectul este unul mai mult bazat pe software, dar care a avut și dificultăți hardware pentru a obține rezultatele corecte.
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Descărcare ​arhivă: 
-arhivă ​(sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+{{:​pm:​prj2024:​sseverin:​andra-ioana_stoica_332ca.zip|}}
  
-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**. +===== Bibliografie/Resurse ===== 
-</note>+==== Software Related ====
  
-===== Jurnal =====+1. [[https://​stackoverflow.com/​questions/​15984707/​when-i-use-lcd-setcursor0-3-with-a-20x4-i2c-lcd-it-prints-to-line-2-is-this-a|Stack Overflow]]
  
-<note tip> +2[[https://​forum.arduino.cc/​t/​lcd-i2c-display-questions/​915523/​4|LCD I2C Display Questions - Arduino Forum]]
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</note>+
  
-===== Bibliografie/Resurse =====+3. [[https://​forum.arduino.cc/​t/​bi-color-led-red-green-and-yellow-green/​412556/​3|Bi-color LED (red/green and yellow/​green) - Arduino Forum]]
  
-<​note>​ +4. [[https://​projecthub.arduino.cc/​semsemharaz/​interfacing-rgb-led-with-arduino-b59902|Interfacing RGB LED with Arduino - Project Hub]] 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse ​Hardware**+ 
-</note>+5. [[https://​forum.arduino.cc/​t/​piezo-buzzer-win-and-fail-sound/​133792/​5|Piezo Buzzer Win and Fail Sound - Arduino Forum]] 
 + 
 +6. [[https://​forum.arduino.cc/​t/​testing-joystick/​469429|Testing Joystick - Arduino Forum]] 
 + 
 +7. [[https://​www.circuitbasics.com/​how-to-use-active-and-passive-buzzers-on-the-arduino/​|How to Use Active and Passive Buzzers on the Arduino - Circuit Basics]] 
 + 
 +8. [[https://​exploreembedded.com/​wiki/​Analog_JoyStick_with_Arduino|Analog Joystick with Arduino - Explore Embedded]] 
 + 
 +9. [[https://​lastminuteengineers.com/​i2c-lcd-arduino-tutorial/?​utm_content=cmp-true|I2C LCD with Arduino Tutorial - Last Minute Engineers]] 
 + 
 +10. [[https://​www.geeksforgeeks.org/​cpp-implementation-minesweeper-game/​|C++ Implementation of Minesweeper Game - GeeksforGeeks]] 
 + 
 +==== Hardware ​Related ==== 
 + 
 +1[[https://​www.optimusdigital.ro/​ro/​index.php?​controller=attachment&​id_attachment=29|I2C Controller - Optimus Digital]] 
 + 
 +2. [[https://​www.optimusdigital.ro/​ro/​index.php?​controller=attachment&​id_attachment=31|LCD Display - Optimus Digital]] 
 + 
 +3. [[https://​www.optimusdigital.ro/​ro/​index.php?​controller=attachment&​id_attachment=143|Placa de Dezvoltare - Optimus Digital]] 
 + 
 +4. [[https://​www.optimusdigital.ro/​ro/​senzori-senzori-de-atingere/​742-modul-joystick-ps2-biaxial-negru-cu-5-pini.html?​search_query=joystick&​results=42|Joystick - Optimus Digital]]
  
 <​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>​
  
pm/prj2024/sseverin/andra_ioana.stoica.1714311675.txt.gz · Last modified: 2024/04/28 16:41 by andra_ioana.stoica
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