Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:agrigore:chromedinosaur [2021/06/02 13:52]
mihai.pirvulet [Jurnal]
pm:prj2021:agrigore:chromedinosaur [2021/06/02 15:02] (current)
mihai.pirvulet [Jurnal]
Line 8: Line 8:
 {{:​pm:​prj2021:​agrigore:​1_82d2cg8gpe9cvisaph6rpg.gif?​nolink&​300|}} {{:​pm:​prj2021:​agrigore:​1_82d2cg8gpe9cvisaph6rpg.gif?​nolink&​300|}}
 ===== Descriere generală ===== ===== Descriere generală =====
-Se conectează ​la Arduino UNO un ecran LCD si butoane de up/​down/​left/​rightAcestea vor fi butoanele ​care vor fi folosite la controlul jucatoruluifiind nevoie ​sa sara peste obstacole. ​De asemeneava fi conectat ​si un buzzer ​pentru feedback ​audio in joc si eventual niste LED-uri pentru a marca diverse evenimente speciale in timpul jocului.+Se conecteaza ​la un Arduino UNOun ecran LCD, un buton, un led RGB si un buzzerJocul este similar celui din browser atunci cand iti pica netul. Ai un personaj pe care il controlezi (l-am botezat "​Jimmy"​idk why) si trebuie ​sa sara peste obstacole ​generate randomLa fiecare obstacol sarit cu succes primesti 1 punct. 
 + 
 +LED-ul RGB indica dificultatea:​ verde - usor, galben - mediu, rosu - greu, si se schimba la pragul de 5, respectiv 10 puncte, ca sa mentina jocul interesant. Buzzerul e folosit ​pentru feedback ​atunci cand jucatorul sare sau primeste 1 punct, precum ​si un cantec de incurajare (sau troll) la final de joc. Potentiometrul e folosit la setarea contrastului ecranului LCD. 
 === Schema Bloc === === Schema Bloc ===
-{{:​pm:​prj2021:​agrigore:​dino_diagram.png?​nolink|}}+{{:​pm:​prj2021:​agrigore:​schema_chrome2.png?​nolink|}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 33: Line 36:
 == Versiunea finala - EAGLE == == Versiunea finala - EAGLE ==
  
-{{:​pm:​prj2021:​agrigore:​schema_electrica_chromedinosaur.png?​nolink&​800|}}+{{:​pm:​prj2021:​agrigore:​schema_electrica_chromedinosaur.png?​nolink&​700|}}
  
 Dupa implementarea efectiva a proiectului,​ am adus cateva modificari. Schema EAGLE reprezinta varianta finala, cu led RGB si pinii corecti. Dupa implementarea efectiva a proiectului,​ am adus cateva modificari. Schema EAGLE reprezinta varianta finala, cu led RGB si pinii corecti.
 ===== Software Design ===== ===== Software Design =====
  
 +== Medii de dezvoltare folosite ==
 +  * **Arduino IDE** - pentru programarea placutei Arduino
 +  * **Draw.io** - pentru schema bloc
 +  * **EAGLE & TinkerCAD** - pentru schemele electrice
  
 +== Biblioteci ==
 +  * **LiquidCrystal.h** - pentru interactiunea cu ecranul LCD
 +  * **pitches.h** - pentru a reda cantece pe buzzer
 +
 +== Descrierea Codului ==
 +
 +**Initializari** - inainte de orice functie, sunt cateva variabile care controleaza flow-ul si functionalitatea jocului. Cateva din acestea sunt:
 +  * **tempo** - controleaza viteza cu care se reda melodia la final
 +  * **melody** - notele melodiei folosind **pitches.h**
 +  * **jimmy, jumpingJimmy,​ spike, fence** - sprite-uri pentru grafica LCD-ului
 +  * **chance** - sansa ca la un tick de joc sa se genereze un obstacol
 +  * **gameOver** - variabila de stare care retine daca jocul s-a terminat sau nu
 +  * **tick** - cate milisecunde dureaza un tick de joc (viteza jocului)
 +  * **score** - initializat cu 0, in functie de acesta va creste dificultatea
 +  * pinii pentru fiecare componenta pentru a fi folositi ulterior in cod
 +
 +== Functii ==
 +  * **setup()** - se initializeaza LCD-ul, sprite-urile,​ se seteaza dificultatea initiala pe easy (culoarea LED-ului verde) si se seteaza seedul pentru randomizarea jocului
 +  * **loop()** - logica principala de joc, se verifica daca jocul s-a terminat, caz in care se afiseaza un ecran de game over. Altfel, se randeaza jocul, starea lui fiind retinuta in matricea **ecran[][]**,​ unde 0 = clear, -1 = jucator, orice altceva diferit de 0 obstacole, care sunt de 2 tipuri. De asemenea, se verifica apasarea butonului si executia logicii de sarit.
 +  * **setColorRGB()** - functie ajutatoare pentru a seta valori pe ledul RGB din intervalul 0-255 pentru fiecare channel.
 +  * **renderGame()** - randeaza starea jocului pe LCD
 +  * **permutare()** - genereaza un nou frame al jocului. Mai intai da un random sa vada daca va genera un obstacol sau nu. Am adaugat un check sa nu se genereze prea multe obstacole la rand si jocul sa fie imposibil. Dupa asta, se actualizeaza starea jocului mutand toate elementele cu o pozitie mai la stanga (permutare la stanga, de unde si numele functiei).
 +  * **lose()** - afiseaza ecranul de game over, seteaza culoarea LED-ului pe rosu si reda melodia de game over.
 +  * **updateScore()** - actualizeaza scorul jucatorului daca a sarit cu succes peste un obstacol. De asemenea, creste dificultatea la pragurile de scor 5 si 10, schimband culoarea LED-ului in galben, respectiv rosu, alaturi de cresterea vitezei.
 +  * **jump()** - logica de sarit, cu animatie pe LCD.
 +  * **isObstacle()** - wrapper peste functia de random care returneaza 1 in functie de sansa setata daca trebuie generat un obstacol nou
 +  * **generate()** - returneaza un tip de obstacol random din cele setate (am apucat sa fac doar 2, dar e usor sa se adauge unele noi).
 +  * **playSong()** - functie ce reda o melodie definita folosind **pitches.h**
 +
 +== Observatii ==
 +  * Mi s-a parut destul de greu sa fac jocul "​playable",​ m-am jucat foarte mult cu parametri lui pana sa ajunga intr-o versiune decenta, sa nu fie nici prea plictisitor nici imposibil.
 +  * Un aspect de implementare interesant mi s-a parut animatia de sarit a jucatorului,​ care a fost destul de dificila.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 +Demo:​[[https://​youtu.be/​Rp5U3N3E26o|https://​youtu.be/​Rp5U3N3E26o]]
 +
 +{{:​pm:​prj2021:​agrigore:​chrome_demo.jpg?​nolink&​700|}}
 ===== Concluzii ===== ===== Concluzii =====
  
 +Mie imi place ce a iesit, am stat o gramada sa configurez jocul sa fie cat de cat enjoyable (si usor addictive). Cred ca ar mai putea fi imbunatatita viteza de raspuns la inputul utilizatorului,​ dar overall mi s-a parut un proiect dragut care a rezumat bine ce am invatat la PM semestrul acesta.
 ===== Download ===== ===== Download =====
  
 +{{:​pm:​prj2021:​agrigore:​proiect_chrome_dinosaur.zip|}}
 ===== Jurnal ===== ===== Jurnal =====
  
Line 52: Line 96:
     * 24 Mai - Schema Electrica varianta initiala     * 24 Mai - Schema Electrica varianta initiala
     * 2 Iunie - Schema Electrica varianta finala     * 2 Iunie - Schema Electrica varianta finala
 +    * 2 Iunie - Finalizare pagina wiki, upload cod, poze, demo, bibliografie
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +  * [[https://​www.arduino.cc/​en/​Tutorial/​LibraryExamples/​HelloWorld|https://​www.arduino.cc/​en/​Tutorial/​LibraryExamples/​HelloWorld]]
 +  * [[https://​www.arduino.cc/​en/​Tutorial/​BuiltInExamples/​toneMelody|https://​www.arduino.cc/​en/​Tutorial/​BuiltInExamples/​toneMelody]]
 +  * Laboratoarele de PM
 +
 +
 Pdf: https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​agrigore/​chromedinosaur?​do=export_pdf Pdf: https://​ocw.cs.pub.ro/​courses/​pm/​prj2021/​agrigore/​chromedinosaur?​do=export_pdf
pm/prj2021/agrigore/chromedinosaur.1622631175.txt.gz · Last modified: 2021/06/02 13:52 by mihai.pirvulet
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