Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:alexau:ponggame [2023/05/21 21:37]
cerasela.enus [Software Design]
pm:prj2023:alexau:ponggame [2023/05/28 22:19] (current)
cerasela.enus [Software Design]
Line 12: Line 12:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-{{:​pm:​prj2023:​alexau:​schema.png?​nolink&​300 |}}+{{ :​pm:​prj2023:​alexau:​schema_pg_ec.png?​nolink&​300 |}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 20: Line 20:
   * Placă Arduino Uno   * Placă Arduino Uno
   * Ecran color OLED   * Ecran color OLED
 +  * Buzzer
   * Butoane   * Butoane
   * Breadboard   * Breadboard
   * Fire de conexiune   * Fire de conexiune
 </​note>​ </​note>​
-{{:​pm:​prj2023:​alexau:​thinkercad.png?nolink |}}+{{ :​pm:​prj2023:​alexau:​thinkercad_ec.png?nolink |}}
  
 ===== Software Design ===== ===== Software Design =====
  
 +<note tip>
  
-<note tip>{{:​pm:​prj2023:​alexau:​pong_game.zip|}}+{{:​pm:​prj2023:​alexau:​pong_game_ec.zip|}} 
 +{{:​pm:​prj2023:​alexau:​video.zip|}}
  
 +La începutul codului sunt incluse mai multe biblioteci necesare pentru controlul afișajului OLED, butoanelor și buzzer-ului.
  
 +Se definesc mai multe constante și variabile globale pentru a configura și a stoca starea jocului, inclusiv coordonatele bilei, direcțiile de deplasare, scorurile jucătorilor și pozițiile paletei pentru jucătorul și calculatorul controlate de cod.
  
-Se începe prin includerea bibliotecilor necesare ​pentru ​comunicarea cu afișajul OLED și alte componente.+Funcțiile setup_interrupts() și setup() sunt responsabile ​pentru ​inițializarea hardware-ului și a afișajului ​OLED. În setup_interrupts(),​ se configurează intrările de întreruperi pentru butoanele de sus și jos, iar în setup() se inițializează afișajul OLED.
  
-Sunt definite constante ​pentru ​butoanele ​de sus și de jos utilizate ​pentru ​mișcarea jucătorului.+Funcția ISR(INT0_vect) este o rutină de întrerupere ​pentru ​butonul ​de sus și ISR(INT1_vect) este o rutină ​de întrerupere ​pentru ​butonul de jos. Aceste rutine sunt declanșate atunci când se detectează o schimbare de stare a butoanelor și setează variabilele up și down în funcție de starea butoanelor.
  
-Sunt definite și inițializate variabilele pentru poziția bilei, direcția de deplasare ​bilei, ratele de actualizare pentru mișcarea bilei și a paletelorînălțimea paletei și pozițiile inițiale ale paletei CPU și jucătorului.+Funcția loop() conține logica principală ​jocului ​și este executată într-un ciclu continuu. În fiecare iterație ​bucleise verifică dacă a sosit momentul de actualizare a poziției bilei sau a paletei și se efectuează acțiunile corespunzătoare. De asemenea, se verifică dacă un jucător a marcat un punct și se afișează scorul pe afișajul OLED. Jocul se oprește atunci când un jucător atinge scorul de 5.
  
-Funcția ​setup() este apelată o singură dată la pornirea programului și se ocupă de inițializarea afișajului OLED și a pinilor pentru butoane. De asemenea, afișează un teren de joc gol pentru o scurtă perioadă de timp.+Funcția ​resetGame() este responsabilă de resetarea stării jocului ​la începutul fiecărei runde, inclusiv resetarea poziției bilei, direcțiilor ​de deplasare ​și a pozițiilor paletei.
  
-Funcția ​loop() rulează într-o buclă continuă și gestionează mișcarea bilei și a paletelor în fiecare cadru.+Funcția ​drawCourt() desenează terenul de joc pe afișajul OLED, adică un chenar alb de dimensiune 128x64 pixeli.
  
-În fiecare cadruse verifică dacă trebuie actualizată poziția bilei. Dacă a trecut suficient timp de la ultima actualizare a bilei, se calculează noua poziție ​bilei și se verifică dacă a lovit pereții verticali, pereții orizontali sau paletele CPU și jucătorului. Dacă bilea a lovit un obiect, direcția ei este inversată și noua poziție este calculată corespunzător.+În generalcodul implementează logica ​de bază a jocului Pong și utilizează afișajul OLED și butoanele pentru a permite unui jucător să controleze o paletă și să joace împotriva calculatorului.
  
-În fiecare cadru, ​se verifică dacă trebuie actualizată poziția paletelor. Dacă a trecut suficient timp de la ultima actualizare a paletelor, se calculează noua poziție a paletei CPU pe baza poziției actuale a bilei și se verifică starea butoanelor pentru mișcarea paletei jucătorului. Apoi, se actualizează pozițiile paletei CPU și jucătorului și se desenează paletele pe afișaj.+La final se afiseaza scorul.
  
-La fiecare cadru în care s-a produs o actualizare,​ se actualizează afișajul pentru a reflecta noile poziții ale bilei și paletelor. 
- 
-Funcția drawCourt() este folosită pentru a desena terenul de joc pe afișaj la începutul programului 
 </​note>​ </​note>​
  
-{{:​pm:​prj2023:​alexau:​whatsapp_image_2023-05-21_at_21.05.52_2_.jpeg?​nolink&​300 |}}{{:​pm:​prj2023:​alexau:​whatsapp_image_2023-05-21_at_21.05.52_3_.jpeg?​nolink&​300 |}}+{{:​pm:​prj2023:​alexau:​whatsapp_image_2023-05-28_at_16.39.27.jpeg?​nolink&​300|}}{{ :​pm:​prj2023:​alexau:​whatsapp_image_2023-05-28_at_16.39.27_2_.jpeg?​nolink&​300|}} 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
pm/prj2023/alexau/ponggame.1684694276.txt.gz · Last modified: 2023/05/21 21:37 by cerasela.enus
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