Alexandru-Sorin MAXIM (78744) - Memory Game

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Propunerea mea a fost implementarea unui joc numit “Memory Game” care presupune antrenarea memoriei jucatorului. Pentru a invinge, utilizatorul trebuie sa retina locurile unde se afla formele dezvaluite in actiunile trecute.

Regulile jocului:

  • jucatorul trebuie sa dezvaluie toate perechile din matricea de perechi
  • jucatorul pierde daca nu reuseste intr-un numar de dezvaluiri sa termine matricea
  • numarul de dezvaluiri depinde de nivelul la care se afla jucatorul
  • pentru a castiga jocul, jucatorul trebuie sa rezolve toate cele 3 niveluri
  • jucatorul va alege pe rand cate o forma, iar apoi va incerca sa ii gaseasca perechea identica care se afla pe alta pozitie.

Descriere generală

  • Jucatorul controleaza prin cele 5 butoane ce pozitie din matrice selecteaza pentru a fi dezvaluita.
  • Pe LCD este afisat jocul + statistici: numarul de dezvaluiri pe nivel, timpul la fiecare nivel.
  • Buzzer pentru sunet pe fundal.

Hardware Design

  • 5 butoane: 4 directii si 1 pentru selectie
  • componentele de baza
  • buzzer pentru sunet
  • LCD SPI de 2.8” cu Touchscreen - Controller ILI9341 și XPT2046 (240×320 px)
  • placa de baza
  • LM1086 pentru ca VCC-ul LCD-ul sa aiba 3.3V
  • Convertor de Niveluri Logice Bidirecțional pe 8 Biți TXS0108E
  • Fire mama-mama
  • Placa de cablaj simpla
  • Rotring pentru desenarea cablajului
  • Clorura ferica pentru corodara placutei de cablaj

Schema electrica

Software Design

Am gasit o biblioteca pe internet pentru LCD-ul meu si am folosit-o pentru a dezvolta jocul. Am folosit o matrice de simboluri care este aleasa aleator dintr-un pool de posibilitati.

Jocul contine 3 nivele, unul usor, celelalte mai dificile.

La inceput, in meniu este difuzat o partea din melodia star wars cu dupa jucatorul sa poata alege ce nivel doreste sa rezolve.

Pentru fiecare nivel este afisat un cronometru care numara cate o secunda, am folosit timer-ul atmega-ului si laboratorul 2.

Pentru fiecare nivel mai este afisat si cate perechi mai sunt de gasit pentru a incheia nivelul, acesta impreuna cu miscarea pe pozitiile simbolurilor au fost implementate folosind intreruperi pentru portul A al placutei, la care am legat cele 5 butoane.

Dupa fiecare nivel incheiat cu succes, jucatorul are posibilitatea de a rezolva urmatorul nivel sau sa intre in Hall Of Fame unde sunt afisate scorurile tuturor jucatorilor la o rulare a programului. De asemenea, cand jucatorul intra in Hall Of Fame, run-ul lui s-a terminat si ii este calculat un scor care este afisat, fiecare jucatorul avand un ID unic. Dupa ce jucatorul a rezolvat al 3-lea nivel, programul intra automat in Hall of Fame. Daca jucatorul se afla in Hall Of Fame, alt jucator poate incepe un run nou folosind butonul din mijloc al tastaturii. In timpul unui nivel, in momentul in care jucatorul gaseste o pereche o sa se auda un sunet din buzzer-ul conectat la PD5.

Implementare:

  • am folosit diferite variabile care modifica coordonatele la care se afla cursorul jucatorului
  • am folosit variabile declarate cu volatile pentru a putea fi modificate si in ISR-ul pentru intreruperi
  • la inceputul jocului se apeleaza functia PLAYNOTE pentru a reda sunetul Star Wars.
  • am folosit intreruperile pentru ca jucatorul sa se poata misca in timpul unui nivel
  • am folosit un delay pentru ca jucatorul sa poata sa vada ambele simboluri pe care le-a ales.
  • fiecare pereche nou descoperita genereaza un mic sunet din buzzer si decrementeaza contorul care afiseaza cate perechi mai sunt de descoperit folosind intreruperi
  • am configurat un timer ce este incrementat ce numar timpul pretrecut de jucator intr-un nivel.

Rezultate Obţinute

Rezultatul este o aplicatie utila pentru exersarea memoriei jucatorului dar poate sa fie si competitiva din cauza punctajului din Hall of Fame.

Aplicatia e perfecta pentru persoanele care vor sa se relaxeze putin si sa-si antreneze neuronii in acelasi timp. =)

De asemenea aplicatia este portabila si usor de tinut in mana si usor de utilizat.

obp6Co2tRMk

Concluzii

Mi s-a parut destul de dificil sa conectez toate componentele la inceput ca sa aprind lcd-ul. Nestiind de ce componente aveam nevoie a trebuit sa fac mai multe drumuri in diferite locatii. Ma bucur ca nu am ars nimic!

Jocul are o logica simpla, cea mai dificila parte din program a fost sa inteleg cu adevarat cum functioneaza intreruperile si timer-ul pentru a le folosi in joc. A fost dificil sa gasesc un mod de randomizare bun, pana la urma am gasit pe internet folosind functii din diferite biblioteci.

Cea mai dificila partea a fost sa realizez un cablaj pentru ca proiectul sa arate mai bine (nu am mai lucrat cu asa ceva pana acum).

Consider ca am invatat destul de multe din acest proiect atat hardware, software si modul aranjare a pieselor fiind pentru mine un succes.

Download

Jurnal

  • 19 Aprilie 2018 - Alegerea proiectului
  • 22 Aprilie 2018 - Descrierea proiectului
  • 10 Mai 2018 - Am cumparat piesele necesare pentru a conecta LCD-ul
  • 12 Mai 2018 - Am cumparat un tranzistor care face 5 V in 3.3 V pentru alimentarea LCD
  • 19 Mai 2018 - Am reusit sa alimentez corect LCD-ul, rezultatul fiind un ecran alb
  • 19 Mai 2018 - Am reusit sa afisez ceva pe LCD folosind o biblioteca gasita pe internet
  • 20 Mai 2018 - Am inceput sa scriu programul pentru joc
  • 22 Mai 2018 - Am adaugat noi functionalitati ca Hall Of Fame si niveluri multiple
  • 22 Mai 2018 - Am cumparat o bucata de cablaj simplu pentru a aranja circuitul pe care am taiat-o pentru dimensiunea necesara
  • 22 Mai 2018 - Am trasat cablajul cu un rotring special
  • 22 Mai 2018 - Am corodat in clorura ferica ca sa elimin partea de cupru nedorita
  • 22 Mai 2018 - Am degresat placa si am dat gauri necesare pentru circuitul meu
  • 23 Mai 2018 - Asamblarea finala a hardware-ului.

Bibliografie/Resurse

Resurse Software

Generarea de numere random: how-do-you-seed-srand

Melodie Star Wars: https://gist.github.com/nicksort/4736535

Biblioteca pentru IL9341: ili9341-library-drive-22-tft-displayderived-adafruit-tft-library-ili9340-type-controller

Laboratoare PM: lab2

Functia PLAYNOTE: pizo%20speaker.html

Resurse Hardware

3544-modul-lcd-spi-de-28-cu-touchscreen-controller-ili9341-i-xpt2046-240x320-px.html

lm1086.pdf

Cablaj : watch

watch

  • Documentația în format PDF
pm/prj2018/rbarbascu/75367356.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