Joc Pong
Autor
Cioplean Alexandru-Mihai 331CB
Introducere
Prezentarea pe scurt a proiectului:
un joc de pong pe un ecran LCD cu 2 playeri
fiecare player are cate 2 butoane pentru deplasare
scorul este afisat dupa marcarea unui punct
punctele se marcheaza atunci cand unul dintre jucatori trimite mingea pe langa celalalt jucator si atinge peretele din spatele acestuia
difuzarea unui sunet atunci cand un jucator castiga un punct
jocul este castigat atunci cand unul dintre jucatori ajunge la 11 puncte si jocul se reseteaza
Descriere generală
Schema bloc:
Jucatorii sunt reprezentati prin 2 linii trase pe orizontala pe ecran, aproape lipite de margini
Mingea este reprezentata de un pixel de culoare albastra care se misca pe ecran
Fiecare jucator isi controleaza linia prin cate 2 butoane, unul pentru deplasarea in sus si altul pentru deplasarea in jos
La inscrierea unui punct, buzzerul scoate un zgomot scurt
Hardware Design
Lista de piese:
Arduino UNO
breadboard
4 butoane
ecran LCD
buzzer
Schema electrica:
Software Design
Am scris codul in mediul de dezvoltare: Arduino IDE.
Am folosit urmatoarele biblioteci:
Adafruit_GFX - implementarea functiilor de afisare pe ecran
Adafruit_ST7735 - comunicarea intre arduino si ecran
SPI - comunicarea prin SPI
Wire
Ca variabile globale am:
player_delay, ball_delay - timpul la care pozitia playerilor, respectiv a mingii se actualizeaza
player1_score, player2_score - scorul fiecarui jucator
ball_x, ball_y - pozitia mingii
ball_dir_x, ball_dir_y - directia mingii pe axele Ox si Oy, acestea au valori 1 sau -1 in functie de sensul pozitiv sau negativ de deplasare pe cele doua axe
player1_x, player1_y - pozitia jucatorului 1
player2_x, player2_y - pozitia jucatorului 2
running - variabila booleana care spune daca jocul ruleaza la momentul curent de timp
Functiile implementate sunt:
setup() - initializarea pinilor si a ecranului
loop() - se detecteaza apasarile de butoane pentru modificarea pozitiei jucatorilor, se deplaseaza mingea conform cu ball_dir_x si ball_dir_y, atunci cand mingea atinge unul dintre peretii playerilor, scorul se actualizeaza, este difuzat un sunet si programul iese din starea de running
display_score() - afiseaza pe ecran scorul curent al jocului
game_over() - afiseaza ecranul de game over atunci cand un jucator ajunge la 11 puncte
reset() - functie folosita pentru a reseta pozitia jucatorilor si a mingii
Functionare generala:
In setup() se initializeaza pinii si ecranul LCD
Jocul incepe cu mingea la mijlocul terenului, deplasandu-se spre unul dintre jucatori
Mingea se deplaseaza folosindu-se de variabilele ball_dir_x si ball_dir_y.
La un numar fix de milisecunde(date de variabila ball_delay) pozitia mingii se actualizeaza pe axele Ox si Oy
Atunci cand mingea loveste unul dintre peretii ecranului sau unul dintre jucatori, directia mingii pe acea axa se inverseaza si traiectoria se mingii schimba cu 45 de grade
Atunci cand un jucator reuseste sa trimita mingea pana la peretele ecranului corespunzator celuilalt jucator, primeste un punct
La primirea unui punct, jocul iese din starea running si se afiseaza ecranul cu scorul timp de 5 secunde, dupa care pozitiile mingii si a jucatorilor sunt resetate la cele initiale
Atunci cand un jucator ajunge la 11 puncte, jocul este castigat si se afiseaza ecranul de “Game Over”, pe langa pozitii, este resetat si scorul
Rezultate Obţinute
Circuitul electric:
Jocul:
Ecranul de scor:
Ecranul de game over:
Demo-ul care arata cum functioneaza jocul se gaseste aici: Demo Proiect
Concluzii
Proiectul a fost unul interesant, cea mai grea parte a proiectului a fost sa conectez in mod corect ecranul LCD la Arduino deoarece pe site-ul de unde l-am cumparat nu exista vreun link cu documentatia. De asemenea, am avut dificultati in a gasi o biblioteca pentru a controla afisarea pe ecran din cod.
Intr-un final am obtinut ce mi-am dorit, jocul este perfect functional si poate fi jucat.
Download
Bibliografie/Resurse