Pong Revolution

Nume și Prenume: ALEXANDRU ANDREEA
Grupă: 333CB

Introducere

„Pong Revolution” propune o versiune actualizată a clasicului joc Pong, care adaugă elementul de strategie și imprevizibilitate prin intermediul power-up-urilor (avantaje/dezavantaje temporare). Jucătorii se vor confrunta pe tabla de joc virtuală, folosindu-și abilitățile și reflexele pentru a marca puncte și pentru a obține victoria. Jocul va fi însoțit de un dinamism care va anima experiența de joc.

Scopul proiectului este de a oferi o experiență distractivă și captivantă jucătorilor, prin combinarea elementelor clasice ale jocului Pong cu inovații care aduc un plus de strategie și divertisment. Acest proiect își propune să atragă atât fanii jocului original, cât și noii jucători, adăugând un plus de strategie și dinamism.

Ideea proiectului a pornit de la dorința de a reanima un joc clasic, păstrând esența originalului, dar adăugând elemente noi pentru a îmbunătăți experiența de joc.

Utilitatea proiectului:
Jocul proiectat oferă o formă de divertisment captivantă, potrivită pentru jucători de toate vărstele, oferind sesiuni de joc cu elemente strategice și dinamică imprevizibilă. Totodată, interventiile sonore și vizuale îmbunătățesc experiența de joc prin stimularea multisenzorială.
Dintr-o altă perspectivă, proiectarea jocului Pong Revolution este o provocare personală care facilitează dezvoltarea abilităților tehnice: cunoștințe și abilități în programare, design de jocuri, integrare de efecte sonore și vizuale.

Descriere generală

Descriere sumară mod de funcționare

Jocul implementat „Pong Revolution” funcționează după următorul mecanism de bază: jucătorii controlează fiecare o paletă pe tabla de joc și trebuie să lovească pucul pentru a-l trimite către adversar, scopul fiind marcarea punctelor prin trecerea pucului pe cealaltă parte a tablei de joc fără ca adversarul să-l returneze. Pe măsură ce jocul progresează, power-up-uri aleatorii apar pe tabla de joc. Acestea oferă avantaje sau dezavantaje temporare, modificând dinamica jocului. Pentru a captura un power-up jucătorul trebuie să își coordoneze mișcările astfel încât pucul sa intre în contact cu simbolul acestuia, activându-se automat. Mișcările vor fi ghidate prin utilizarea unui joystick care permite mișcări sus/jos, stânga/dreapta pe un anumit perimetru.
Jocul se va încheia fie când un jucător atinge un anumit număr de puncte, fie când timer-ul expiră.
De asemenea, jocul va interacționa în mod activ cu jucătorii prin lumini, sunete de victorie/înfrângere, intervenții sonore redate de pe un card SD.

Schemă Bloc

Hardware Design

  • listă de piese
  • scheme electrice
  • descriere pini
  • imagini demonstrative

Listă Piese

- Arduino UNO R3 ATMEGA328p
- Display LCD 128x160px, SPI
- Breadboard
- 2 x Joystick
- Buzzer
- buton
- rezistențe: R = 330 Ohm; R = 1K Ohm
- tranzistor BC337
- LED Bicolor de 3 mm Rosu si Verde cu Anod Comun
- fire
- cablu USB

Schemă eletrică





Descriere pini

Conexiuni Modul LCD - SPI și Controller ST7735S ↔ Arduino UNO R3:
1. SCK (Serial Clock): pinul de ceas serial (CLK) → pin digital 13
2. SDA/DIN (Serial Data): pinul de date seriale (MOSI) → pin digital 11
3. A0/ DC: selectare între date și comenzi → pin digital 9
4. RESET: pinul de resetare (RST) → pin digital 8
5. CS (Chip Select): selectare cip → pin digital 10
6. LED/BL: pinul de backlight → pin digital 4
7. VCC: alimentare
8. GND

Conexiuni Buzzer activ ↔ Arduino UNO R3:
1. VCC
2. GND
3. I\O: pin pentru semnalul de intrare/ieșire → pin digital D2

Conexiuni LED anod comun ↔ Arduino UNO R3:
- pentru pinii de culoare (roșu și verde): am conectat câte o rezistență de limitare a curentului și câte un pin digital: 1 și 4
- pentru pinul comun (anodul) → pin digital 7

Conexiuni buton ↔ Arduino UNO R3:
- pin conectat la GND
- pin de semnal al butonului → pin digital 0

Conexiuni joystick ↔ Arduino UNO R3:
1. GND
2. VCC
3. VRX: citire poziție pe axa Ox → pin analogic A3 (respectiv A1)
4. VRY: citire poziție pe axa Oy → pin analogic A4 (respectiv A5)
5. SW: citire stare buton → pin digital 5 (respectiv 6)

Imagini

Software Design

Descrierea codului aplicaţiei (firmware):

  • Mediu de dezvoltare: Arduino IDE (placă utilizată Arduino UNO R3);
  • Librării şi surse 3rd-party:
    • Adafruit GFX Library: oferă funcții grafice pentru a desena pe display-ul TFT
    • Adafruit ST7735: Controler pentru display-ul ST7735, care gestionează comunicarea cu display-ul TFT
  • Algoritmi şi structuri de implementat:
    • Controlul Joystick-ului: Citirea valorilor analogice de la joystick pentru a controla mișcarea paletelor.
    • Detecția Coliziunilor: Algoritmi pentru a detecta coliziunile bilei cu paletele și marginile ecranului.
    • Algoritmul de mișcare a bilei și actualizarea poziției acesteia pe ecran.
    • Algoritmul de actualizare a scorului și resetare a poziției bilei.
    • Gestionarea Scorului: Funcții pentru actualizarea și afișarea scorului pe ecran.
    • Controlul Jocului: Inițierea jocului la apăsarea unui buton de start; restartarea jocului la apăsarea butonului joystick-ului.
    • Controlul buzzer-ului pentru semnalizarea evenimentelor de joc.
    • Controlul LED-ului pentru indicarea stării jocului.
  • Surse şi funcţii implementate:
    • setup(): Funcția de inițializare a ecranului, a variabilelor globale și a pinilor de intrare/ieșire.
    • loop(): Funcția principală care rulează continuu și gestionează logica jocului, inclusiv mișcarea paletelor, mișcarea bilei, detecția coliziunii, actualizarea scorului și resetarea bilei.
    • resetBall(): Funcția pentru resetarea poziției bilei și a direcției acesteia.
    • updateScore(): Funcția pentru actualizarea scorului afișat pe ecran.
    • displayMessage(): Funcția pentru afișarea unui mesaj pe ecran.
    • spawnRandomPickup(): Funcția pentru generarea aleatoare a unui pickup pe ecran.
    • despawnPickup(): Funcția pentru eliminarea “pickup”-ului de pe ecran.
    • Buzzer control: Funcții pentru activarea și dezactivarea buzzer-ului în diferite momente ale jocului (la startul jocului sau la fiecare punct marcat).
    • LED control: Funcții pentru activarea și dezactivarea LED-ului în diferite stări ale jocului (la startul jocului, la colectarea unui pickup verde, respectiv roșu).

Concepte Software folosite:
→ ADC (Analog-to-Digital Converter):
Citirea joystick-urilor: Valorile analogice de la joystick-uri sunt citite folosind pinii ADC ai Arduino (PLAYER1_X, PLAYER1_Y, PLAYER2_X, PLAYER2_Y). Aceste valori sunt convertite în semnale digitale pentru a controla mișcarea paletelor.

→ SPI (Serial Peripheral Interface):
Controlul display-ului TFT: Display-ul TFT este controlat prin protocolul SPI folosind librăriile Adafruit_GFX și Adafruit_ST7735. Pinii TFT_CS, TFT_DC, și TFT_RST sunt folosiți pentru comunicarea SPI cu display-ul.

→ GPIO (General Purpose Input/Output):
Controlul LED-urilor: LED-urile sunt controlate folosind pini GPIO. De exemplu, pinul LED_PIN, LED_GREEN_PIN și LED_RED_PIN sunt definiți și utilizați pentru a indica diferite stări ale jocului.

→ Timere:
Gestionarea pickup-urilor: Timer-ele sunt utilizate pentru a gestiona apariția și dispariția pickup-urilor pe ecran (PICKUP_APPEAR_INTERVAL, PICKUP_TIMEDOUT). Funcția millis() este folosită pentru a măsura timpul scurs și a declanșa evenimente la intervale regulate.

→ PWM (Pulse Width Modulation):
Controlul Buzzer-ului: Funcția tone() folosită pentru controlul buzzer-ului utilizează PWM pentru a genera sunetele necesare în timpul jocului.

Rezultate Obţinute

În urma realizării proiectului, am obținut următoarele rezultate:
→ Funcționarea Jocului: Am reușit implementez o variantă a jocului Pong pe display-ul TFT controlat de Arduino UNO.
→ Interfața Utilizator: Am dezvoltat o interfață grafică intuitivă pe display-ul TFT, utilizând bibliotecile Adafruit GFX și ST7735. Ecranul afișează clar mișcarea paletelor, mingii și scorul curent. De asemenea, am inclus mesaje de start și final de joc pentru o experiență utilizator îmbunătățită.
→ Controlul Joystick-ului: Am dezvoltat algoritmi pentru citirea valorilor analogice de la joystick-uri și controlul paletelor, oferind o reacție rapidă și precisă la mișcările jucătorilor.
→ Feedback Audio și Vizual: Implementarea buzzer-ului pentru semnalizarea evenimentelor de joc (cum ar fi coliziunea mingii sau punctarea unui gol) și a LED-urilor pentru indicarea stării jocului au adăugat un nivel suplimentar de interactivitate și feedback în timp real pentru jucători.
→ Gestionarea Pickup-urilor: Am adăugat o funcționalitate de “pickup-uri” care apar aleator pe ecran, oferind bonusuri sau penalizări jucătorilor.
→ Documentare și Modularitate: Codul a fost bine documentat, iar funcțiile implementate au fost structurate modular, facilitând astfel înțelegerea și posibilele îmbunătățiri viitoare ale proiectului.

În concluzie, proiectul a atins obiectivele propuse, oferind o experiență de joc atractivă.

Demopong_revolution_demo.zip

Download

Jurnal

→ MARTIE - APRILIE: alegere proiect;
→ 22 APRILIE - 26 APRILIE: confirmarea și stabilirea proiectului;
→ 29 APRILIE - 05 MAI: creare pagină wiki și adăugare documentație;
→ 06 MAI - 12 MAI: achiziționare piese;
→ 09 MAI - 12 MAI: creare schemă electrică;
→ 15 MAI: finalizare asamblare hardware;
→ 16 MAI: testare funcționalitate componente;
→ 15 MAI - 25 MAI: dezvoltare software;
→ 26 MAI: completare pagină wiki;

Bibliografie/Resurse

pm/prj2024/ccontasel/andreea.alexandru02.txt · Last modified: 2024/05/27 14:09 by andreea.alexandru02
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