Pong Game

Coconu Robert-Iulian 332AB

Introducere

Functionalitatea de baza a jocului pong este mentinerea unei mingi in aria ecranului folosind o bara plasata lateral. Pong a fost creat pentru divertisment, prin scor se poate forma o competitie intre utilizatori. Originalul joc Pong a aparut in 1972 creat de Atari, idea acestui joc are la baza conceptul pe ping-pong electronic. Implementarea acestui joc este utila pentru a avea experienta cu crearea unui proiect electronic complet, usor de inteles si folosit de utilizatori.

Descriere Generala

La pornirea jocului ecranul este activat si este pornit jocul PONG in varianta impotriva peretelui. Prin miscarea joystick-ului utilizatorul controleaza o bara laterala cu care incearca sa nu lase mingea sa treaca de el.

Prin apasarea joystick-ului se intra in meniul de setari, pentru trecerea la urmatoarea setare se apasa din nou pe buton. Buzzerul emite sunete atunci cand mingea atinge peretii sau iese in afara arei definite de ecran.

Hardware Design

Lista componente:

  • ARDUINO UNO R3 ATMEGA328P
  • ECRAN OLED 0.95”
  • BREADBOARD
  • MODUL JOYSTICK PS2 COMPATIBIL ARDUINO
  • MODUL BUZZER ACTIV
  • FIRE

Software Design

Mediul de dezvoltare

Mediul de dezvoltare folosit este Arduino IDE 1.8.14. Este un software open-source folosit pentru dezvoltarea programelor pentru placutele Arduino

Biblioteci folosite

Bibliotecile folosite in dezvoltarea acestei aplicatii sunt:

  • Adafruit_GFX
  • Adafruit SSD1306
  • U8glib

Adafruit_GFX este o biblioteca ce ofera functii pentru grafica afisata pe ecranul OLED folosit. Aceasta permite schimbarea display-urilor folosite pe placuta Arduino cu schimbari minime in codul aplicatiei.

Adafruit SSD1306 este o biblioteca de drivere folosita pentru display-urile monocrome de tip 128×64 si 128×32. Aceste tipuri de ecrane OLED de tip SSD1306 folosesc pentru comunicare I2C sau SPI.

U8glib este o biblioteca de functii grafice folosita pentru ecrane monocrome de tip TFT sau OLED. Aceasta ofera si suport pentru comunicarea I2C intre Arduino si ecran.

Algoritmi si Structuri Folosite

Aplicatia dispune de optiunile urmatoare: SOUND, PAD_SPEED, BALL_SPEED, SKEW, PAD_SIZE, MULTIPLAYER. Aceste optiuni sunt integrate intr-o `struct` ce contine numele, valoarea minima, valoarea maxima, valoarea prin care incrementam si valoarea curenta a optiunii respective. De exemplu, un element al acestei structuri este de forma: `{“Ball-Speed”, 1, 19, 1, 4}`.

Pentru ciclarea prin meniul de optiuni folosim apasarea joystick-ului, pentru a previne fenomenul de debouncing tinem cont de timpul de la ultima apasare.

Pentru a verifica rezultatul jocului ( daca mingea gaseste un obstacol sau nu ) verificam pozitia acesteia in ecran. Pentru lovirea peretilor de sus si de jos vom inmulti cu -1 factorul cu care incrementam pozitia bilei pe Oy. Pentru lovirea cu paleta jucatorului vom schimba inversa directia pe Ox iar pe Oy vom decide directia in functie de pozitia bilei fata de mijlocul paletei.

Functii implementate

Functiile prezente sunt folosite pentru emiterea sunetelor, schimbarea setarilor si verificarea pozitiei mingii.

Sunt folosite functii pentru emiterea sunetelor pentru lovirea peretilor, paletei sau pentru pierderea mingii.

In functia pentru schimbarea setarilor se verifica in care setare se aflam in acel moment de timp si in functie de inputul de la joystick vom incrementa sau decrementa valoarea setarii respective.

Functiile pentru verificarea pozitiei mingii au scopul de a printa aceste informatii in Serial Monitor cu scopul verificarii rularii corecte a aplicatiei.

Rezultate Obţinute

Rezultatul obtinut este o aplicatie a jocului Pong folosind un ecran 128×64 ce comunica cu o placuta Arduino. Scorul obtinut pentru Singleplayer este afisat pe partea dreapta a ecranului, primul contor este incrementat cu fiecare pierdere iar cel de-al doilea este incrementat de fiecare data cand jucatorul loveste mingea. Pentru modul Multiplayer impotriva AI-ului, scorul fiecaruia este afisat in dreptul paletei fiecaruia.

Concluzii

Aplicatia Pong implementata este complexa in felul in care utilizatorul poate sa modifice modul de functionare prin meniul pus la dispozitie. Acest proiect reprezinta o modalitate buna pentru familiarizarea cu comunicarea I2C, folosirea intrerperilor si a ecranelor OLED in aplicatii interactive.

Download

Bibliografie/Resurse

pm/prj2022/cristip/ponggame.txt · Last modified: 2022/05/24 03:29 by robert.coconu
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