This shows you the differences between two versions of the page.
pm:prj2021:avaduva:minesweeper [2021/05/26 09:28] ana_maria.radu0306 |
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 verde, inseamna ca nu exista o bomba pe acea pozitie, insa 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 o 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 Select, care 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 o 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&900|}} | + | ===Descriere generala=== |
+ | Mai jos este schema bloc a proiectului:\\ | ||
+ | {{ :pm:prj2021:avaduva:schema_bloc_minesweeper.png?nolink&700 |}} | ||
===Hardware Design=== | ===Hardware Design=== | ||
Line 21: | Line 36: | ||
===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=== | ||
Line 39: | Line 70: | ||
===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]]\\ |