Minesweeper

Autor: Ana-Maria Radu

Introducere

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.

Descriere generala

Mai jos este schema bloc a proiectului:

Hardware Design

Schema electrica poate fi vizualizata si aici, folosind Tinkercad.

Componentele folosite sunt:

Componenta Cantitate Alimentare
Arduino UNO 15V
Matrice 8x8 de LED-uri15V
BreadBoard1
Butoane5
Fire de legatura tata-tata16

Software Design

Jocul a fost dezvoltat in Arduino Editor Online, folosind biblioteca

Pentru logica jocului se folosesc doua matrici, una de tip Adafruit_NeoMatrix care controleaza starea LED-urilor, iar alta interna de 8×8 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:

Implementare software: minesweeper.txt

Rezultate

Link catre YouTube Demo

Jocul este fully functional, logica functioneaza asa cum s-ar astepta un utilizator normal.

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

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

pm/prj2021/avaduva/minesweeper.txt · Last modified: 2021/05/26 15:40 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