This is an old revision of the document!


2048 Deluxe

Contact: Login to see contact info.

Introducere

Proiectul constă în implementarea bine-cunoscutului joc 2048 pe un ecran monocrom Nokia 5110 84×48 pixeli, adăugând diverse elemente de quality of life precum:

  • lumini RGB care reacționează la input-ul jucătorului
  • sunete pentru fiecare acțiune a jucătorului:
    • selectarea opțiunilor din meniu
    • mutarea elementelor jocului
    • scurtă melodie joc pierdut/câștigat

Scopul acestui proiect este de a pune în practică toate noțiunile prezentate până acum în cadrul laboratoarelor de PM.

Descriere generală

La pornirea jocului se va alege între a începe un joc nou și între a vedea un top cu cele mai mari scoruri de până acum. Când jucătorul alege să pornească un joc nou, pe ecran va fi încărcată scena jocului în care va putea să își vadă scorul curent și va putea să miște elementele stânga/dreapta sau sus/jos folosind un modul joystick PS2. La sfârșitul jocului, în cazul în care a câștigat, jucătorul va putea să își salveze scorul dacă acesta se încadrează în top-ul vechi.

Utilizatorul va avea câteva butoane tactile dedicate pentru pause, quit, continue. Jocul conține, de asemenea, un led RGB decorativ care luminează în culori diferite în funcție de acțiunile utilizatorului, precum și un buzzer care să redea sunetele. Utilizatorul va putea seta luminozitatea ecranului, precum și volumul buzzerului folosind potențiometre.

Schema bloc:

Hardware Design

Denumire piesă Preț piesă Furnizor Cantitate comandată
Arduino Uno R3 25 lei cleste.ro 1
Modul joysticks PS2 8 lei cleste.ro 1
Ecran Nokia 5110 85×48 19 lei cleste.ro 1
Buton Tactil 6x6x5mm 1 leu cleste.ro 5
LED de 5mm diverse culori 0.3 lei cleste.ro 50
LED RGB 5mm 4 pini catod comun 2 lei cleste.ro 5
Breadboard 830 puncte 15 lei cleste.ro 1
Fire Dupont tata-tata 4 lei cleste.ro 30
Fire Dupont mama-tata 4 lei cleste.ro 30
Potentiometru liniar 10K 3 lei ardushop.ro 2
Buzzer pasiv 3 lei ardushop.ro 5
Rezistor 220R 0.4 lei ardushop.ro 20
Rezistor 1.2K 0.4 lei ardushop.ro 20
Cablu USB A-B 4 lei ardushop.ro 1

Schema Electrică

Software Design

Mediul de dezvoltare folosit pe parcursul implementării a fost Arduino IDE .

Biblioteci folosite în implementarea proiectului:

  • EEPROM.h
    • folosită pentru a stoca datele persistente (highscores) în memoria EEPROM a plăcuței Arduino
  • biblioteci specifice ecranului LCD Nokia 5110

Detalii despre implementare

Funcții și variabile pe scurt

Variabile globale

  1. Variabila cea mai importantă
    • g_display
      • obiectul LCD Nokia 5110 folosit pe tot parcursul programului
  2. Logica jocului
    • g_state, g_option
      • starea curentă în care se află jocul, respectiv opțiunea selectată din cadrul meniului principal
    • g_pause, g_record
      • indică dacă jocul se află în pauză sau nu, respectiv dacă jucătorul se află în interfața de înregistrare a scorului
  3. Variabile ce reprezintă jocul propriu-zis
    • g_board, g_max_piece, g_score
      • reprezintă tabla de joc specifică 2048 (un grid 4×4); indică cea mai mare valoare dintre toate piesele de pe tabla de joc, respectiv scorul curent al jucătorului
    • g_empty_tiles, g_esize
      • vector ce conține informații despre spațiile libere/ocupate din tabla de joc; numărul de spații libere din tabla de joc
  4. Variabilă auxiliară
    • g_win_melody
      • stochează notele muzicale prin care se va itera atunci când jucătorul câștigă jocul
  5. Variabile orientate hardware
    • g_adc_val
      • valoarea citită de la ADC
    • g_last_debounce
      • folosită în procedeul de debouncing pentru butoanele pause, quit și resume

Funcții folosite

Funcții specifice jocului

  • GAME_GameLogic
    • se apelează în loop și apelează diverse funcții în funcție de starea curentă a jocului
  • GAME_MoveUp/Down/Left/Right
    • mută piesele în direcția specifică funcției (+ merge numere cu aceeași valoare) și generează o piesă nouă pe tabla de joc
  • GAME_GeneratePiece
    • generează o piesă nouă (2 sau 4) într-o poziție liberă de pe tabla de joc
  • GAME_CheckIfLost/Won
    • verifică dacă jocul s-a terminat (cu victoria sau înfrângerea jucătorului)
  • ISR(TIMER1_COMPA_vect)
    • întrerupere după timer1 la valoare din OCR1A; la fiecare 3 secunde se scad 10 puncte din scor

Funcții specifice Arduino

  • ARDUINO_MyRead
    • întoarce valoarea obținută în urma conversiei ADC de la pinul specificat ca parametru
  • ARDUINO_ChangePin
    • schimbă pinul de la care se primește input-ul analogic
  • ARDUINO_WriteScore
    • scrie în memoria EEPROM a plăcuței Arduino noul highscore al jucătorului

Funcții specifice display-ului

  • DISPLAY_PrintXYZ
    • realizează afișarea mesajelor/frame-urilor specifice numelui funcției; unele funcții sunt mai complexe și presupun executarea mai multor acțiuni decât simpla afișare de text; detalierea acestora va fi făcută mai jos
  • DISPLAY_ResetGame
    • realizează resetarea întregului joc și reafișarea frame-ului de la începutul jocului

Funcții pentru led/buzzer/butoane/joystick

  • LED_SetColorRGB
    • setează culoarea led-ului RGB folosind reprezentarea RGB
  • LED_SetColorHSV
    • setează culoarea led-ului RGB folosind reprezentarea HSV
  • BUZZER_PlaySound
    • redă un sunet/o melodie în funcție de parametru
  • ISR(PCINT0_vect)
    • întreruperi externe pentru butoanele pause și quit
  • ISR(PCINT2_vect)
    • întrerupere externă pentru butonul continue
  • ISR(ADC_vect)
    • întrerupere pentru conversia ADC; folosită pentru a citi valorile specifice axelor Ox sau Oy ale joystick-ului

Rezultate Obţinute

TODO

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

TODO

Download

TODO

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.

Jurnal

  • 23.04.2021 - Am creat pagina de wiki.
  • 25.04.2021 - Am completat secțiunile necesare din wiki conform assignment-ului de pe moodle.

Bibliografie/Resurse

TODO

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Pagina în format PDF

pm/prj2021/dbrigalda/2048-deluxe.1621770714.txt.gz · Last modified: 2021/05/23 14:51 by ionut.ranja
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