Differences

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

Link to this comparison view

pm:prj2025:rnedelcu:ioan_alexandru.popa [2025/05/28 15:50]
ioan_alexandru.popa
pm:prj2025:rnedelcu:ioan_alexandru.popa [2025/05/28 17:05] (current)
ioan_alexandru.popa
Line 104: Line 104:
     * 4 vieți     * 4 vieți
     * Controlezi o mașinuță ce trebuie să se ferească de zidurile de pe marginile drumului     * Controlezi o mașinuță ce trebuie să se ferească de zidurile de pe marginile drumului
-      * Stânga-dreapta, iar înainte mașinuța ​ia viteză+      * Stânga-dreapta 
 +    * Mașinuța ​merge înainte la un interval de timp sau la joystick înainte
     * Zidurile se schimbă periodic     * Zidurile se schimbă periodic
 +
 +Meniul principal este, de asemenea implementat ca script JavaScript.
  
 ==== Interfața JavaScript ==== ==== Interfața JavaScript ====
  
-Jocurile trebuie să implementeze următoarele funcții, ce se apelează în cardul unor evenimente relevante în joc.+Jocurile au acces la 2 ecrane virtuale, cu celule indexate de la 0: 
 +  * Principal de 10x20 (pentru acțiunea jocului) 
 +  * Secundar de 4x4 (pentru afișarea unor detalii suplimentare,​ ex. numărul de vieți) 
 + 
 +Ecranele au 3 culori: 
 +  * 0 = stins 
 +  * 1 = aprins (negru) 
 +  * 2 = parțial aprins (gri) 
 + 
 +Există un sistem de tick-uri care se execută după fiecare ''​TICK_TIME''​ (500) milisecunde 
 + 
 +Runtime-ul implementează următoarele funcții: 
 +  * ''​brickVibrate(intensity:​ number, duration: number)''​ - Motorul cu vibrații va vibra la intensitatea ''​intensity''​ (număr între 0 și 255; 255 = maxim, 180 = valoare intermediară bună) timp de ''​duration''​ milisecunde. 
 +  * ''​brickMainDraw(x:​ number, y: number, color: number)''​ - desenează pe ecranul principal la celula specificată (linia ''​y'',​ coloana ''​x''​) culoarea specificată 
 +  * ''​brickSecondaryDraw(x:​ number, y: number, color: number)''​ - desenează pe ecranul principal la celula specificată (linia ''​y'',​ coloana ''​x''​) culoarea specificată 
 +  * ''​brickTickReset()''​ - nu se va mai executa tick-ul următor, se va executa peste ''​TICK_TIME''​ milisecunde (dacă nu se mai apelează ''​brickTickReset()''​ încă o dată până atunci) 
 +  * ''​brickGameOver(x:​ number, y: number, noRestart: boolean)''​ - inițializează ecranul de game over cu „X”-ul în punctul specificat (linia ''​y'',​ coloana ''​x''​) și vibrație maximă. După un timp se ve reporni jocul în același context (variabilele globale sunt păstrate, dar se va rula ''​handleInit()''​) dacă ''​noRestart''​ e ''​false'',​ altfel se va reseta consola la meniul principal. 
 +  * ''​brickLoad(gamePath:​ string)''​ - încarcă jocul din calea specificată din sistemul de fișiere LittelFS încărcat pe plăcuță, resetând contextul JavaScript. Un API „intern”,​ nu e intenționată folosirea lui în jocuri, doar în meniul de start. 
 + 
 +Jocurile trebuie să implementeze următoarele funcții, ce se apelează în cardul unor evenimente relevante în joc
 + 
 +  * ''​handleInit()''​ - se apelează inițializarea jocului la pornire sau după o pierdere de viață prin ''​brickGameOver(x,​ y, false)''​. Aici se inițializează variabilele ce indică starea vieții curente. Inițializarea numărului de vieți sau alte chestii ce se păstrează de-a lungul vieților se face direct în corpul scriptului. 
 +  * ''​handleTick()''​ - se apelează la fiecare tick - bun pentru aplicarea mișcărilor automate etc. 
 +  * ''​handleAction()''​ - se apelează la apăsarea butonului acțiune (cel mai din dreapta). 
 +  * ''​handleUp()''​ - se apelează la deplasarea în sus a joystick-ului. 
 +  * ''​handleLeft()''​ - se apelează la deplasarea în stânga a joystick-ului. 
 +  * ''​handleRight()''​ - se apelează la deplasarea în dreapta a joystick-ului. 
 +  * ''​handleDown()''​ - se apelează la deplasarea în jos a joystick-ului. 
 + 
 +Aceste funcții nu trebuie să dureze mult, doar cât trebuie pentru a administra evenimentul în cauză. 
 +Pentru a încuraja bunele practici, există un watchdog ce nu poate fi resetat de codul Javascript, doar de alte timere interne, care să reseteze consola dacă JavaScriptul durează prea mult.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 127: Line 160:
 {{:​pm:​prj2025:​rnedelcu:​ioan_alexandru.popa:​hardwarebun1.jpg?​400|}} {{:​pm:​prj2025:​rnedelcu:​ioan_alexandru.popa:​hardwarebun1.jpg?​400|}}
 {{:​pm:​prj2025:​rnedelcu:​ioan_alexandru.popa:​hardwarebun2.jpg?​400|}} {{:​pm:​prj2025:​rnedelcu:​ioan_alexandru.popa:​hardwarebun2.jpg?​400|}}
 +
 +==== Software ====
 +{{:​pm:​prj2025:​rnedelcu:​ioan_alexandru.popa:​20250528_165839.jpg?​400|}}
 +{{:​pm:​prj2025:​rnedelcu:​ioan_alexandru.popa:​20250528_165833.jpg?​400|}}
 +{{:​pm:​prj2025:​rnedelcu:​ioan_alexandru.popa:​20250528_165851.jpg?​400|}}
 +{{:​pm:​prj2025:​rnedelcu:​ioan_alexandru.popa:​20250528_165854.jpg?​400|}}
 +{{:​pm:​prj2025:​rnedelcu:​ioan_alexandru.popa:​20250528_165921.jpg?​400|}}
 ===== Concluzii ===== ===== Concluzii =====
  
pm/prj2025/rnedelcu/ioan_alexandru.popa.1748436609.txt.gz · Last modified: 2025/05/28 15:50 by ioan_alexandru.popa
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