Bucur Adrian-Catalin: MEMORY GAME

Descriere

Proiectul consta in realizarea unui joc de exersare a memoriei, pe mai multe nivele de dificultate.

Pe un LCD text va fi afisata jucatorului o secventa de culori, fiecare culoare fiind asociata unui buton. Jucatorul trebuie sa reproduca din butoane acea secventa. Daca a reusit sa reproduca perfect secventa, trece la nivelul urmator. In momentul in care unul din butoanele apasate este gresit sau timpul expira, jucatorul pierde si buzzerul suna. Culorile apar si dispar pe rand, numarul acestora fiind din ce in ce mai mare in functie de nivelul la care a ajuns jucatorul.

Jucatorul va putea accesa o lista de high-score-uri care este actualizata automat in momentul in care un jucator ajunge in top 5.

Lista de piese

  • ATmega324
  • rezistente, condensatoare, diode pentru placa de baza
  • LCD text 16×2
  • 4 butoane
  • modul buzzer activ
  • fire mama-mama

Schema bloc

Schema electrica

Versiunea initiala:

Versiunea finala:

Software Design

  • Am lucrat pe Ubuntu, folosind bootloader-ul oferit pe elf.cs in linia de comanda
  • Pentru Makefile am pornit de la cel de la laboratorul 1
  • Pentru utilizarea LCD-ului 16×2 am folosit lcd.c si lcd.h din laboratorul 1

Functionalitati

Meniul de baza ofera jucatorului posibilitatea de a alege intre inceperea unui nou joc si vizualizarea listei de highscores.

Jocul

Jocul se desfasoara incepand cu nivelul 1 (secventa cu o singura culoare) si continua, numarul culorilor din secventa fiind incrementat. Pentru acest lucru se genereaza o secventa aleatoare folosind TCNT1 pe post de seed pentru srand().

Functia display_sequence afiseaza pe rand culorile din secventa, iar apoi se asteapta input de la user. De asemenea, dupa afisarea secventei se porneste timerul 0, pe care il folosesc pentru a verifica daca timpul a expirat. Rutina de tratare a intreruperii timerului 0 adauga periodic un '#' pe LCD pana cand se umple ecranul, ca o bara de progres. Daca bara s-a umplut si userul nu a apucat sa introduca secventa, timpul a expirat si userul pierde runda.

Userul trece mai departe cat timp a introdus secventa corecta la timp. Cand greseste sau timpul expira, se verifica lista de highscores si daca se afla in top 5, aceasta se actualizeaza si userul este anuntat.

Lista de highscores

Lista de highscores este mentinuta persistent in eeprom. Am invatat cum sa fac acest lucru folosind link-ul [1]. Ideea de baza este ca de fiecare data cand am nevoie de highscores, le aduc din eeprom in vectorul ram si apoi dupa modificari salvez modificarile din vector in eeprom.

Cand un user pierde, este apelata functia update care verifica lista pentru a vedea daca scorul trebuie adaugat. Daca scorul se afla in top 5, este adaugat in locul corespunzator, restul intrarilor din lista fiind shiftate cu o pozitie.

Userul se poate uita prin lista de highscores apasand unul din butoane pentru a da scroll down.

Imagini

Concluzii

Mi-a placut proiectul. Mi-a lasat impresia ca folosind un Arduino pot face tot felul de mini inventii interesante, lucru ce mi se parea foarte complicat inainte.

Bibliografie

Resurse

pm/prj2019/mlungoci/memory_game.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