Adrian DOBRICĂ - Memory Game LCD

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Un joc pe LCD, cu o grilă de pătrățele. Jucătorul trebuie să identifice pătrățelele pereche, cu scopul de a le îndepărta de pe grilă. Regula principală este că jucătorul nu poate întoarce decât maxim 2 pătrățele în același timp, apoi tabla ascunde pătrățelele care au fost întoarse, așa că jucătorul va trebui sa se bazeze mult pe memoria sa, pentru a câștiga jocul cu un scor cât mai mare.

Descriere generală

Alegerea pătrățelului se face prin intermediul butoanelor (input). Rezultatul se va vedea pe LCD (output). Difuzorul va produce efecte sonore pentru a realiza muzică ambientală (output). LED-urile vor produce efecte luminoase pentru a oferi indicii utilizatorului referitoare la acțiunea sa (output).

Hardware Design

Lista de piese:

  • 1x LCD display 16 x 2
  • 1x Difuzor
  • 8x LED
  • 4x Buton
  • 8x Rezistențe 0.1K
  • 1x Rezistență 1K
  • 1x Rezistență 10K
  • 1x Placă test 100 x 100
  • 2m Cablu UTP
  • 1x Condensator electrolitic 100uF

Schema electrică

Software Design

  • IDE: Win AVR
  • biblioteci: am folosit biblioteca din laborator pentru interfațarea cu LCD-ul

Funcționalități

  • a) hartă cu pătrățele ce ascund imagini
  • b) deplasare prin hartă și selectare pătrățel ⇒ dezvăluire imagine
  • c) anulare imagine în cazul unei nepotriviri
  • d) led-urile reprezintă indicii pentru cât de aproape a fost utilizatorul de a împerechea corect 2 imagini (hot or cold)
  • e) muzică în timpul jocului + muzică pentru Credits
  • f) generare random a hărții
  • g) 2 „cheat modes”
  • h) scor + posibilitate de continuare cu un nou joc
  • i) credits

Implementare

  • a) f) Am „desenat” (scris) în memoria CGRAM caractere ce reprezintă imaginile pentru joc, pe care le stochez într-o matrice, ce conține atât imaginea cât și ceea ce trebuie desenat pe ecran în cazul trecerii cursorului peste acea căsuță. Pentru randomizare, voi pleca de la o permutare (0-31) și în mod aleator voi interschimba elemente din acea permutare. Pe baza ei, se va construi harta. Funcția random_map() realizează acest fapt. Inițial, harta va fi populată cu pătrățele albe (FULL_BOX) (init_map()).
  • b) c) În cadrul unei bucle, se va realiza deplasarea pe hartă, conform butoanelor apăsate (stânga, dreapta, jos, sus). Poziția anterioară va fi redesenată după ce cursorul realizează tranziția către un alt pătrățel. Cu butonul center se va selecta un pătrățel. Aceasta își va dezvălui imaginea. La o a doua selectare a unui pătrățel, dacă acesta este identic cu primul, ele vor fi eliminate de pe hartă. Altfel, ele revin la imaginea de FULL_BOX.
  • d) LED-urile vor veni în sprijinul utilizatorului, pentru a-l ajuta să împerecheze pătrățelele. După ce realizează prima selecție a unui pătrățel și încearcă să îi găsească omologul, LED-urile vor oferi feedback: dacă cel de-al doilea pătrățel selectat este foarte aproape de pătrățelul pereche, atunci se va aprinde un număr mare de LED-uri. Dacă acel pătrățel este mai departe, se vor aprinde mai puține LED-uri. Funcțiile hints() și hot_or_cold() realizează aceste acțiuni.
  • e) Jocul are în componență și două track-uri muzicale, care vor fi redate în timpul jocului, respectiv la final. Am folosit funcțiile din laboratorul 3, pentru timere și întreruperi.
  • g) Există și două combinații, pentru trișori: apăsând simultan butoanele stânga-dreapta, se dezvăluie harta (pentru revenire la normal se folosește aceeași combinație), respectiv sus-jos, pentru a câștiga automat jocul.
  • h) După câștigarea jocului, va fi afișat scorul jucătorului, iar acesta va avea posibilitatea de a continua cu un nou joc sau de a merge la ecranul de Credits.

Rezultate Obţinute

Video

Poze

Concluzii

Proiectul este pe deplin funcțional! Nu voi spune că proiectul a fost unul interesant, deoarece am observat că 99% din proiecte încep cu această propoziție. Pot să afirm cu certitudine că acest proiect a fost prima temă „adevărată” din această facultate și probabil singura inginerească, singura temă tangibilă, unde rezultatul este fizic și nu digital în totalitate.

Dificultăți:

  • lipirea firelor. Am avut de lipit circa 30 de fire, iar când am lipit toate firele la GND, am observat că se lipesc foarte greu unele de altele.
  • interfațarea LCD-ului. Am pierdut mult timp căutând datasheet-uri cu diverse inițializări, însă am depistat problema în penultima săptămână (era una hardware) și am refăcut lipiturile LCD-ului.

Download

Jurnal

  • Am lipit pentru prima oară niște rezistențe pe o placă de test.
  • Am primit acordul asistentului pentru a realiza acest tip de proiect.
  • Am realizat schema bloc.
  • Am cumpărat piesele necesare pentru placa de bază și am lipit o parte dintre ele.
  • Am finalizat placa de bază, am testat-o … și a mers!
  • Am realizat lista de componente și ulterior schema electrică.
  • Am lipit componentele.
  • LCD-ul nu afișa nimic.
  • Am reușit să fac LCD-ul să funcționeze corespunzător.
  • Am realizat partea software.
  • Am mai adăugat încă un led și un buton + am actualizat corespunzător și schema electrică, conform modificării.

Bibliografie/Resurse

Resurse Hardware

Resurse Software

pm/prj2015/ddragomir/adobrica.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