Prezentarea pe scurt:
Materiale necesare:
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 128×64 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.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.