This is an old revision of the document!


Jocul "2048"

Proiect PM - 2023

Student: Adrian-Valeriu Croitoru
Grupa: 332CA
Asistent: Victor Stoica

Introducere

Proiectul reprezinta o implementare a celebrului joc de smartphone - “2048”. Scopul jocului este, in primul rand, de a atinge milestone-ul de 2048 (pe un tile), dar dupa aceea, un high score cat mai mare poate reprezenta un scop la fel de placut.

A fost ales acest proiect datorita faptului ca acest joc este, dupa multi ani, la fel de jucat si cunoscut, fiind una dintre aplicatiile de smartphone pe care o accesez zilnic.

Utilitatea proiectului este, in primul rand, data de factorul de invatare. Cu siguranta vor fi multe dificultati software & hardware pe parcurs.

Totodata, este demn de amintit faptul ca ecranul telefoanelor mobile poate deveni daunator pentru ochi, motiv pentru care acest proiect vine in ajutorul utilizatorului, livrand aceeasi functionalitate a jocului 2048, dar pe un ecran mult mai prietenos cu ochiul.

Descriere generală

Utilizatorul se va putea juca folosind joystick-ul. Exista 4 directii posibile - N, S, E, V, orice mutare intre acestea a joystick-ului fiind aproximata la cea mai apropiata directie.
Va exista si un buton de restart, iar fiecare mutare a jucatorului va fi marcata printr-un sunet specific produs de buzzer.
Interactiunea efectiva cu UI-ul va fi realizata prin afisajul grafic LCD.

Schema bloc

Hardware Design

Lista componentelor hardware:

  • 1 x Groundstudio Jade Uno+
  • 1 x Display LCD 128*64 (5V iluminat, ST7920 controller)
  • 1 x Modul Buzzer
  • 1 x Modul joystick cu push-button
  • 1 x Placa de prototipare cablaj PCB 9×15 cm
  • fire Dupont mama-tata & tata-tata

Schema electrica




Software Design

  1. Mediu de dezvoltare: Arduino IDE
  2. Biblioteci utilizate: u8glib (pentru interfatarea modulului LCD ST7920)

Implementarea software este, ca structura, foarte asemanatoare cu cea in care se realizeaza jocurile video, in OpenGL. Astfel, de fiecare data, se “re-randeaza” cadrul curent, tinand cont de parametri precum:

  1. gameState (in ce stadiu se afla jocul: neinceput, in desfasurare, VICTORY sau GAME OVER)
  2. pozitia fiecarui tile pe ecran

Se foloseste Timer1 de pe placuta pentru a contoriza timpul total trecut de la inceperea jocului curent.

Butonul este setat sa produca o intrerupere pe falling edge, aceasta fiind concretizata in oprirea imediata a jocului curent si intoarcerea in meniul principal.

Se foloseste ADC (Analog digital conversion) pentru a traduce inputul dat de joystick intr-o miscare propriu-zisa UP, DOWN, LEFT sau RIGHT.

Se folosesc multiple variabile de debounce pentru a evita situatia in care aceeasi comanda este efectuata de N ori. (e.g. atunci cand tinem joystick-ul blocat in pozitia RIGHT)

Rezultate Obţinute

Concluzii

Proiectul este unul reusit, functionalitatea promisa fiind integral oferita.

Pe plan personal, am apreciat ca a fost un prilej bun de a lua un prim contact cu acest domeniu. Mi-a placut sa descopar si exploatez capabilitatile chip-ului Atmega328PB si sa invat mai multe despre timerele built-in de pe placuta (folosite pentru calcularea timpului scurs de la inceperea jocului), despre conversia analog-digital (joystick-ul), dar si despre modul in care se configureaza si functioneaza intreruperile (butonul de reset game).

Mi-a facut placere sa lucrez cu modulul LCD ST7920 128×64, lucru in urma caruia am generat alte cateva idei personale pe care sa le dezvolt cu ajutorul acestuia.

Bibliografie/Resurse

pm/prj2023/vstoica/2048.1684881856.txt.gz · Last modified: 2023/05/24 01:44 by adrian.croitoru2505
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