Differences

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

Link to this comparison view

pm:prj2022:ionuto:cyclone_game [2022/05/27 22:44]
cezar_dan.mandruta [Hardware Design]
pm:prj2022:ionuto:cyclone_game [2022/05/28 00:04] (current)
cezar_dan.mandruta [Download]
Line 4: Line 4:
 ===== Introducere ===== ===== Introducere =====
  
-{{ :​pm:​prj2022:​ionuto:​cyclone.png?​200 |}}\\+{{ :​pm:​prj2022:​ionuto:​cyclone.png?​300 |}}\\
  
 Proiectul reprezintă o interpretare proprie a unui joc de tip Cyclone, unul din cele mai populare și îndrăgite jocuri arcade din lume. Scopul proiectului este entertainment-ul,​ însă poate fi folosit și pentru a face profit, păcălindu-ți prietenii să joace pe bani :P. Proiectul reprezintă o interpretare proprie a unui joc de tip Cyclone, unul din cele mai populare și îndrăgite jocuri arcade din lume. Scopul proiectului este entertainment-ul,​ însă poate fi folosit și pentru a face profit, păcălindu-ți prietenii să joace pe bani :P.
Line 10: Line 10:
  ===== Descriere generală =====  ===== Descriere generală =====
  
-{{ :​pm:​prj2022:​ionuto:​diagrams.drawio.png |}}+{{ :​pm:​prj2022:​ionuto:​diagr_updt.png |}}
  
-Proiectul constă într-un joc arcade în care o lumină se plimbă pe un inel, iar jucatorul trebuie să o oprească atunci când ajunge intr-un interval dat. Jocul are patru nivele. Cu cât jucătorul avansează, cu atât dificultatea crește (intervalul devine mai mic iar viteza cu care se deplasează lumina crește). Un buzzer va scoate sunete diferite atunci cand jucatorul nimerește și atunci când ratează ținta. Nivelul la care se află jucătorul va fi prezentat prin intermediul unei fâșii cu 8 led-uri. Jucătorul va putea opri lumina prin apăsarea unui buton de tip arcade.+Proiectul constă într-un joc arcade în care o lumină se plimbă pe un inel, iar jucatorul trebuie să o oprească atunci când ajunge intr-un interval dat. Jocul are opt nivele. Cu cât jucătorul avansează, cu atât dificultatea crește (intervalul devine mai mic iar viteza cu care se deplasează lumina crește). Un buzzer va scoate sunete diferite atunci cand jucatorul nimerește și atunci când ratează ținta. Nivelul la care se află jucătorul va fi prezentat prin intermediul unei fâșii cu 8 led-uri. Jucătorul va putea opri lumina prin apăsarea unui buton de tip arcade.
 ===== Hardware Design ===== ===== Hardware Design =====
   * Arduino Mega board   * Arduino Mega board
Line 22: Line 22:
   * rezistente / tranzistori / fire / breadboard etc.   * rezistente / tranzistori / fire / breadboard etc.
  
-{{ :​pm:​prj2022:​ionuto:​breadboard.png |}}+{{ :​pm:​prj2022:​ionuto:​breadboard.png?800 |}}
  
-{{ :​pm:​prj2022:​ionuto:​schematic_horizontal.png |}}+{{ :​pm:​prj2022:​ionuto:​schematic_horizontal.png?800 |}}
 ===== Software Design ===== ===== Software Design =====
  
  
-<note tip> +Am scris codul în IDE-ul **Arduino**. \\ 
-Descrierea codului aplicaţiei (firmware):​ +M-am folosit de biblioteca ​**FastLED.h** pentru controlul fasiilor de led-uri cu neopixeli WS2812 ​(atat stick-ul de 8 LED-uri cat si inelul de 48 de LED-uri).
-  ​mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) +
-  librării şi surse 3rd-party (e.g. Procyon AVRlib) +
-  ​algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  ​* (etapa 3surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+Pentru a permite modificarea facila a parametrilor codului, majoritatea variabilelor au fost definite la inceput ca si macro-uri.
  
-<note tip> +Proiectul functioneaza ca un automat finit de stari, lucru care se poate observa usor din functia **loop()**. Daca mai tineti minte de la PL (sau LFA mai recent), jocul are un comportament diferit in functie de starea in care se afla.
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
-===== Concluzii =====+  * **start_game()**
  
-===== Download =====+Cand jocul este la inceput, acesta asteapta ca utilizatorul sa apese butonul pentru a incepe primul nivel. Atata timp cat utilizatorul nu apasa butonul, atat pe inelul de LED-uri cat si pe stick se afiseaza un joc de lumini de tip rainbow swipe (se misca luminile in culorile curcubeului).
  
-<note warning>​ +  * **play_round()**
-O arhivă ​(sau mai multe dacă este cazulcu 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 Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +Functia aceasta este apelata mereu cand jocul este in desfasurareIn functie de nivelul la care se afla jucatorul, viteza luminii rosii si marimea target-ului variaza (in functie ​de variabila globala ​**game_state**). Am folosit vectori de date pentru a permite folosirea unei singure functii de **play_round()**, in loc de una pentru fiecare nivel.
-</​note>​+
  
 +  * **move_light()**
 +
 +Functia aceasta este apelata din functia **play_round** si realizeaza miscarea luminii rosii cu un pas pe cerc.
 +
 +  * **pulse_three_times()**
 +
 +Atunci cand jucatorul nimereste sau rateaza tinta, un joc de lumini ce consta in 3 pulsuri de lumina va fi afisat pe inel si un sunet va fi produs de catre buzzer. Daca jucatorul nimereste, lumina va fi verde, iar tonul sunetului va fi unul acut. Daca jucatorul rateaza, lumina va fi rosie, iar tonul va fi unul grav. La fel ca si mai inainte, in loc sa fac 2 functii am scris doar una, iar tonul dat de buzzer si lumina culorilor de pe inel sunt primite ca si parametrii.
 +
 +  * **win()** si **lose()**
 +
 +Simuleaza starea in care jucatorul nimereste/​rateaza tinta. Apeleaza **pulse_three_times()** cu parametrii corespunzatori.
 +
 +
 +  * **win_all()**
 +
 +Cand jucatorul termina toate nivelele se apeleaza aceasta functie.
 +
 +  * **BUTON**
 +
 +De fiecare data cand jocul asteapta input de la utilizator, led-ul butonului clipeste. Acest efect l-am obtinut folosind o intrerupere cu timer pentru LED.
 +
 +
 +===== Concluzii =====
 +
 +Desi stiam ca imi place sa lucrez cu Arduino avand experienta dinainte, nu m-am asteptat sa fie asa addictive proiectul. Am preferat sa lucrez la el puternic in loc sa fac alte teme (la SO si ASC m(). Si jocul in sine e super fun, chiar m-as juca ca sa treaca timpul si sa nu ma simt asa de prost cand procrastinez.
 +
 +{{ :​pm:​prj2022:​ionuto:​done_box.png?​600 |}}
 +===== Download =====
 +
 +{{:​pm:​prj2022:​ionuto:​mandruta_cezar-dan_334cb.zip|}}
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +N-am tinut jurnal sincer si de acum nu are rost sa fabulez pe aici. Am cautat piesele pe Amazon, apoi intr-zi de munca puternica am terminat partea de hardware. S-au mai rupt si piesele de cateva ori, stie laborantul ca am mers sa lipesc de 3 ori. Proiectul era gata de vreo 2 saptamani dar de abia azi, 27.05.2022, i-am facut si o cutie cocheta dupa cum se poate observa din poza de mai sus.
-Puteți avea și secțiune ​de jurnal în care să poată urmări asistentul ​de proiect progresul proiectului. +
-</​note>​+
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
- +[[https://​www.hackster.io/​mircemk/​diy-arduino-cyclone-game-with-ws2812b-led-ring-738c58]] 
-<​note>​ +[[https://​fastled.io/​docs/​3.1/​index.html]]
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+
-</note>+
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
- 
pm/prj2022/ionuto/cyclone_game.1653680669.txt.gz · Last modified: 2022/05/27 22:44 by cezar_dan.mandruta
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