Jocul de Pong este unul dintre primele jocuri create pe calculator, fiind o simulare a jocului de tenis de masa. Fiecare jucator controleaza un cursor, miscandu-l pe verticala de-a lungul ecranului. Cursorul este folosit sa loveasca o minge care se plimba intre jucatori.
Jocul incepe prin apasarea unui buton, pornind de la scorul 0-0. Pe modulul LCD se va afisa mingea si cursoarele celor 2 jucatori. Cursoarele se pot muta pe orizontala atat cat permite ecranul. Mingea se loveste de marginile verticale ale ecranului si isi schimba directia de mers.
Jucatorii vor controla cursorul prin intermediul unui Joystick, ambii urmarind sa loveasca mingea. Un jucator pierde un punct in defavoarea celuilalt jucator daca rateaza sa loveasca mingea. Dupa fiecare punct castigat se afiseaza mesajul “Player_x won!”
si scorul.
Pentru inceperea rundei urmatoare trebuie apasat din nou pe butonul de start. Scorul va fi afisat permanent in partea de sus a ecranului. Jocul continua la infinit sau pana la resetarea placutei Arduino.
Codul sursa consta in principal in comunicarea cu LCD-ul si controlarea elementelor afisate. Pentru cursoare si minge s-au creat custom_characters
retinute sub forma de vectori. Un cursor este format dintr-o parte superioara si una inferioara pentru a fi posibila afisarea pe randurile LCD-ului. Miscarea obiectelor se face prin shiftarea la stanga/dreapta a elementelor vectorilor. Pentru minge se tine cont ca aceasta isi poate schimba directia de mers atunci cand se loveste de un cursor sau de marginile ecranului. Miscarile cursoarelor sunt declansate de schimbarea pozitiei Joystick-ului.
Se testeaza coliziunile atunci cand mingea ajunge in acelasi bloc ca unul dintre cursoare, iar daca se observa ca mingea se suprapune pe un cursor se incheie runda curenta si creste scorul jucatorului oponent.
Elementele si scorul se afiseaza constant in timpul jocului, iar intre runde se afiseaza “Press button to start”
pana cand se apasa pe butonul de START.
S-au folosit bibliotecile: Wire.h
, LiquidCrystal_I2C.h
.
Proiectul a fost foarte interesant de realizat. Dificultatea principala a fost scrierea codului care sa afiseze corect pe ecran. Mi-as fi dorit ca afisajul sa fie vizibil mai placut, insa doar atat am putut realiza. O alta problema a fost conectarea provizorie a LCD-ului pana la includerea adaptorului I2C.