This shows you the differences between two versions of the page.
pm:prj2024:sseverin:andrei.zipis2406 [2024/05/26 14:01] andrei.zipis2406 [Software Design] |
pm:prj2024:sseverin:andrei.zipis2406 [2024/05/26 23:57] (current) andrei.zipis2406 [Bibliografie/Resurse] |
||
---|---|---|---|
Line 39: | Line 39: | ||
- | Componente Software | + | Display-ul LCD și pinii pentru buton și LED sunt configurați. |
- | Biblioteci Utilizate | + | Se alege aleatoriu un personaj între dinozaur și cavaler, iar caracterul este creat pe display-ul LCD. |
- | 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. | + | Codul verifică dacă jocul s-a terminat. Dacă da, așteaptă apăsarea butonului pentru restart. |
- | Definiții de Pini | + | Starea butonului este citită pentru a detecta dacă jucătorul a apăsat pentru săritura personajului. |
+ | Timpul actual este verificat pentru a determina dacă săritura personajului trebuie să se termine. | ||
+ | Poziția obstacolului este actualizată periodic, iar obstacolul se deplasează spre stânga. | ||
- | În cod sunt definite următoarele pini: | + | Personajul este afișat în poziția corectă (pe sol sau în aer, în funcție de starea de săritură). |
+ | Obstacolul este desenat pe ecran în poziția sa curentă. | ||
- | BUTTON_PIN: Pinul digital conectat la buton, utilizat pentru a sări și a restarta jocul. | + | Dacă obstacolul ajunge la poziția personajului și acesta nu sare, se detectează o coliziune, jocul se termină și se afișează mesajul "CRASH!" împreună cu scorul. |
- | LED_PIN: Pinul digital conectat la LED, utilizat pentru feedback vizual. | + | Dacă obstacolul trece de personaj, scorul crește și, dacă atinge 10 puncte, LED-ul se aprinde. |
+ | Viteza obstacolelor crește după atingerea a 10 puncte pentru a crește dificultatea jocului. | ||
- | Variabile și Constante | + | Dacă jocul s-a terminat, apăsarea butonului va reseta jocul, alegând din nou aleatoriu între dinozaur și cavaler și repornind totul de la zero. |
- | Jocul utilizează mai multe variabile și constante pentru a gestiona starea jocului: | + | ===== Rezultate Obţinute ===== |
- | baseLine: Linia pe LCD unde dinozaurul se deplasează. | + | {{:pm:prj2024:sseverin:yuji.jpg?200|}} |
- | 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 | + | demo: https://www.youtube.com/watch?v=K1f1O7SKSa4 |
- | 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. | + | |
- | ===== Rezultate Obţinute ===== | + | |
- | + | ||
- | <note tip> | + | |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | |
- | </note> | + | |
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | A fost un proiect fun, partea de soft a fost considerabil mai greu de implementat decat partea de hard. | ||
+ | Ma bucur ca il pot folosi mai departe sa ma joc ceva atunci cand raman fara net. | ||
===== Download ===== | ===== Download ===== | ||
Line 107: | Line 76: | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | Nu am intampinat multe probleme in cadrul acestui proiect. Singura chestie a fost ca mi s-a ars led-ul pe care il foloseam pe ultima suta de metri si am fost nevoit sa folosesc led-ul de pe placuta. |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | https://www.tinkercad.com/dashboard |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | https://www.arduino.cc/en/Guide/ArduinoUno |
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||