Differences

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

Link to this comparison view

pm:prj2023:vstoica:minesweeper [2023/05/28 18:40]
andrei.anghel1111 [Rezultate Obţinute]
pm:prj2023:vstoica:minesweeper [2023/05/28 18:58] (current)
andrei.anghel1111 [Download]
Line 3: Line 3:
 ===== Introducere ===== ===== Introducere =====
  
-Ideea mea initiala a fost aceea de a implementa faimosul joc 'Minesweeper' ​pe un ecran LCD de dimensiune 128x64. In timpul realizarii montajului pieselor, am realizat potentialul proiectului si am modificat anumite componente hardware pentru a obtine o consola de jocuri portabila personalizata.+Ideea mea initiala a fost aceea de a implementa faimosul joc **Minesweeper** pe un ecran **LCD** de dimensiune 128x64. In timpul realizarii montajului pieselor, am realizat potentialul proiectului si am modificat anumite componente hardware pentru a obtine o **consola de jocuri portabila personalizata.**
  
 Consola prezinta un ecran LCD, buzzer si controller cu 4 butoane pentru directii si 2 butoane de selectie. Consola prezinta un ecran LCD, buzzer si controller cu 4 butoane pentru directii si 2 butoane de selectie.
  
-Practic consola poate rula orice joc implementabil pe un ecran LCD de dimensiuni mici, dar in cazul proiectului meu am implementat ​jocul 'Minesweeper'. Astfel, cele 4 butoane pentru directii sunt folosite pentru a deplasa cursorul pe ecran, iar butoanele de selectie au functiile REVEAL - afiseaza continutul unui camp ascuns si FLAG - pune un steag pe campul curent.+Practic consola poate rula orice joc implementabil pe un ecran LCD de dimensiuni mici, dar in cazul proiectului meu am implementat ​un joc **Minesweeper ​de dimensiune 4x8**. Astfel, cele 4 butoane pentru directii sunt folosite pentru a deplasa cursorul pe ecran, iar butoanele de selectie au functiile REVEAL - afiseaza continutul unui camp ascuns si FLAG - pune un steag pe campul curent.
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 22: Line 22:
 </​note>​ </​note>​
  
-Una dintre functionalitatile consolei pe care am introdus-o este afisarea **procentului de incarcare curent al bateriei.** Pentru masurarea tensiunii bateriei am utilizat pinul analogic A0 al placutei. Am redus tensiunea de 9V la o tensiune de sub 5V folosind un **divizor de tensiune**, iar estimand rata de descarcare a bateriei am putut aproxima nivelul de incarcare al bateriei.+Una dintre functionalitatile consolei pe care am introdus-o este afisarea **procentului de incarcare curent al bateriei.** Pentru masurarea tensiunii bateriei am utilizat pinul analogic ​**A0** al placutei. Am redus tensiunea de 9V la o tensiune de sub 5V folosind un **divizor de tensiune**, iar estimand rata de descarcare a bateriei am putut aproxima nivelul de incarcare al bateriei.
  
 Mai jos se poate observa schema electrica pe care am urmat-o in realizarea proiectului. Mai jos se poate observa schema electrica pe care am urmat-o in realizarea proiectului.
Line 35: Line 35:
  
 Functionarea consolei poate fi redusa la urmatoarele stari: Functionarea consolei poate fi redusa la urmatoarele stari:
-  * MENU +  ​* **MENU** 
-  * PLAYING +  ​* **PLAYING** 
-  * WON +  ​* **WON** 
-  * LOST+  ​* **LOST**
  
  
 {{:​pm:​prj2023:​vstoica:​diagramastari.jpg?​700|}} {{:​pm:​prj2023:​vstoica:​diagramastari.jpg?​700|}}
  
-Starea initiala este cea de MENU, in care este afisat nivelul ​de baterie al consolei si in care se poate alege dificultatea jocului. Odata ales nivelul de dificultate,​ se trece in starea de PLAYING. Cheia implementarii sunt matricile **boardState** - retine informatii despre stadiul curent al tablei de joc si **bombs** - retine pozitiile bombelor.+Starea initiala este cea de **MENU**, in care este afisat nivelul ​bateriei ​consolei si in care se poate alege dificultatea jocului. Odata ales nivelul de dificultate,​ se trece in starea de **PLAYING**. Cheia implementarii sunt matricile **boardState** - retine informatii despre stadiul curent al tablei de joc si **bombs** - retine pozitiile bombelor.
  
 ''​int boardState[ROWS][COLUMNS];''​ 0-8 = number of adjacent bombs, 10 = not revealed, 11 = bomb, 12 = flag ''​int boardState[ROWS][COLUMNS];''​ 0-8 = number of adjacent bombs, 10 = not revealed, 11 = bomb, 12 = flag
Line 49: Line 49:
 ''​int bombs[ROWS][COLUMNS] = {0};''​ 0 = no bomb, 1 = bomb ''​int bombs[ROWS][COLUMNS] = {0};''​ 0 = no bomb, 1 = bomb
  
-Matricea de stari este reprezentata in mod continuu pe ecranul LCD, iar orice modificare in starile acesteia este vizibila pe ecran. Odata ce se indeplineste conditia de victorie sau conditia de pierdere a jocului, se trece in una din starile WON sau LOST, din care se poate reveni in starea MENU prin apasarea butonului RESET de pe placuta. Am implementat diverse functii cu nume sugestive pentru implementarea logicii:+Matricea de stari este reprezentata in mod continuu pe ecranul ​**LCD**, iar orice modificare in starile acesteia este vizibila pe ecran. Odata ce se indeplineste conditia de victorie sau conditia de pierdere a jocului, se trece in una din starile ​**WON** sau **LOST**, din care se poate reveni in starea ​**MENU** prin apasarea butonului ​**RESET** de pe placuta. Am implementat diverse functii cu nume sugestive pentru implementarea logicii:
 <code c> <code c>
 // Randomly generates boms. // Randomly generates boms.
Line 135: Line 135:
 </​note>​ </​note>​
  
-**Buzzer-ul** este configurat prin intermediul registrului timer oferit de ATmega328pb si este configurat pentru a emite sunete la interval de o secunda.+**Buzzer-ul** este configurat prin intermediul registrului timer oferit de **ATmega328pb** si este configurat pentru a emite sunete la interval de o secunda.
 <code c> <code c>
 // Setting up the timer register for the buzzer // Setting up the timer register for the buzzer
Line 160: Line 160:
 // Calculated using aproximate battery discharge rate // Calculated using aproximate battery discharge rate
 float batteryPercentage = 25 * batteryVoltage - 125; float batteryPercentage = 25 * batteryVoltage - 125;
 +</​code>​
 +
 +**Butoanele FLAG** si **REVEAL** sunt legate la pinii digitali 2 si 3, iar declasarea acestora este realizata prin intermediul **intreruperilor hardware.**
 +<code c>
 +// Pentru butonul FLAG
 +attachInterrupt(digitalPinToInterrupt(flagButton),​ btnInterruptFlag,​ FALLING);
 +
 +void btnInterruptFlag() {
 +  interruptFlag = true;
 +}
 </​code>​ </​code>​
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 167: Line 177:
 {{:​pm:​prj2023:​vstoica:​minesweeper1.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper1.jpg?​350|}}
 {{:​pm:​prj2023:​vstoica:​minesweeper2.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper2.jpg?​350|}}
 +
 {{:​pm:​prj2023:​vstoica:​minesweeper3.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper3.jpg?​350|}}
 {{:​pm:​prj2023:​vstoica:​minesweeper4.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper4.jpg?​350|}}
Line 174: Line 185:
 {{:​pm:​prj2023:​vstoica:​minesweeper5.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper5.jpg?​350|}}
 {{:​pm:​prj2023:​vstoica:​minesweeper6.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper6.jpg?​350|}}
 +
 {{:​pm:​prj2023:​vstoica:​minesweeper7.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper7.jpg?​350|}}
 {{:​pm:​prj2023:​vstoica:​minesweeper8.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper8.jpg?​350|}}
 +
 {{:​pm:​prj2023:​vstoica:​minesweeper9.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper9.jpg?​350|}}
 {{:​pm:​prj2023:​vstoica:​minesweeper10.jpg?​350|}} {{:​pm:​prj2023:​vstoica:​minesweeper10.jpg?​350|}}
Line 183: Line 196:
 Realizarea acestui proiect a fost o experienta foarte interesanta,​ ce a pornit de la pasiunea mea pentru un joc simplist si foarte popular, anume **Minesweeper**. In timpul dezvoltarii proiectului,​ am venit cu numeroase imbunatatiri si idei suplimentare,​ ajungand in final la un produs ce reprezinta o consola de jocuri portabila, cu feedback video, dar si audio si un controller cu 6 butoane pentru input. Proiectul poate fi oricand extins si imbunatatit,​ implementand numeroase alte joculete pentru consola. Realizarea acestui proiect a fost o experienta foarte interesanta,​ ce a pornit de la pasiunea mea pentru un joc simplist si foarte popular, anume **Minesweeper**. In timpul dezvoltarii proiectului,​ am venit cu numeroase imbunatatiri si idei suplimentare,​ ajungand in final la un produs ce reprezinta o consola de jocuri portabila, cu feedback video, dar si audio si un controller cu 6 butoane pentru input. Proiectul poate fi oricand extins si imbunatatit,​ implementand numeroase alte joculete pentru consola.
 ===== Download ===== ===== Download =====
 +
 +{{:​pm:​prj2023:​vstoica:​src_minesweeper.zip|}}
  
  
pm/prj2023/vstoica/minesweeper.1685288424.txt.gz · Last modified: 2023/05/28 18:40 by andrei.anghel1111
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