Table of Contents

Matei CERNĂIANU (67506) - Minesweeper

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Acest proiect are ca scop implementarea jocului Minesweeper pe un LCD, similar cu cel de pe Windows. Implementarea va aduce si cateva imbunatatiri alese de mine in cadrul acestui joc.Jocul va fi pe nivele de dificultate. Aceste nivele de dificultate vor consta in numarul de bombe, plecand de la doua bombe, iar la fiecare nivel incrementam numarul de bombe cu 3. Bombele se ascund pe harta. Pentru a castiga jocul va trebui ca bombele de pe harta sa fie marcate cu un steag. Daca este accesata o casuta cu una dintre bombe, toate bombele vor exploda.

Prezentarea pe scurt a proiectului:

  • Acest joc isi propune explorarea unui teritoriu plin de bombe, asezate aleator, fara a le detona. Presupusele bombe vor trebui marccate corespunzator.
  • Scop: Divertisment
  • Ideea de la care am pornit a fost aceea de a implementa si personaliza un joc clasic.
  • Este util deoarece iti testeaza atentia la detalii.

Descriere generală

Schema bloc:

Hardware Design

Lista piese:

  1. Placa de baza
  2. LCD SPI TFT 1.8
  3. 6 X Butoane

Schema Electrica in EAGLE:

Software Design

In implementarea jocului am folosit o suita de functii, oferite de Adafruit, pentru a putea interactiona cu LCD-ul, functii ce au ajutat la desenarea de tabel, scrierea caractere, generarea, crearea si manipularea tabelei de celule a jocului, cat si manipularea scorului. Am implementat separat functii pentru logica jocului.
La fiecare moment de timp se cunoaste starea fiecarei celule. Starile unei celule sunt specificare in enumeratia CELL_STATE. In functie de ce stare are o celula selectata la un moment de timp, putem decide in ce stare sa o trecem. Toata harta se va stoca sub forma unei matrici de tip CELL_STATE.
La initializarea jocului am cautat toate bombele din vecinatatea fiecarei celule ca sa pot actualiza numarul de bombe vecine din fiecare celula. Se vor deschide automat toate celulele care nu au niciun vecin in imediata apropiere, ceea ce usureaza jocul si duce la lizibilitatea hartii.
La selectarea unei celule se va putea vizualiza ce este in interior, daca este bomba, inseamna ca jocul este pierdut, iar toate celelalte bombe apar pe harta. Daca apare un numar, acela reprezinta numarul de bombe care se afla in vecinatatea celulei.
Pentru a putea castiga nivelul respectiv, jucatorul trebuie sa marcheze toate bombele ca fiind FLAGGED.
In cazul in care jucatorul a castigat, se va trece la nivelul urmator, iar numarul de bombe se va incrementa cu 3. Bombele se incrementeaza cu 3 de fiecare data cand un nivel este castigat.
Daca jucatorul va pierde, nivelul va scadea, iar bombele se vor decrementa. Pentru a reseta harta, jucatorul apasa butonul din stanga sus.

Descrierea codului aplicaţiei (firmware):

Rezultate Obţinute

Cateva poze cu proiectul:

Pad pe post de joystick

Start joc

Desfasurarea jocului

Joc pierdut

Concluzii

In urma realizarii proiectului am avut multe de invatat, de exemplu: cum se interactioneaza cu un LCD color, cum functioneaza efectiv micile desene grafice pe care le-am realizat pe display. Mi s-a parut foarte interesanta ideea de a construi si a programa ceea ce ai construit, desi mi-a dat multe batai de cap partea hardware, cat si partea software pe alocuri.

Download

Arhiva ce contine codul proiectului: matei_cernaianu_minesweeper.zip
Fisierul .hex se afla in directorul Debug.

Jurnal

Milestone 4:

Hardware complet functional

Bibliografie/Resurse

Software: https://www.adafruit.com/
Hardware: http://maxembedded.com/2013/11/the-spi-of-the-avr/