This is an old revision of the document!
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 sa aiba cate 2 butoane pentru miscarea fiecarei platforme
scorul este afisat dupa marcarea unui punct
difuzarea unui sunet atunci cand un jucator castiga un punct
Descriere generală
Schema bloc:
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:
Download
Bibliografie/Resurse