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

pm/prj2021/alazar/joc_pong.txt · Last modified: 2021/05/30 19:31 by alexandru.cioplean
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