This is an old revision of the document!
Proiectul este insiprat din jocul care apare pe Google Chrome atunci cand nu avem acces la internet si este un endless runner cu un dinosaur care trebuie sa sara peste obstacole. Scopul proiectului este realizarea unui endless runner similar.
Acest sistem include un Arduino UNO, conectat la un ecran LCD, un buton si un LED. Jocul este similar cu cel disponibil în browser atunci când conexiunea la internet este întreruptă. Jucătorul controlează un personaj care trebuie să sară peste obstacole generate aleatoriu. Fiecare obstacol trecut cu succes aduce un punct.
LED indică nivelul de dificultate, dupa un anumit timp acesta se va aprinde si va face jocul mai greu. Un potențiometru este utilizat pentru ajustarea contrastului ecranului LCD.
Exemplu de schemă bloc: http://www.robs-projects.com/mp3proj/newplayer.html
Lista componente:
Schema Electrica:
Componente Software Biblioteci Utilizate
Codul folosește biblioteca LiquidCrystal_I2C pentru a controla display-ul LCD prin interfața I2C. Această bibliotecă facilitează comunicarea și afișarea informațiilor pe LCD. Definiții de Pini
În cod sunt definite următoarele pini:
BUTTON_PIN: Pinul digital conectat la buton, utilizat pentru a sări și a restarta jocul. LED_PIN: Pinul digital conectat la LED, utilizat pentru feedback vizual.
Variabile și Constante
Jocul utilizează mai multe variabile și constante pentru a gestiona starea jocului:
baseLine: Linia pe LCD unde dinozaurul se deplasează. jumpLine: Linia pe LCD unde dinozaurul sare. obstacleDelay: Întârzierea inițială pentru mișcarea obstacolelor, determinând viteza lor. obstaclePosition: Poziția curentă a obstacolului pe ecran. score: Punctajul acumulat de jucător. obstacleChar: Caracterul curent utilizat pentru a reprezenta obstacolul.
Funcții Principale setup()
Funcția setup() inițializează componentele hardware și software necesare pentru joc. Aceasta inițializează display-ul LCD, setează pinii pentru buton și LED și configurează starea inițială a jocului apelând funcția initializeGame(). loop()
Funcția loop() reprezintă bucla principală a jocului. Aceasta verifică dacă jocul s-a terminat și așteaptă restartarea în caz afirmativ. Funcția citește starea butonului pentru a determina dacă jucătorul dorește să sară, actualizează poziția obstacolelor la intervale regulate și redesenează ecranul pentru a reflecta starea curentă a jocului. De asemenea, funcția verifică coliziunile dintre dinozaur și obstacole. initializeGame()
Funcția initializeGame() resetează variabilele și starea jocului la început sau după un restart. Aceasta curăță display-ul LCD, resetează variabilele de stare (isJumping, gameOver, obstaclePosition, score), resetează temporizările (lastObstacleTime, obstacleDelay) și oprește LED-ul. startJump()
Funcția startJump(unsigned long currentMillis) inițiază săritura dinozaurului. Aceasta setează variabila isJumping la true și calculează timpul când săritura se va termina (jumpEndTime). endJump()
Funcția endJump() finalizează săritura dinozaurului. Aceasta setează variabila isJumping la false și șterge dinozaurul de pe linia de sărit. moveObstacle()
Funcția moveObstacle(unsigned long currentMillis) actualizează poziția obstacolului. Aceasta șterge obstacolul de la poziția curentă, decrementează poziția obstacolului și resetează poziția acestuia atunci când iese din ecran, actualizând punctajul. De asemenea, alege un caracter aleatoriu pentru noul obstacol și ajustează viteza obstacolelor în funcție de punctaj. drawScreen()
Funcția drawScreen() desenează pe ecran starea curentă a jocului. Aceasta șterge pozițiile anterioare ale dinozaurului și obstacolului și desenează dinozaurul în poziția corectă, fie pe linia de sărit, fie pe linia de bază. Obstacolul este desenat la poziția sa curentă. checkCollision()
Funcția checkCollision() verifică dacă dinozaurul a colizionat cu un obstacol. Dacă obstacolul este la poziția dinozaurului și acesta nu sare, funcția afișează un mesaj de coliziune și punctajul final, și setează variabila gameOver la true. checkForRestart()
Funcția checkForRestart() verifică dacă butonul este apăsat pentru a restarta jocul. Dacă butonul este apăsat, funcția așteaptă eliberarea butonului și apoi apelează initializeGame() pentru a restarta jocul.
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.