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:30]
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>
-Se începe prin includerea bibliotecilor necesare pentru comunicarea cu afișajul OLED și alte componente. 
  
-Sunt definite constante pentru butoanele de sus și de jos utilizate pentru mișcarea jucătorului.+{{:​pm:​prj2023:​alexau:​pong_game_ec.zip|}} 
 +{{:​pm:​prj2023:​alexau:​video.zip|}}
  
-Sunt definite și inițializate variabilele ​pentru ​poziția bilei, direcția de deplasare a 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.+La începutul codului sunt incluse mai multe biblioteci necesare ​pentru ​controlul afișajului OLEDbutoanelor ​și buzzer-ului.
  
-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 asemeneaafișează un teren de joc gol pentru ​o scurtă perioadă de timp.+Se definesc mai multe constante ​și variabile globale pentru a configura ​și a stoca starea joculuiinclusiv coordonatele bilei, direcțiile de deplasare, scorurile jucătorilor ​și pozițiile paletei ​pentru ​jucătorul și calculatorul controlate ​de cod.
  
-Funcția loop() rulează într-o buclă continuă ​și gestionează mișcarea bilei și a paletelor ​în fiecare cadru.+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.
  
-În fiecare cadru, se verifică dacă trebuie actualizată poziția bilei. Dacă a trecut suficient timp de la ultima actualizare a bilei, se calculează noua poziție a bilei ș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.+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 butoanelor ​și setează variabilele up și down în funcție de starea butoanelor.
  
-Î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ătoruluiApoi, se actualizează pozițiile paletei CPU și jucătorului ​și se desenează paletele ​pe afișaj.+Funcția loop() conține logica principală a jocului și este executată într-un ciclu continuu. ​În fiecare ​iterație a buclei, se verifică dacă a sosit momentul ​de actualizare a poziției bilei sau a paletei ​și se efectuează acțiunile corespunzătoareDe 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.
  
-La fiecare cadru în care s-produs o actualizarese actualizează afișajul pentru a reflecta noile poziții ale bilei și paletelor.+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 pozițiilor paletei. 
 + 
 +Funcția drawCourt() desenează terenul de joc pe afișajul OLEDadică un chenar alb de dimensiune 128x64 pixeli. 
 + 
 +În general, codul 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. 
 + 
 +La final se afiseaza scorul.
  
-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.1684693838.txt.gz · Last modified: 2023/05/21 21:30 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