This shows you the differences between two versions of the page.
pm:prj2023:vstoica:2048 [2023/05/24 01:44] adrian.croitoru2505 [Rezultate Obţinute] |
pm:prj2023:vstoica:2048 [2023/05/28 00:30] (current) adrian.croitoru2505 [Download] |
||
---|---|---|---|
Line 75: | Line 75: | ||
Se folosesc multiple variabile de **debounce** pentru a evita situatia in care aceeasi comanda este efectuata de N ori. (e.g. atunci cand tinem joystick-ul blocat in pozitia RIGHT) | Se folosesc multiple variabile de **debounce** pentru a evita situatia in care aceeasi comanda este efectuata de N ori. (e.g. atunci cand tinem joystick-ul blocat in pozitia RIGHT) | ||
</note> | </note> | ||
+ | |||
+ | === Game Flow === | ||
+ | |||
+ | 1. ''getCurrentCommand()'' -> se obtin valorile celor doua axe OX si OY de la joystick si, in functie de niste threshold-uri, se intoarce comanda curenta (UP, DOWN, LEFT, RIGHT, NOTHING) | ||
+ | |||
+ | 2. ''executeCommand()'' -> se executa comanda obtinuta anterior, doar daca este diferita de cea care a fost executata ultima data (deoarece logica se afla intr-o bucla infinita, daca am tine, spre exemplu, joystick-ul in pozitia LEFT, s-ar executa in continuu mutarea LEFT, ceea ce nu este de dorit). Tot la acest pas, se trigger-uieste un semnal catre **buzzer** (doar cand comanda este valida si posibila), cu o durata de 15ms. | ||
+ | |||
+ | 3. ''evaluateGame()'' -> se evalueaza starea jocului. In functie de marimea grid-ului, se verifica daca pe tabla exista tile-ul castigator. In caz pozitiv, este vorba de un **VICTORY**. | ||
+ | Altfel, se verifica sa mai existe cel putin o mutare posibila. In caz negativ, este **GAME OVER**. | ||
+ | Daca niciuna dintre conditii nu s-a implinit, starea jocului ramane **IN_PROGRESS** si se continua flow-ul curent. | ||
+ | |||
+ | 4. ''render()'' -> se randeaza cadrul curent. Se tine cont de **gameState**, de marimea grid-ului si se randeaza cadrul corespunzator. | ||
+ | |||
+ | 5. ''move(moveType);\\ | ||
+ | createTile();'' -> se efectueaza urmatoarea mutare si se creeaza si adauga un nou tile pe tabela (desigur, in mod **random**). | ||
+ | | ||
+ | <note tip> | ||
+ | Flow-ul prezentat mai sus **se repeta la infinit**, pana jocul se termina, sau pana cand utilizatorul foloseste intreruperea generata de apasarea butonului, caz in care se face intoarcerea la meniul principal. | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | **RESET BUTTON** -> opreste imediat instanta curenta a jocului si face revenirea la meniul principal. Se opreste si reseteaza timer-ul folosit pentru 'elapsedTime'. In meniul principal, acest buton are functia de a selecta dimensiunea dorita a grid-ului si a porni efectiv jocul. | ||
+ | </note> | ||
+ | |||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
+ | <html> | ||
+ | <iframe width="700" height="400" src="https://www.youtube.com/embed/2CVVOYu0S2Q" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> | ||
+ | </html> | ||
{{ :pm:prj2023:vstoica:croitoru_2048_demo0.jpeg?500 |}} | {{ :pm:prj2023:vstoica:croitoru_2048_demo0.jpeg?500 |}} | ||
{{:pm:prj2023:vstoica:croitoru_2048_demo1.jpg?350|}} | {{:pm:prj2023:vstoica:croitoru_2048_demo1.jpg?350|}} | ||
Line 98: | Line 125: | ||
Mi-a facut placere sa lucrez cu modulul **LCD ST7920 128x64**, lucru in urma caruia am generat alte cateva idei personale pe care sa le dezvolt cu ajutorul acestuia. | Mi-a facut placere sa lucrez cu modulul **LCD ST7920 128x64**, lucru in urma caruia am generat alte cateva idei personale pe care sa le dezvolt cu ajutorul acestuia. | ||
</note> | </note> | ||
+ | |||
+ | ===== Download ===== | ||
+ | {{:pm:prj2023:vstoica:2048_sources.zip|}} | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== |