This is an old revision of the document!


Pixel Runner

Introducere

Pixel Runner este un joc de tip runner inspirat de T-Rex Dino din Chrome, realizat pe Arduino cu LCD, LED RGB, buzzer si mai multe butoane, care testeaza reflexele si atentia utilizatorului prin sarituri peste cactusi ce apar aleatoriu. Ideea proiectului a pornit din dorinta de a transpune o experienta clasica de gaming pe un dispozitiv fizic, dezvoltand atat abilitatile de programare embedded, cat si cele de lucru cu hardware-ul. Jocul este util si distractiv, oferind un mod practic de a invata electronica si programarea, fiind totodata o platforma buna pentru experimente educationale sau extinderi creative de tip meniu, niveluri de dificultate si feedback audio-vizual.

Descriere generala

Implementare joc Pixel Runner pe LCD cu Arduino.

Proiectul foloseste o placa Arduino UNO, un afisaj LCD, LED RGB, buzzer si trei butoane pentru control. Utilizatorul poate selecta nivelul de dificultate si controleaza un dinozaur care trebuie sa sara peste obstacole. LED-ul ofera feedback vizual, iar buzzer-ul reda efecte sonore si melodii de joc. Scorul curent si cel maxim sunt afisate pe ecran, iar meniul interactiv permite navigarea usoara. Jocul este atat distractiv, cat si educativ, ajutand la dezvoltarea abilitatilor de programare si lucru cu hardware-ul Arduino.

Hardware Design

Lista de piese:

  • 3 butoane (Start/Saritura, Stanga, Dreapta)
  • Placa de dezvoltare Arduino UNO R3
  • Modul afisaj LCD I2C 16×2
  • Rezistenta 1.0kΩ
  • Buzzer pasiv
  • LED RGB

Schema electrica:

Circuit design:

Hardware:

Software Design

Mediu de dezvoltare :

  • Arduino IDE - Ales pentru dezvoltarea acestui proiect datorita interfetei prietenoase, compatibilitatii extinse cu placile Arduino si ecosistemului bogat de librarii.

Librării şi surse 3rd-party :

  • LiquidCrystal_I2C - Librarie pentru comunicarea cu display-ul LCD prin protocolul I2C, permitand afisarea caracterelor personalizate si a textului pe ecranul 16×2.
  • EEPROM - Librarie standard Arduino pentru accesarea memoriei non-volatile, folosita la stocarea scorurilor maxime ale utilizatorilor.

Algoritmi şi structuri implementate :

  • Masina de stari pentru meniuri - Implementeaza navigarea intre diferite ecrane (meniu principal, setari, instructiuni, selectare nivel) folosind aceleasi butoane.
  • Sistem dinamic de generare a obstacolelor - Algoritmul genereaza obstacole (cactusi) cu frecventa si spatiere adaptata la nivelul de dificultate selectat.
  • Sistem de coliziuni - Detecteaza suprapunerea intre personajul jucatorului si obstacole, cu reactie corespunzatoare (pierdere vieti, sfarsit de joc).
  • Mecanisme de economisire a energiei - Implementare a modului sleep cu detectie de inactivitate si reactivare la apasarea butoanelor.
  • Algoritm de animatie a caracterelor - Sistem de alternare a frame-urilor de animatie pentru personaje (Dino, Ghost, LGhost) in functie de starea jocului.
  • Structura de memorare a scorurilor - Utilizeaza EEPROM pentru a pastra scorurile maxime pentru multiple profiluri de jucatori.

Functii principale de control al fluxului jocului:

  • setup() - Initializeaza hardware-ul, afisajul si variabilele de joc
  • loop() - Controleaza starea jocului, verifica timpi si detecteaza input-ul utilizatorului
  • resetGame() - Reseteaza toate variabilele pentru inceperea unui joc nou

Functii pentru gestionarea interactiunii cu utilizatorul:

  • showMainMenu(), selectPlayer(), selectLevel(), selectCharacter() - Gestiunea meniurilor
  • buttonPressed() - Detecteaza apasarea butoanelor cu debouncing
  • onJumpButtonPress() - Functie de intrerupere pentru butonul de salt

Functii pentru mecanica jocului:

  • Logica de detectie a coliziunilor implementata in bucla principala
  • Controlul saltului personajului cu timing bazat pe millis()
  • Generarea dinamica a obstacolelor cu spatiere si frecventa variabila

Functii de audio si efecte vizuale:

  • playSound(), playFullMelody(), playGameplayMusic() - Sistemul audio
  • setRGB() - Controleaza LED-ul RGB pentru feedback vizual
  • Melodii integrate pentru diferite evenimente din joc

Functii pentru gestionarea memoriei:

  • loadHighScores(), saveHighScore(), forceHighScore() - Manipuleaza datele in EEPROM

Functii pentru economisirea energiei:

  • enterSleepMode(), wakeUp() - Controleaza modul de economisire a energiei

Acest cod integreaza in mod eficient multiple tehnologii (GPIO, I2C, Intreruperi, Timere, PWM) pentru a crea o experienta de joc completa pe o platforma cu resurse limitate, demonstrand implementarea practica a conceptelor studiate in laboratoare.

Cod sursa: Pixel Runner GitHub Repository

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).

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.

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

pm/prj2025/avaduva/mmahmoudi.1747757495.txt.gz · Last modified: 2025/05/20 19:11 by mmahmoudi
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