Este un joc tip Battleship destinat a fi jucat de doi jucători, fiecare beneficiind de o interfață proprie compusă dintr-un joystick și o matrice LED RGB 8×8. Jucătorii își plasează bărcile și aleg pe rând coordonatele de atac, primind feedback vizual și sonor pentru fiecare acțiune: lovitură, ratare sau câștig. Jocul continuă în ture alternative până când unul dintre jucători distruge toate bărcile adversarului.
Scopul proiectului este de a crea o aplicație embedded interactivă care să îmbine elemente de divertisment cu concepte tehnice din cadrul laboratorului. Ideea a pornit de la dorința de a aduce un joc clasic într-un format fizic, în care logica și afișarea sunt controlate complet prin microcontroler și periferice simple.
Consider că proiectul este util pentru că oferă un mod atractiv de a pune în practică noțiuni precum GPIO, UART, PWM și întreruperi, dezvoltând atât gândirea logică, cât și abilitățile de integrare hardware-software. Modul „Memorie”, în care pozițiile bărcilor sunt afișate doar câteva secunde, adaugă un plus de dificultate și face jocul mai interesant.
Sistemul este compus din mai multe module hardware interconectate prin Arduino Uno: două joystick-uri pentru control, două matrici LED WS2812B pentru afișajul jocului, două LED-uri simple pentru indicarea turei curente și un buzzer pentru feedback sonor.
Joystick-urile trimit comenzi către Arduino, care gestionează logica jocului, actualizează afișajul LED corespunzător fiecărei acțiuni și declanșează semnale sonore prin buzzer.
Pe partea software, Arduino coordonează trecerea între ture, verifică validitatea țintelor și interpretează acțiunile. Modulul „Memorie” este implementat software și controlează afișarea temporară a pozițiilor inițiale ale navelor.
Componentă | Link / Datasheet | Descriere utilizare |
---|---|---|
Arduino Uno | https://sigmanortec.ro/Placa-dezvoltare-UNO-R3-Arduino-Compatibil-ATmega328p-CH340G-cu-bara-pini-p170362384 | Microcontrolerul principal care controlează logica jocului și toate componentele. |
Matrice LED WS2812B 16×16 | Afișează poziția navelor, atacurile și rezultatele în joc. | |
Joystick PS2 | https://sigmanortec.ro/Modul-joystick-doua-axe-XY-p126458908 | Control analog pe 2 axe (X/Y) pentru fiecare jucător. |
Buzzer piezo | https://sigmanortec.ro/Speaker-Buzzer-3-24V-100dB-p136261631 | Oferă feedback sonor în timpul jocului. |
LED simplu | https://ro.mouser.com/ProductDetail/Kingbright/L-934ID | Indică vizual ce jucător are tura activă. |
Rezistor 220Ω | Limitează curentul pentru LED-urile simple. | |
Breadboard + jumper | https://sigmanortec.ro/Breadboard-830-puncte-MB-102-p125923983 | Platformă de conectare pentru prototipare. |
Interfețe și comunicare:
Componentă | Pin Arduino | Tip pin | Justificare |
---|---|---|---|
Matrice LED 1 | D2 | Digital | Intrare de semnal serial WS2812B pentru controlul pixelilor. |
Matrice LED 2 | D3 | Digital | Separare logică pentru a controla independent cele două matrici. |
Joystick 1 – VRx | A2 | Analog | Citire poziție orizontală (X) – control pe axa matricei. |
Joystick 1 – VRy | A3 | Analog | Citire poziție verticală (Y). |
Joystick 1 – SW | D8 | ||
Joystick 2 – VRx | A0 | Analog | Axa X pentru jucătorul 2. |
Joystick 2 – VRy | A1 | Analog | Axa Y pentru jucătorul 2. |
Joystick 2 – SW | D7 | ||
Buzzer | D4 | Digital | Activat/dezactivat prin `digitalWrite` pentru semnal sonor. |
LED 1 | D6 | Digital | Aprins când este rândul jucătorului 1. |
LED 2 | D5 | Digital | Aprins când este rândul jucătorului 2. |
GND / 5V | — | Power | Alimentare comună pentru toate componentele de pe breadboard. |
Am inlocuit cu matrice 16×16,dar folosesc doar 64 de LED-uri.
Mediu de dezvoltare:
Librării și surse 3rd-party:
Variabile globale folosite:
Surse și funcții implementate:
Descrierea jocului
La începutul jocului, fiecărui jucător i se generează aleator un număr de bărci (LED-uri verzi) pe propria matrice WS2812B. Acestea sunt afișate timp de 5 secunde pentru previzualizare, apoi sunt ascunse.
Jucătorii se joacă pe rând, folosind un joystick pentru a controla un cursor albastru. La apăsarea joystick-ului: - dacă poziția atacată conține o barcă, LED-ul devine roșu, iar jucătorul lovește și rămâne la mutare; - dacă poziția este goală, LED-ul devine galben, iar rândul trece la celălalt jucător.
Pe o linie separată (sub zona de joc), fiecare jucător are un contor de vieți reprezentat prin LED-uri: - verzi pentru bărci rămase; - roșii pentru bărci distruse.
Jocul continuă până când unul dintre jucători lovește toate bărcile adversarului – moment în care este declarat câștigăto.
Aplicația funcționează conform așteptărilor, simulând un joc Battleship între doi jucători, folosind două joystick-uri și două matrici WS2812B.
Funcționalități implementate:
Testele realizate în practică au confirmat comportamentul corect și stabil al jocului. Timpul de răspuns al joystick-urilor este bun, afișajul este clar, iar sunetele oferă un feedback intuitiv.
Concluzii
Proiectul a demonstrat o bună integrare a componentelor hardware și software: joystick-uri, LED-uri WS2812B și buzzer. Am reușit să dezvolt un joc Battleship interactiv, stabil și ușor de jucat. Am învățat să gestionez logica de joc, afișajul dinamic și feedback-ul vizual/sonor. Provocările legate de păstrarea stării LED-urilor și sincronizarea afișajului au fost depășite cu succes.
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.