Differences

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

Link to this comparison view

pm:prj2021:avaduva:minesweeper [2021/04/25 00:43]
ana_maria.radu0306 created
pm:prj2021:avaduva:minesweeper [2021/05/26 15:40] (current)
ana_maria.radu0306
Line 1: Line 1:
 =====Minesweeper===== =====Minesweeper=====
-==Autor: Ana-Maria Radu==+====Autor: Ana-Maria Radu====
  
 ===Introducere=== ===Introducere===
-Proiectul ​va implementa jocul Minesweeper pe o matrice de LED-uri. Initial, toate LED-urile sunt stinse, in afara de unul alb care indica pozitia curenta ​a jucatorului. Jucatorul ​se poate muta in cele 4 directii folosind butoane, ​si poate selecta un anumit LED pentru inspectare. Daca LED-ul se aprinde verdeinseamna ca nu exista ​o bomba pe acea pozitieinsa poate declansa aprinderea cu galben a LED-urilor din jurul sau daca ele sunt posibile bombe (daca se afla la mai putin de 2 pozitii ​de o bomba)Daca jucatorul selecteaza o casuta pe care se afla bomba, LED-ul respectiv va lumina ​rosu.+Proiectul ​implementeaza o varianta minimalista a Minesweeper pe o matrice ​de LED-uri. Scopul sau este de a oferi o interfata intuitiva si usor de folosit pentru utilizator, pentru a face jocul una dintre acele activitati "​no-brainer"​ pe care le poti face oricand, chiar si in timpul cursurilor^_^.\\ 
 +==Reguli si desfasurarea jocului== 
 +Jucatorul are la dispozitie 5 butoane (select + 4 directii de deplasare) pe care le foloseste pentru a interactiona cu matricea ​de LED-uri. Initial, toate LED-urile sunt stinse, in afara unui cursor ​care lumineaza alb pentru a indica pozitia curenta.\\ 
 +Jucatorul muta cursorul pana la pozitia dorita ​si apoi apasa butonul Selectcare va "​descoperi"​ pozitia, adica va lumina: 
 +  * Rosu, daca jucatorul a descoperit ​o bomba 
 +  * Galben, daca jucatorul ​se afla la distanta 1 de o bomba (distanta se calculeaza inclusiv pe diagonala) 
 +  * Verde, daca jucatorul a descoperit o casuta "​safe"​ 
 +Daca jucatorul selecteaza o bomba, jocul se considera pierdut, se afiseaza ​animatie de final si mesajul "You lost! Try again?"​urmat de un meniu in care are posibilitatea de a alege sa continue sau nu (meniul consta in doua LED-uri aprinse pe matrice, unul rosu si unul verde, semnificand cele doua decizii posibile; jucatorul poate selecta unul dintre ele folosind cursorul).\\ 
 +\\ 
 +Daca jucatorul a descoperit toate pozitiile in afara de bombe, jocul se considera castigat, se afiseaza o animatie de victorie si mesajul "You won! Try again?",​ urmat, din nou, de meniul cu cele doua decizii posibile.\\ 
 +\\ 
 +Daca se alege continuarea jocului, totul se reseteaza si utilizatorul poate incepe o runda noua. Daca, in schimb, se alege terminarea lui, se afiseaza mesajul "​Goodbye!"​ si se sting toate LED-urile, mimand inchiderea dispozitivului. 
 +==Inspiratie si utilitate== 
 +Am pornit de la implementarea clasica a jocului, insa am ales sa folosesc coduri de culori in loc de cifre pentru a indica proximitatea fata de o bomba. Cred ca acest proiect este util pentru ca poate fi folosit in viata reala ca un joc minimalist, iar pentru mine a fost folositor din perspectiva procesului de invatare prin care am trecut pe tot parcursul realizarii lui.\\
  
-{{:​pm:​prj2021:​avaduva:​schema_bloc_minesweeper.png?​nolink&​700|}}+===Descriere generala=== 
 +Mai jos este schema bloc a proiectului:​\\ 
 +{{ :​pm:​prj2021:​avaduva:​schema_bloc_minesweeper.png?​nolink&​700 |}}
  
 ===Hardware Design=== ===Hardware Design===
-  * Arduino UNO +{{:​pm:​prj2021:​avaduva:​schema_electrica_minesweeper.png?​nolink&​700|}} 
-  ​* ​Matrice 8x8 de LED-uri + 
-  ​* ​BreadBoard +Schema electrica poate fi vizualizata si [[https://​www.tinkercad.com/​things/​cJ1YH9AxvQu-frantic-snicket/​editel?​sharecode=IntEsWyf4N1idzXSIe-R5bWpcdam0W34bQAlzT7aSbc|aici]],​ folosind Tinkercad. 
-  ​* ​Butoane + 
-  * Buzzer +Componentele folosite sunt: 
-  * Rezistente +^ Componenta ​     ^ Cantitate ​      ^ Alimentare ​         ^ 
-  * Fire de legatura+| [[https://​www.optimusdigital.ro/​ro/​placi-avr/​656-uno-r3-atmega328p-atmega16u2-placa-de-dezvoltare-compatibila-cu-arduino-cablu-30-cm.html?​search_query=Placa+de+Dezvoltare+Compatibila+cu+Arduino+UNO+R3+%28ATmega328p+++ATmega16u2%29+++Cablu+30+cm&​results=2|Arduino UNO]]   ​|1|5V| 
 +| [[https://​www.optimusdigital.ro/​ro/​optoelectronice-matrice-de-led-uri/​4392-matrice-cu-led-uri-rgb-ws2812-8x8.html?​search_query=Matrice+cu+LED-uri+RGB+WS2812+%288x8%29&​results=2|Matrice 8x8 de LED-uri]]|1|5V| 
 +|[[https://​ardushop.ro/​ro/​electronica/​33-breadboard-830.html?​search_query=breadboard&​results=15|BreadBoard]]|1| | 
 +|[[https://​www.optimusdigital.ro/​ro/​butoane-i-comutatoare/​1119-buton-6x6x6.html?​search_query=butoane&​results=198|Butoane]]|5| | 
 +|Fire de legatura ​tata-tata|16| |
  
 ===Software Design=== ===Software Design===
 +Jocul a fost dezvoltat in Arduino Editor Online, folosind biblioteca
 +  * [[https://​github.com/​adafruit/​Adafruit_NeoMatrix|Adafruit_NeoMatrix.h]]
 +Pentru logica jocului se folosesc doua matrici, una de tip Adafruit_NeoMatrix care controleaza starea LED-urilor, iar alta interna de 8x8 intregi, care retine pozitia bombelor (pozitiile sunt generate folosind functia rand()).
 +
 +La inceput, se initializeaza matricile si alte variabile globale si se seteaza cursorul pe pozitia (0, 0). La fiecare Select, se verifica starea jocului (daca este peirdut, castigat sau se continua).
 +
 +Logica programului este urmatoarea:​\\
 +{{ :​pm:​prj2021:​avaduva:​schema_software_minesweeper.png?​nolink&​800 |}}
 +\\
 +Implementare software: {{:​pm:​prj2021:​avaduva:​minesweeper.txt|}}
  
 ===Rezultate=== ===Rezultate===
 +[[https://​youtu.be/​m28fmnfQop4|Link catre YouTube Demo]]
 +
 +Jocul este fully functional, logica functioneaza asa cum s-ar astepta un utilizator normal.
  
 ===Concluzii=== ===Concluzii===
 +Proiectul a fost o experienta foarte placuta. Pentru mine, a fost primul proiect in care am folosit si hardware astfel, deci mi-a placut sa invat sa lucrez practic. Cateva mici imbunatatiri pot fi aduse in urma utilizarii mai indelungate,​ de exemplu legat de sensibilitatea butoanelor, insa in final cred ca experienta mi-a depasit asteptarile.
  
 ===Download=== ===Download===
 +{{:​pm:​prj2021:​avaduva:​minesweeper_anamariaradu_334ca.zip|}}\\
 +<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
 ===Jurnal=== ===Jurnal===
 +22.04.2021 - Comandarea primului set de piese (Arduino, butoane, fire)\\
 +26.04.2021 - Comandarea celui de-al doilea set de piese (matrice de LED-uri, butoane aditionale)\\
 +27.04.2021 - Comandarea pieselor finale (breadboard)\\
 +03.05.2021 - Testarea pieselor individual\\
 +05.05.2021 - Familiarizarea cu bibliotecile necesare implementarii software a proiectului;​ testarea diferitelor comenzi pe matricea de LED-uri\\
 +07.05.2021 - Implementarea completa a cursorului pe matricea de LED-uri (miscare, select, coduri de culoare)\\
 +15.05.2021 - Implementarea logicii matricii de bombe (randomizarea bombelor, win/lose action, try again)\\
 +25.05.2021 - Retusuri finale; completare documentatie\\
  
 ===Bibliografie/​Resurse=== ===Bibliografie/​Resurse===
 +1. [[https://​pdf1.alldatasheet.com/​datasheet-pdf/​view/​422610/​ATMEL/​ATMEGA328P.html|ATMEGA328P Datasheet]]\\
 +2. [[https://​github.com/​adafruit/​Adafruit_NeoMatrix|Adafruit NeoMatrix GitHub Repository]]\\
 +3. [[https://​learn.adafruit.com/​adafruit-neopixel-uberguide/​neomatrix-library|Adafruit NeoMatrix Tutorial]]\\
pm/prj2021/avaduva/minesweeper.1619300639.txt.gz · Last modified: 2021/04/25 00:43 by ana_maria.radu0306
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