This shows you the differences between two versions of the page.
pm:prj2023:alexau:ponggame [2023/05/05 18:30] cerasela.enus created |
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_ec.png?nolink |}} | |
- | {{:pm:prj2023:alexau:thinkercad.png?nolink |}} | + | |
===== Software Design ===== | ===== Software Design ===== | ||
- | |||
<note tip> | <note tip> | ||
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | {{:pm:prj2023:alexau:pong_game_ec.zip|}} |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | {{:pm:prj2023:alexau:video.zip|}} |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | 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. | ||
+ | |||
+ | 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. | ||
+ | |||
+ | 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. | ||
+ | |||
+ | 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ă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 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 drawCourt() desenează terenul de joc pe afișajul OLED, adică 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. | ||
</note> | </note> | ||
+ | |||
+ | {{: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 ===== |