Miruna-Daciana COJOCARU (78668) - Minesweeper

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul constă în implementarea jocului de strategie single-player Minesweeper cu afișare pe LCD și control din butoane.

Scopul jocului este reprezentat de golirea căsuțelor prezente pe ecran prin apăsarea succesiva a câte unei casuțe. Fiecare căsuță poate conține o bombă sau poate fi liberă. În cazul selectării unei bombe, jocul se sfârșește iar buzzer-ul va reda un sunet specific. Nivelul se termină cu succes la selectarea tuturor căsuțelor fără a fi selectat vreo bombă, iar buzzerul va reda un sunet specific pentru victorie.

Jocul este pe mai multe nivele, complexitatea fiecărui nivel superior fiind dată de creșterea numărului de bombe.

Am ales să implementez acest joc deoarece este unul cu un puternic impact asupra perioadei copilăriei mele. În vremurile de atunci, utilizatorii nu erau obișnuiți cu interfața grafică si mouse-ul iar jocul a fost gândit să îi învețe pe utilizatori să fie preciși și rapizi atunci când foloseau butoanele principale ale mouse-ului.

Descriere generală

Jucătorul va avea la dispoziție 6 butoane de control: 4 butoane pentru deplasare (sus, jos, stânga, dreapta), un buton pentru selectare și un buton pentru marcarea căsuței cu flag. Flag-ul este utilizat pentru a marca o căsuță în care intuim că exisă bombă. Afișarea se va realiza prin intermediul LCD-ului.

Hardware Design

Listă de piese:

  • PCB
  • componente de bază pentru plăcuță
  • LCD SPI 2.8'' 240×320
  • butoane
  • joystick
  • buzzer

Schema electrica:

Software Design

Ca mediu de dezvoltare am utilizat WinAVR si ca IDE Microsoft Visual Studio. Am utilizat o biblioteca gata implementata cu mici modificari pentru a putea interactiona cu LCD-ul. Am pornit de la cod din laboratoare pentru a reda sunete pe buzzer.
Am utilizat o structura pentru a retine informatiile utile fiecarei celule. Pentru fiecare celula sunt retinute urmatoarele informatii: numarul de bombe adiacente, ce e initializat cu -1, culoarea fundalului celulei, ce e initializata cu alb, coordonatele x si y ale coltului stanga sus corespunzator pentru afisarea casutei pe ecranul LCD-ului si o variabila ce retine daca celula contine bomba, variabila ce e initializata cu 0. Astfel retinem casutele de pe ecran intr-o matrice de celule sub forma structurii de mai sus.
Pentru generarea aleatoare a bombelor am generat utilizand functia random, pozitii x si y si am verificat de fiecare data ca in casuta respectiva sa nu existe bomba.
Jocul are 5 nivele, complexitatea fiind data din cresterea numarului de bombe cu 2 intre doua nivele consecutive. Daca jucatorul pierde un nivel intermediar, jocul se reia de la primul nivel.
Jucatorul finalizeaza un nivel prin apasarea tuturor casutelor inafara de cele ce contin bombe. In cazul trecerii la urmatorul nivel, se afiseaza un mesaj corespunzator, se reda un sunet pe buzzer si se incrementeaza numarul de bombe cu 2. In cazul apasarii pe o bomba, jocul se ia de la inceput, cu numarul minim de bombe si buzzerul reda un sunet iar pe ecran se va afisa un mesaj corespunzator si locatiile unde exista bombe.

Rezultate Obţinute

Poze cu proiectul finalizat:

Jocul in desfasurare:

Joc pierdut:

Concluzii

Proiectul a fost o experienta placuta, interesanta si utila. Am consolidat multe cunostinte pe parcursul implementarii. Am invatat sa conectez si sa interactionez cu un LCD grafic dar si cu un joystick.

Download

Arhiva cod : cojocaru_miruna.zip

Jurnal

  • 20 aprilie 2018: Alegerea temei proiectului, aprobată de asistent.
  • 21 aprilie 2018: Milestone1 - temă proiect, descriere, schemă bloc, listă de piese
  • 23 aprilie - 29 aprilie 2018: lipire piese pe placa de baza
  • 4 mai 2018: Milestone2 - finalizare placa de baza
  • 5 mai 2018: Milestone3 - adaugare schema electrica
  • 7 mai - 13 mai 2018 - am trecut placa la 3.3V si am conectat LCD-ul
  • 14 mai - 20 mai 2018 - am conectat joystick-ul si buzzerul si am inceput implementarea software
  • 21 mai - 22 mai 2018 - finalizare implementare software
  • 23 mai 2018: Milestone4 - documentatie completa

Bibliografie/Resurse

  • Documentația în format PDF
pm/prj2018/cbirsan/minesweeper.txt · Last modified: 2021/04/14 17:07 (external edit)
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