Minesweeper

Student Ion Luminita-Andreea, 335 CC.

Adresa de e-mail contact: luminita.ion@stud.acs.pub.ro.

Introducere

Ce face proiectul?

Proiectul consta in implementarea unei variante a jocului Minesweeper ceva mai complexa decat jocul obisnuit. Regulile si logica jocului sunt aceleasi, difera modul de interactiune cu utilizatorul.

Scopul proiectului

Proiectul are ca scop aplicarea celor invatate la laboratoarele de PM pentru pentru a obtine un joc relaxant si placut.

Ideea de la care s-a pornit

Recent am invatat sa joc acest joc, care pentru mine la prima vedere era dificil. Totusi, invatand logica lui si fiind atenta la ce se intampla, am realizat ca este un joc placut care te face sa te concentrezi intru-totul la el si iti testeaza si memoria.

Utilitatea proiectului

Jocul este cu adevarat folositor atunci cand dorim sa ne detasam pentru o perioada de stresul facultatii si sa ne concentram mintea pe altceva. Acest lucru este cu adevarat folositor, mai ales ca atunci cand revenim la temele noastre, vom vedea totul cu alta perspectiva si ne vom concentra mai bine.

Descriere generala

Descrierea functionalitatii

Tot jocul se va desfasura pe o matrice de leduri in care initial sunt toate ledurile stinse. Conform jocului, se poate alege orice led care sa fie aprins, astfel printre ele miscarea se va face cu un joystick pana cand ajungem la ledul care se va dori aprins. Totusi nu toate ledurile sunt leduri “bune”, unele pot ascunde bombe, iar aceasta vor fi marcate ca si un led de culoare rosie. Ledurile “bune” nu ascund bombe, deci ele vor fi leduri verzi. In joc, de obicei, trebuie sa apasam pe o casuta ca sa vedem daca ledul e bun sau nu. In jocul creat de mine, apasarea pe o “casuta” se va face cu ajutorul unui ultrasonic peste care vom trece cu mana. La finalul jocului, in functie de rezultatul jocului, daca castigam, adica daca nu nimerim niciun led rosu, sau daca pierdem, adica aprindem un led rosu, se va auzi o melodie diferita.

Diagrama bloc

Hardware design

Schema electrica

Lista de piese

  1. matrice de leduri;
  2. placa Arduino Uno;
  3. joystick;
  4. buzzer;
  5. ultrasonic;
  6. cabluri mama-tata;
  7. breadboard;

Software Design

Descrierea codului aplicatiei

  1. mediu de dezvoltare: Arduino IDE
  2. biblioteci şi surse 3rd-party:
    1. pentru matricea de led-uri
      • Adafruit_NeoPixel.h
      • FastLED.h
      • FastLED_NeoMatrix.h

Algoritmul ar trebui sa mapeze toata matricea si fiecare led va fi setat ca fiind ori rosu ori verde. Celula va avea 2 stari: inchisa sau deschisa, adica ledul care reprezinta o celula va avea 2 stari, stins sau aprins. Cu ajutorul joystick-ului ne vom deplasa prin matricea de leduri si in momentul in care vom alege celula pe care vrem sa o aprindem, atunci vom trece mana pe deasupra ultrasonicului si ledul respectiv se va aprinde. De aici pornesc doua scenarii:

  1. ledul aprins este rosu, asta inseamna ca aici se va incheia jocul se va auzi o anumita nota prin buzzer
  2. ledul aprins este verde, ceea ce inseamna ca vom continua jocul

Pentru a castiga jocul, trebuie ca toate ledurile verzi sa fie aprinse si la final se va auzi o alta nota prin buzzer. Proiectul este o varianta a jocului Minesweeper propusa de mine.

Functii utilizate

  • setup :
    • initializam matricea de leduri
    • configurarea melodiilor pentru buzzer
    • initializarea altor pini
  • loop :
    • dam play la joc
  • readUltrasonicDistance :
    • functia de citire a unei prezente in preajma ultrasonicului
  • initialiseBoard :
    • initializam tabla
  • placeMines
    • plasam bombele
  • isGreen :
    • verificam daca ledul aprins este verde
  • isBomb :
    • verificam daca ledul aprins este rosu
  • gameOver :
    • daca am aprins un led rosu, jocul s-a terminat si am pierdut
  • victory :
    • daca am aprins toate ledurile verzi, jocul s-a terminat si am castigat
  • printBoard:
    • aprindem tabla in stadiul curent in functie de ce leduri au fost aprinse pana in momentul de fata
  • play :
    • aici initializam tabla si in functie de stadiul actual al jocului se vor intampla anumite lucruri
    • daca am pierdut, atunci vom reda o anumita nota, mai grava, la buzzer
    • daca putem continua, atunci folosind joystick-ul ne vom deplasa intre leduri si ne vom opri la acel led pe care dorim sa il aprindem si il vom aprinde cu ajutorul ultrasonic-ului
    • tabla se va printa actualizata dupa fiecare led aprins

Testele initiale

Initial, totul era functional si matricea se aprindea, am testat-o si in alte moduri dupa cum se vede si in clipul atasat. https://drive.google.com/file/d/13KMrYSONsr68mAoAs_juhofAjjK4yFTx/view?usp=sharing

Rezultate obtinute

Codul de pana in prezent este scris astfel incat sa putem sa initializam tabla, sa plasam bombele si sa ne miscam printre leduri. Bombele sunt marcate ca fiind leduri rosii si atunci cand se aprindea un led rosu jocul se pierdea. Initial am gandit jocul ca atunci cand toate ledurile verzi sunt aprinse, jocul sa se termine si sa fie castigat, pe parcurs urma a fi ajustat si sa ajunga la o forma finala mai draguta si probabil mai usor de jucat. Rezultatele obtinute din pacate nu au fost cele dorite, din cauza unui accident (am dat peste un pahar cu apa care a cazut pe placa si cand am vrut sa il ridic, am lovit din greseala placa si a cazut si rezultatele se vad in poza) in urma caruia a fost distrusa placa Arduino si a fost prea tarziu sa procur una noua.

Arhiva Codului

Specific ca nu este inca testat pentru ca nu am avut pe ce sa il testez https://drive.google.com/file/d/10JRL3Wq7uZrXtJnvncsL-fS06Nbo33dW/view?usp=sharing

Bibliografie/Resurse

pm/prj2021/dbrigalda/minesweeper.txt · Last modified: 2021/06/04 11:10 by luminita.ion
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