Introducere

Proiectul se referă la un joc electronic compact, capabil să joace mai multe jocuri diferite de memorie, cu unul până la 4 jucători. Acesta constă dintr-o suprafață de joc cu 9 lumini roșii și 4 butoane.

Ideea jocului a pornit de la un joc electronic real numit MiniWizard (vezi referințe).

Descrierea jocurilor:

MATCH ME - joc de memorie pentru un singur jucător

  • Obiectiv: obiectivul jocului este amintirea si repetarea luminilor
  • Jocul: Programul va aprinde o latură de lumină. După aceasta, jucătorul trebuie să repete aprinderea laturii prin apăsarea pe butonul corespunzător. Dacă apasă corect, programul va aprinde din nou prima latură, la care mai adaugă una. Jucătorul trebuie să repete cele două laturi. În continuare, la fiecare răspuns corect, programul va mai adăuga o latură. Acest lucru continuă până când jucătorul face o greșeală sau câștigă jocul.
  • Câștig: Pentru a câștiga jucătorul trebuie să parcurgă 20 pași (să rețină până la o secvență de 20 laturi și să o reproducă).

HAMMERING HANDS - joc single-player de acțiune

  • Obiectiv: Scopul jocului este de a apăsa cu succes butonul corespunzător laturii pe care apare lumina. Este cerut un răspuns rapid.
  • Jocul: Când apare o lumină pe o latură a pătratului de LED-uri, jucătorul trebuie să apese imediat butonul corespunzător. Dacă poate apăsa butonul la timp, atunci poate continua jocul și altă lumină va apărea și tot așa.
  • Câștig: Jucătorul câștigă dacă apasă butoanele pentru 20 de lumini la timp.

FLASHING THREE - joc single-player de logică

  • Obiectiv: Obiectivul jocului constă în așezarea a celor 3 lumini care sclipesc pe un singur rând, orizontal sau vertical.
  • Jocul: Vor apărea 8 lumini pe suprafața de joc, din care 3 sclipesc. Utilizând cele 4 butoane, jucătorul trebuie să mute cele 3 lumini sclipitoare pe un singur rând. Există un singur spațiu liber în care se pot muta luminile, după cum se poate vedea în figură:

FOLLOW THIS - joc de memorie cu mai mulți jucători

  • Obiectiv: Repetarea luminilor generate de ceilalți jucători.
  • Jocul: Primul jucător apasă un buton pentru a aprinde o latură de lumini. Al doilea jucător trebuie să repete mișcarea primului, la care să adauge și el un rând. Astfel, fiecare jucător trebuie să repete luminile celui dinainte și să adauge una. Jocul continuă până când unul din jucători greșește sau toți jucătorii fac 20 de mutări.
  • Câștig: Grupul de jucători câștigă jocul dacă trec cu succes de cei 20 de pași. Dacă un jucător greșește, este eliminat din joc.

CRUCIAL CORNERS - joc de acțiune cu mai mulți jucători

  • Obiectiv: Jucătorul trebuie să îndepărteze lumina atunci când intră într-unul din colțurile acestuia. Scopul este să se câștige cât mai multe puncte.
  • Jocul: Acesta constă în apărarea de lumina roșie a fiecărui colț al butonului jucătorului. Acest lucru înseamnă că jucătorul trebuie să apese butonul în momentul exact în care lumina a intrat în colțul cel mai apropiat de buton, în stânga sau dreapta. Dacă este apăsat prea devreme sau prea târziu, jucătorul pierde un punct.
  • Câștig: Dacă jucătorul reușește să îndepărteze de fiecare dată cu succes lumina roșie, câștigă câte un punct, iar lumina se va muta la colțul următor sau își va schimba direcția. În caz de eșec, se pierde un punct. Jocul se termină când un jucător pierde 4 puncte. Câștigătorul se decide pe baza celui mai mare punctaj. Scorurile încep de la 0 la fiecare joc.

CENTER SHOT - joc multiplayer de coordonare a mâinii și văzului

  • Obiectiv: Scopul jocului constă în ”împușcarea” tuturor luminilor care intră în centrul suprafeței de joc.
  • Jocul: O lumină se va plimba pe surafața de joc. Fiecare jucător trebuie să apese pe butonul său atunci când lumina roșie intră în centrul suprafeței. Astfel, jucătorul ”împușcă” centrul ecranului.
  • Câștig: Jucătorul care reușește să nimerească lumina roșie din centru va primi un punct. La un eșec, jucătorul pierde un punct. Jocul durează 50 de secunde. Câștigătorul se determină pe baza punctajului obținut.

COMMON LIGHT - joc de observație și memorare cu mai mulți jucători

  • Obiectiv: Determinarea luminii comune care apare în toate pattern-urile.
  • Jocul: Vor apărea două pattern-uri de lumini pe rând. O lumină va avea două apariții, câte una în fiecare pattern. Jucătorul trebuie să observe și să memoreze care e lumina comună. După apariția pattern-urilor, luminile se vor aprinde pe rând și fiecare jucător trebuie să apese butonul său atunci când se aprinde lumina comună.
  • Câștig: Jucătorul care alege bine lumina comună, câștigă.

MATH DASH - joc multiplayer de adunare

  • Obiectiv: Obiectivul este adunarea luminilor apărute pe suprafața de joc și apăsarea butonului atunci când suma totală a luminilor este divizibilă cu 10.
  • Jocul: Pe suprafața de joc apare o secvență de lumini și jucătorii trebuie să numere câte lumini sunt. Dacă adunând numărul total de lumini din primul pattern cu cel din al doilea rezultă un multiplu de 10, jucătorul trebuie să apese butonul. Dacă suma curentă nu se divide cu 10, va apărea o nouă secvență, a căror lumini trebuie adunate la cele de până acum, jocul continuând în acest fel. Jucătorii trebuie să apese butonul de fiecare dată când socotesc un multiplu de 10.
  • Câștig: Jocul este câștigat de cei care apasă butonul când suma este divizibilă cu 10. Jucătorii care nu apasă butonul, sau îl apasă la momentul greșit, vor pierde.

Proiectul va încerca să implementeze acest joc electronic, utilizând 9 LED-uri, 4 butoane, o tastatura de pe care se poate selecta numărul jocului, un ecran LCD pe care vor apărea mesaje pentru jucători și un buzzer pentru sunete.

Descriere Generala

Schema Bloc

Proiectul va avea următoarele componente:

Descriere Componente

Dispozitivul va comunica cu jucătorul prin toate elementele sale: utilizarea principală este dată de butoane si LED-uri prin intermediul cărora se desfășoară jocurile; Diverse mesaje (de început de joc, numele jocului, câștig sau pierdere) sunt afișate pe ecranul LCD atașat jocului; de asemenea, jucătorul interacționează cu jocul și prin tastatura, care ii permite sa aleaga numărul unui joc din cele 8.

Hardware Design

Piese folosite la proiect

La piesele necesare plăcuței de bază s-au adăugat următoarele componente pentru finalizarea proiectului:

  • ecran LCD Text 16×2
  • tastatura 4×4
  • 9 LED-uri 3V 5mm roșii
  • 11 rezistențe 1K
  • 4 butoane
  • buzzer

Schema electrica

Schema electrică a fost realizată în Proteus ISIS, pentru a putea face și niște simulări înainte de programarea plăcuței.

Astfel, interfațarea LCD-ului se face pe 7 biți (conform indicațiilor din laborator), acesta ocupând astfel aproape toți pinii portului A al microcontroller-ului.

În mod asemănător, tastatura ocupă tot portul C. Acesta este legată pin la pin cu microcontroller-ul astfel: pinii PC0-PC3 vor reprezenta rândurile matricii pornind de sus în jos, iar pinii PC4-PC7, coloanele pornind de la stânga la dreapta.

Având în vedere că pentru cele 9 LED-uri nu este suficient un port (nu s-a luat în considerare legarea LED-urilor în matrice deoarece aceasta ar fi adus beneficii semnificative doar în cazul unul număr mai mare de LED-uri; având în vedere numărul mic și fixat, s-a considerat mai eficientă ocuparea a încă 3 porturi, decât complexitate construirii și utilizării unei matrici de LED-uri), 8 LED-uri sunt interfațate pe portul B, ocupând toț pinii disponibili ai acestuia, iar ultimul LED este plasat pe singurul pin rămas liber la portul A, PA7.

Cele 4 butoane sunt atașate microcontroller-ului la portul D, pe pinii nefolositi ai acestuia (PD0, PD1, PD4, PD5).

Buzzer-ul este prins cu un fir la masă și celălalt la un pin din portul D (PD7).

Software Design

Proiectul a fost realizat și compilat cu WinAVR.

Acesta conține un fișier sursă separat pentru API-ul LCD-ului (pus la dispoziție la laborator):

void LCD_init();               
void LCD_writeInstruction(unsigned char _instruction);	
void LCD_writeData(unsigned char _data);		
void LCD_write(unsigned char _byte);			
void LCD_waitNotBusy();					
void LCD_waitInstructions(unsigned char _instructions);	
void LCD_print(char* _msg);				
void LCD_print2(char* _msg1, char* _msg2);
void LCD_printDecimal2u(unsigned int _n);		
void LCD_printHexa(unsigned int _n);

De asemenea, fișier sursa separat pentru lucrul cu tastatura:

void KEYPAD_init();	//initializare tastatura
void get_key();		//obtinere tasta apasata

La acestea se adaugă un fișier sursă cu funcțiile necesare jocului:

void start_game();		//animatia de inceput a jocului
void select_game();		//modul de selectare a jocului in functie de butonul apasat la tastatura
 
/* jocurile propriu-zise pe care le stie programul */
void match_me();		
void hammering_hands();
void flashing_three();
void follow_this();
void crucial_corners();
void center_shot();
void common_light();
void math_dash();

În funcția main() a programului se initializeaza mai intai toate componentele necesare jocului:

LED_init();
BUTTON_init();
BUZZER_init();
KEYPAD_init();
LCD_init();

după care se pornește animația de început a jocului și jucătorul este invitat prin intermediul mesajelor de pe LCD să își aleagă un joc folosind tastatura. Acesta poate folosi primele 8 butoane de la tastatură pentru a alege unul din cele 8 jocuri disponibile. Odată ales jocul, acesta este rulat prin diferitele schimbări de stare ale LED-urilor (schimbări automate, programate sau generate de apăsarea butoanelor).

De exemplu, algoritmul primului joc reține într-un vector secvența de laturi aprinse, verificând apoi, când vine rândul jucătorului, la fiecare apăsare de buton dacă s-a apăsat cel corespunzător laturii din vector. Dacă nu, jocul se oprește și pe LCD este afișat un mesaj care anunță jucătorul că a pierdut. Dacă jucătorul reușește șă rețină și să reproducă până la sfârșit secvența de laturi, pe ecranul LCD-ului este afișat un mesaj de câștigare a jocului. În ambele cazuri jucătorul poate să își aleagă după aceea un nou joc.

Pentru unele dintre jocurile posibile ale dispozitivului, este necesar să se implementeze un timer (de exemplu pentru jocul FLASHING THREE, unde cele trei lumini principale sunt evidențiate față de celelalte prin faptul că sclipesc).

Rezultate

Principalul rezultat obținut constă în funcționarea corectă a programului mai întâi la verificarea pe simulatorul Proteus, și mai apoi pe plăcuță (cu excepția tastaturii).

Din păcate nu a fost timp decât pentru implementarea a două jocuri din cele opt posibile, sperând ca următoarele să fie dezvoltate la un moment de timp ulterior.

Concluzii

Concluziile pot fi trase în urma experiențelor avute cu plăcuța

O problemă întâmpinată a fost aceea a memoriei disponibile reduse. Deși cele 2 jocuri implementate au suficient loc în memoria microcontroller-ului, pentru funcționarea tuturor celor 8 jocuri ar fi nevoie de un microcontroller cu memorie mai mare.

De asemenea, o altă greutate a constat în planificarea pinilor microcontroller-ului pentru legarea la componente, având în vedere că acest proiect necesita mulți pini disponibili. Totuși aceștia au fost plasați într-un mod corespunzător care să ușureze și programarea și lipirea pe plăcuță.

Referințe

Jocul electronic MiniWizard: Mini_Wizard.pdf

Interfațare tastatură:

Download

Codul sursă al programului: memorygame_maria_carpenamarie.zip

pm/prj2010/rtataroiu/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