Differences

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

Link to this comparison view

egc:teme:2025:01 [2025/10/26 18:30]
robert.caragicu Adaugat tabel la blocuri
egc:teme:2025:01 [2025/10/26 22:43] (current)
andrei.voicu2409 [Funcționalități avansate (75p)]
Line 1: Line 1:
-<​hidden>​ +===== Tema 1 - Arcade Machine ​=====
-===== Tema 1 - Joc cu nave proiectate de jucători ​=====+
  
   * **Responsabili:​** Robert Caragicu, Cristian Lambru, Andrei Voicu, Ioana Chiper, Vlad Novetschi   * **Responsabili:​** Robert Caragicu, Cristian Lambru, Andrei Voicu, Ioana Chiper, Vlad Novetschi
Line 9: Line 8:
  
  
-În cadrul acestei teme veți avea de realizat un editor de construcție a unei nave spațiale, pe care o veți utiliza în cadrul unul joc ales de voi dintr-un set total de 6 jocuri descrise mai jos.+În cadrul acestei teme veți avea de realizat un editor de construcție a unei nave spațiale, pe care o veți utiliza în cadrul unul joc ales de voi din cele 3 tipuri ​de joc (pong, breakout și space invaders).
  
 ====== Editor nava spațială ====== ====== Editor nava spațială ======
- 
  
 La începutul jocului jucătorul va proiecta propria navă folosind un editor. Editorul va arată în felul următor. La începutul jocului jucătorul va proiecta propria navă folosind un editor. Editorul va arată în felul următor.
  
-PLACEMENT EDITOR IMAGE+{{ :​egc:​teme:​2025:​editor_tema_1.png?​500 |}}
  
-Nava este formată din blocuri de 1x1 așezate pe o grilă. În partea stângă a editorului se află  celule ordonate vertical, ​cate una pentru fiecare tip de bloc. Grila în care jucătorul proiectează nava se află în partea din dreapta jos a ferestrei și este de dimensiuni minim 5x5. În dreapta sus se află o bară orizontală în care se află pătrate verzi ce reprezintă numărul de blocuri pe care îl mai poate așeza jucătorul pe grila pentru construcția navei spațiale (nava are maxim 10 blocuri). În colțul din dreapta sus se află butonul pentru începerea jocului (numit buton start).+Nava este formată din blocuri de 1x1 așezate pe o grilă. În partea stângă a editorului se află  celule ordonate vertical, ​câte una pentru fiecare tip de bloc. Grila în care jucătorul proiectează nava se află în partea din dreapta jos a ferestrei și este de dimensiuni minim 5x5. În dreapta sus se află o bară orizontală în care se află pătrate verzi ce reprezintă numărul de blocuri pe care îl mai poate așeza jucătorul pe grila pentru construcția navei spațiale (nava are maxim 10 blocuri). În colțul din dreapta sus se află butonul pentru începerea jocului (numit buton start).
  
  
 ====== Descriere blocuri ====== ====== Descriere blocuri ======
  
-Fiecare bloc este de dimensiuni 1x1 dar conțin elemente decorative care pot să fie în afara blocului.+Fiecare bloc este de dimensiuni 1x1 dar conțin elemente decorative care pot să fie în afara blocului. ​**Orice bloc care nu este folosit în jocul pe care alegeți să îl implementați poate să lipsească din editor.**
  
-| Bloc solid | Un pătrat simplu de dimensiuni 1x1 | +| Bloc solid | {{ :​egc:​teme:​2025:​bloc_solid_tema_1.png?​50 }} | Un pătrat simplu de dimensiuni 1x1 | 
-| Tun | Este de dimeniune 3 linii x 1 coloană. În partea de jos se află un pătrat și un semicerc. În partea de sus se află țeava tunului de dimensiune 2 linii x 1 coloană. | +| Tun | {{ :​egc:​teme:​2025:​bloc_tun_tema_1.png?​50 }} | Este de dimeniune 3 linii x 1 coloană. În partea de jos se află un pătrat și un semicerc. În partea de sus se află țeava tunului de dimensiune 2 linii x 1 coloană. | 
-| Motor | Un pătrat de 1x1 care are în partea de jos o geometrie similară cu cea din imagine | +| Motor | {{ :​egc:​teme:​2025:​bloc_motor_tema_1.png?​50 }} | Un pătrat de 1x1 care are în partea de jos o geometrie similară cu cea din imagine | 
-Padelă ​| Un pătrat 1x1 care are în partea de sus un semicerc de dimensiuni 3 coloane x 1 linie |+Bumper | {{ :​egc:​teme:​2025:​bloc_bumper_tema_1.png?​50 }}| Un pătrat 1x1 care are în partea de sus un semicerc de dimensiuni 3 coloane x 1 linie |
  
- +//Culorile vârfurilor modelelor 2D sunt la alegerea voastră cât timp elementele distincte (pătrate, flăcări, arcuri de cerc, țeava tun) din fiecare model au o culoare diferită.//
-**Culorile vârfurilor modelelor 2D sunt la alegerea voastră cât timp elementele distincte (pătrate, flăcări, arcuri de cerc, țeava tun) din fiecare model au o culoare diferită.**+
  
  
Line 37: Line 34:
  
 Pentru a asigura corectitudinea navei și pentru a nu suprapune elementele decorative editorul trebuie să verifice următoarele constrângeri înainte de a porni jocul: Pentru a asigura corectitudinea navei și pentru a nu suprapune elementele decorative editorul trebuie să verifice următoarele constrângeri înainte de a porni jocul:
 +
 +| {{ :​egc:​teme:​2025:​constrangere_conex_tema_1.png?​200 }} | {{ :​egc:​teme:​2025:​constrangere_bumper_tema_1.png?​100 }} |
 +| {{ :​egc:​teme:​2025:​constrangere_bumper_tun_tema_1.png?​100 }} | {{ :​egc:​teme:​2025:​constrangere_motor_tema_1.png?​100 }} | {{ :​egc:​teme:​2025:​constrangere_tun_tema_1.png?​100 }} |
  
   * Vehiculul trebuie să aibă cel puțin 1 bloc.   * Vehiculul trebuie să aibă cel puțin 1 bloc.
Line 42: Line 42:
   * Nu se poate plasa niciun alt bloc pe poziții mai jos de blocul de motor.   * Nu se poate plasa niciun alt bloc pe poziții mai jos de blocul de motor.
   * Nu se poate plasa niciun alt bloc pe poziții mai sus de tun.   * Nu se poate plasa niciun alt bloc pe poziții mai sus de tun.
-  * Nu se poate plasa niciun alt bloc pe poziții mai sus de locul de padelă, pe 3 coloane de celule. +  * Nu se poate plasa niciun alt bloc pe poziții mai sus de locul de bumper, pe 3 coloane de celule. 
-  * Nu se poate plasa un tun în stânga sau în dreapta blocului ​padelă ​la o distanță de 1 bloc.+  * Nu se poate plasa un tun în stânga sau în dreapta blocului ​bumper ​la o distanță de 1 bloc
 +  * Nu se pot plasa două blocuri bumper vecine.
   * Vehiculul nu poate fi compus din mai mult de 10 blocuri.   * Vehiculul nu poate fi compus din mai mult de 10 blocuri.
- 
  
 ====== Interacțiune cu editorul ====== ====== Interacțiune cu editorul ======
  
-PLACEMENT GIF DRAG AND DROP+{{ :​egc:​teme:​2025:​drag_and_drop_tema_1.gif?​500 |}}
  
-Acțiunea de construcție a vehiculului se realizeaza printr-un proces de drag&​drop după urmatorii pasi:  +Acțiunea de construcție a vehiculului se realizeaza printr-un proces de drag&​drop după următorii pași
-  * Utilizatorul apasă butonul stanga de la mouse pe una dintre cele 4 celule din panoul stâng al editorului. ​In acel moment, ​atasat ​de mouse, se considera ca este blocul desemnat de celulă în care a apăsat butonul ​stanga+  * Utilizatorul apasă butonul stanga de la mouse pe una dintre cele 4 celule din panoul stâng al editorului. ​În acel moment, ​atașat ​de mouse, se consideră că este blocul desemnat de celulă în care a apăsat butonul ​stânga
-  * Pe toata perioada în care utilizatorul ​tine apăsat butonul ​stanga ​de la mouse, de la momentul primei ​apasari ​în interiorul unei celule, se afișează la poziția cursorului blocul desemnat de celulă în care s-a dat stanga. Acest lucru se întâmplă și în momentul în care cursorul își schimba ​poziția pe ecran. +  * Pe toată ​perioada în care utilizatorul ​ține apăsat butonul ​stânga ​de la mouse, de la momentul primei ​apăsări ​în interiorul unei celule, se afișează la poziția cursorului blocul desemnat de celulă în care s-a dat stânga. Acest lucru se întâmplă și în momentul în care cursorul își schimbă ​poziția pe ecran. 
-  * În momentul în care nu se mai tine apăsat butonul ​stanga ​de la mouse, se pot intampla ​2 scenarii:+  * În momentul în care nu se mai ține apăsat butonul ​stânga ​de la mouse, se pot întâmpla ​2 scenarii:
     * În situația în care cursorul este în interiorul unei celule din grila 2D, se introduce în acel grid blocul desemnat.     * În situația în care cursorul este în interiorul unei celule din grila 2D, se introduce în acel grid blocul desemnat.
-    * În situația în care cursorul nu se afla în interiorul unei celule din grila 2D, blocul desemnat încetează ​sa se mai afișează la poziția cursorului.+    * În situația în care cursorul nu se află în interiorul unei celule din grila 2D, blocul desemnat încetează ​să se mai afișeze la poziția cursorului.
  
-În momentul în care se apasă butonul dreapta de la mouse cand cursorul se afla intr-una din celulele grilei care conține deja un bloc, acel bloc este scos din celulă și nu se mai afișează.+În momentul în care se apasă butonul dreapta de la mouse când cursorul se află într-una din celulele grilei care conține deja un bloc, acel bloc este scos din celulă și nu se mai afișează.
  
-Butonul de start va avea culoarea verde cât timp vehiculul proiectat respectă constrângerile,​ roșu altfel. +Butonul de start va avea culoarea verde cât timp vehiculul proiectat respectă constrângerile,​ roșu altfel. Pentru a începe jocul, jucătorul dă un click pe butonul de start verde. Nava proiectată este copiată și folosită în joc.
-Pentru a începe jocul, jucătorul dă un click pe butonul de start verde. Nava proiectată este copiată și folosită în joc.+
  
  
 ====== PONG ====== ====== PONG ======
  
-PLACEMENT GIF PONG+{{ :​egc:​teme:​2025:​pong_tema_1.gif |}} 
 +//(Exemplu orientativ)//​
  
-Jocul //Pong// este unul dintre cele mai simple și iconice jocuri video din istorie, reprezentând o simulare minimalistă a unui meci de tenis de masă. Scopul jocului este ca fiecare jucător să controleze o padelă (o bară verticală) care se deplasează pe axa verticală, pentru a respinge o bilă care se deplasează continuu între cele două părți ale ecranului. Fiecare jucător încearcă să împiedice mingea să treacă de propria ​padelă, iar când acest lucru se întâmplă,​ adversarul primește un punct. Câștigă jucătorul care ajunge primul la un număr prestabilit de puncte.+Jocul //Pong// este unul dintre cele mai simple și iconice jocuri video din istorie, reprezentând o simulare minimalistă a unui meci de tenis de masă. Scopul jocului este ca fiecare jucător să controleze o paletă (o bară verticală) care se deplasează pe axa verticală, pentru a respinge o bilă care se deplasează continuu între cele două părți ale ecranului. Fiecare jucător încearcă să împiedice mingea să treacă de propria ​paletă, iar când acest lucru se întâmplă,​ adversarul primește un punct. Câștigă jucătorul care ajunge primul la un număr prestabilit de puncte.
  
-Scopul principal al jocului este ca fiecare jucător să evite trecerea mingii dincolo de propria ​padelă și, simultan, să trimită mingea în așa fel încât adversarul să nu o poată returna.+Scopul principal al jocului este ca fiecare jucător să evite trecerea mingii dincolo de propria ​paletă și, simultan, să trimită mingea în așa fel încât adversarul să nu o poată returna.
 Fiecare dată când mingea trece de un jucător, adversarul primește un punct. Jocul se reia imediat, mingea fiind resetată în centrul ecranului și pornind în direcția jucătorului care a pierdut punctul anterior. Fiecare dată când mingea trece de un jucător, adversarul primește un punct. Jocul se reia imediat, mingea fiind resetată în centrul ecranului și pornind în direcția jucătorului care a pierdut punctul anterior.
  
Line 78: Line 78:
 ===== Cerințe de bază ===== ===== Cerințe de bază =====
  
 +**Desenare scenă**: Două palete, bila, linii de delimiatare ale terenului, o linie punctată în mijlocul tablei și scorul jucătorilor (poate fi desenată fie ca o serie de bile fie ca text pe ecran)
  
-**Desenare scenă (30p)**: Două padelebila, linii de delimiatare ale terenului, o linie punctată în mijlocul tablei ​și scorul jucătorilor (poate fi desenată fie ca o serie de bile fie ca text pe ecran)+**Control paletă**: Un jucător folosește tastele W și Scelălat foloseste tastele ↑ și ↓. Paletele nu pot depăși marginile superioare și inferioare ale ecranului.
  
-**Control padelă (10p)**: Un jucător folosește tastele W și S, celălat foloseste tastele ↑ și ↓. Padelele nu pot depăși marginile superioare și inferioare ale ecranului.+**Coliziuni**: Bila este un cerc și blocurile paletelor sunt AABB(axis-aligned bounding boxes). La contactul bilei cu marginile stânga ​și dreapta ale hărții un gol este înregistrat. La contactul bilei cu marginile sus și jos componenta verticală a vitezei își schimbă semnul, simulând o reflexie perfect elastică.
  
-**Coliziuni (25p)**: Bila este un cerc și blocurile padelelor sunt AABB(axis-aligned bounding boxes). La contactul bilei cu marginile stânga și dreapta ale hărții un gol este înregistrat. La contactul bilei cu marginile sus și jos componenta verticală a vitezei își schimbă semnul, simulând o reflexie perfect elastică. +La contact cu paletele ​bila are direcția de mișcare modificată în funcție de //punctul de contact//, pentru a permite jucătorilor să ghideze bila în direcția dorită. Matematic, putem calula astfel: 
- +  - unghi = (y_bila - y_paletă) / (h_paletă ​/ 2)
-La contact cu padelele ​bila are direcția de mișcare modificată în funcție de //punctul de contact//, pentru a permite jucătorilor să ghideze bila în direcția dorită. Matematic, putem calula astfel: +
-  - unghi = (y_bila - y_padela) / (h_padela ​/ 2)+
   - v_x_bila = viteza_bila * cos(unghi)   - v_x_bila = viteza_bila * cos(unghi)
   - v_y_bila = viteza_bila * sin(unghi)   - v_y_bila = viteza_bila * sin(unghi)
  
-**Resetarea bilei (15p)**: Atunci când un gol este detectat, se incrementează scorul jucătorului care a dat gol, mingea este resetată în centru și viteza ei este inversată (pentru a porni spre jucătorul care a dat gol).+**Resetarea bilei**: Atunci când un gol este detectat, se incrementează scorul jucătorului care a dat gol, mingea este resetată în centru și viteza ei este inversată (pentru a porni spre jucătorul care a dat gol).
  
 ===== Cerințe avansate ===== ===== Cerințe avansate =====
  
-**Creșterea vitezei bilei (10p)** la fiecare ricoșeu a bilei+**Creșterea vitezei bilei**la fiecare ricoșeu a bilei de o componentă de tip bumperBumperul este aproximat cu un dreptunghi.
- +
-**Animație padelă (15p)** la coliziune cu bila. Animația este una de scalare înainte-înapoi pe verticală și/sau orizontală timp de o secundă+
- +
-**Utilizarea tunului (30p)**: Tunurile pot fi montate la padele (//​Atenție,​ tunurile vor fi orientate pe orizontală.//​). Fiecare jucător are o tastă dedicată pentru a trage din fiecare tun de-al său un proiectilTragerea are un timp de reîncărcare de cinci secunde. Proiectilele au rolul de a lovi padela adversarului. O paletă lovită de proiectile nu se poate mișca și nu poate trage timp de o secundă. Se va desena ​un dreptunghi ​colorat peste padela afectată pentru a indica cât timp comenzile sunt dezactivate.+
  
 +**Animație paletă**: la coliziune cu bila. Animația este una de scalare înainte-înapoi pe verticală și/sau orizontală timp de o secundă.
  
 +**Lansare de bile**. Această cerință înlocuiește cerința de bază **Resetarea bilei**. Se va folosi componenta tun pentru a lansa bile noi în scenă. Când începe o nouă rundă de joc din fiecare tun va fi lansată o bilă. Bilele sun tratate separat și runda se termină atunci când toate bilele sunt în porțile jucătorilor. ​
  
 ====== BREAKOUT ====== ====== BREAKOUT ======
  
-PLACEMENT GIF BREAKOUT+{{ :​egc:​teme:​2025:​breakout_tema_1.gif?​600 |}} 
 +//(Exemplu orientativ)//​
  
-Jocul Breakout este un clasic al genului arcade, bazat pe mecanica de distrugere a unui perete format din cărămizi colorate, folosind o bilă care ricoșează între limitele ecranului. Jucătorul controlează o padelă amplasată în partea inferioară a scenei, pe care o poate deplasa orizontal pentru a respinge bila și a o direcționa către cărămizi. La fiecare impact, o cărămidă este distrusă, iar jucătorul primește puncte. Obiectivul principal este eliminarea tuturor cărămizilor de pe ecran fără a pierde mingea. Dacă bila cade sub padelă, jucătorul pierde o viață, iar jocul se reia din poziția inițială. Breakout combină precizia, reflexul și planificarea unghiului de lovire, oferind o experiență de joc simplă, dar captivantă și dinamică.+Jocul Breakout este un clasic al genului arcade, bazat pe mecanica de distrugere a unui perete format din cărămizi colorate, folosind o bilă care ricoșează între limitele ecranului. Jucătorul controlează o paletă amplasată în partea inferioară a scenei, pe care o poate deplasa orizontal pentru a respinge bila și a o direcționa către cărămizi. La fiecare impact, o cărămidă este distrusă, iar jucătorul primește puncte. Obiectivul principal este eliminarea tuturor cărămizilor de pe ecran fără a pierde mingea. Dacă bila cade sub paletă, jucătorul pierde o viață, iar jocul se reia din poziția inițială. Breakout combină precizia, reflexul și planificarea unghiului de lovire, oferind o experiență de joc simplă, dar captivantă și dinamică.
  
 ===== Cerințe de bază ===== ===== Cerințe de bază =====
  
-**Scop și logică de progres**: Jucătorul începe partida cu 3 vieți. De fiecare dată când bila ajunge sub padelă, o viață este pierdută, iar bila și padela ​se resetează în pozițiile inițiale. La distrugerea unei cărămizi, se adaugă un număr de puncte (de exemplu 100). Jocul se termină când jucătorul pierde toate viețile sau când sunt distruse toate cărămizile de pe ecran.+**Scop și logică de progres**: Jucătorul începe partida cu 3 vieți. De fiecare dată când bila ajunge sub paletă, o viață este pierdută, iar bila și paleta ​se resetează în pozițiile inițiale. La distrugerea unei cărămizi, se adaugă un punct. Jocul se termină când jucătorul pierde toate viețile sau când sunt distruse toate cărămizile de pe ecran.
  
-**Desenare scenă**: Pe ecran se va desena nava cu padela, împreună cu un grid alcătuit din blocuri colorate care reprezintă cărămizile destructibile. În partea superioară sau laterală vor fi afișate inimile care indică numărul de vieți rămase. Scorul va fi scris fie în consolă, fie direct pe ecran prin intermediul componentei text renderer.+**Desenare scenă**: Pe ecran se va desena nava cu paleta, împreună cu un grid alcătuit din blocuri colorate care reprezintă cărămizile destructibile. În partea superioară sau laterală vor fi afișate inimile care indică numărul de vieți rămase. Scorul va fi scris fie în consolă, fie direct pe ecran prin intermediul componentei text renderer.
  
-**Control ​padelă(10p)**: Padela ​se află în josul ecranului și se deplasează folosind tastele ← și →.+**Control ​paletă**: Paleta ​se află în josul ecranului și se deplasează folosind tastele ← și →.
  
-**Eliberarea bilei**: La începutul jocului bila este lipită de marginea de sus a padelei. La apăsarea tastei SPACE bila va fi lansată în sus pe o direcție oblică (45°).+**Eliberarea bilei**: La începutul jocului bila este lipită de marginea de sus a paletei. La apăsarea tastei SPACE bila va fi lansată în sus pe o direcție oblică (45°).
  
-**Coliziuni** Bila este de formă circulară, iar componentele ​padelei ​vor fi aproximate cu AABB (axis-aligned bounding boxes)+**Coliziuni** Bila este de formă circulară, iar componentele ​paletei ​vor fi aproximate cu AABB (axis-aligned bounding boxes)
   * Bilă-cărămidă:​ Se sparge cărămida, iar bila ricoșează (inversând una din componentele vitezei acesteia).   * Bilă-cărămidă:​ Se sparge cărămida, iar bila ricoșează (inversând una din componentele vitezei acesteia).
   * Bilă-margini ecran: Bila ricoșează similar.   * Bilă-margini ecran: Bila ricoșează similar.
-  * Bilă-margine jos ecran: Se pierde o viață, iar padela ​și bila sunt resetate +  * Bilă-margine jos ecran: Se pierde o viață, iar paleta ​și bila sunt resetate 
-  * Bilă-padelă: Dacă bila a lovit o margine verticală a padelei ​atunci ricoșează în mod obișnuit. În schimb, pentru a permite controlul bilei de către jucător, atunci când bila lovește o margine orizontală a padelei, aceasta ricoșează și își schimbă direcția în funcție de punctul de contact similar ca în jocul PONG de mai sus.+  * Bilă-paletă: Dacă bila a lovit o margine verticală a paletei ​atunci ricoșează în mod obișnuit. În schimb, pentru a permite controlul bilei de către jucător, atunci când bila lovește o margine orizontală a paletei, aceasta ricoșează și își schimbă direcția în funcție de punctul de contact similar ca în jocul PONG de mai sus.
  
  
 ===== Cerințe avansate ===== ===== Cerințe avansate =====
  
-**Animație spargere cărămizi(20p)**: Când se sparge o cărămidă aceasta va devini ​din ce în ce mai mică până când dispare de tot. Cărămizile care sunt în proces de distrugere //nu influențează bila//.+**Animație spargere cărămizi**:​ Când se sparge o cărămidă aceasta va deveni ​din ce în ce mai mică până când dispare de tot. Cărămizile care sunt în proces de distrugere //nu influențează bila//
 + 
 +**Cărămizi rezistente**:​ Pentru a distruge o cărămidă este necesar să fie atins de mai multe ori de bilă sau de un proiectil. Se vor desena cărămizile în culori diferite. Fiecare culoare indică câte lovituri mai sunt necesare pentru a distruge cărămida. 
 + 
 +====== CHICKEN INVADERS ====== 
 + 
 +{{ :​egc:​teme:​2025:​chicken_invaders_tema_1.jpg?​600 |}} 
 +Jocul [[https://​www.youtube.com/​watch?​v=Kk36Ko0CeX8|Chicken Invaders]] este de tipul //​Shoot'​em up// și are ca scop distrugerea tuturor inamicilor pe ecran folosind nava spațială. 
 + 
 +===== Cerințe de bază ===== 
 + 
 +**Inamici**:​ La începutul jocului va fi prezentă o formație de inamici de cel puțin 2 linii pe 5 coloane. Fiecare inamic va coborî încet și în același timp va trage periodic un proiectil în josul hărții. 
 + 
 +Inamicii vor avea următorul aspect: {{ :​egc:​teme:​2025:​simple_chicken_tema_1.png?​200 }} 
 + 
 +Pentru bonus se poate folosi următorul aspect: {{ :​egc:​teme:​2025:​complex_chicken_tema_1.png?​200 |}} 
 + 
 +**Comportament de bază jucător**: Nava jucătorului se mișcă stânga-dreapta și folosind Space va trage din tunurile sale proiectile. Viteza jucătorului depinde de numărul de blocuri de tip motor prezente în vehicul. 
 + 
 +**Coliziuni** 
 +  * Proiectil jucător-inamic:​ Inamicul este aproximat pentru coliziuni cu un cerc. Când este lovit de proiectilul jucătorului inamicul și proiectilul sunt distruse. Jucătorul primește un punct 
 +  * Proiectil inamic-jucător:​ Jucătorul este distrus și jocul se încheie 
 +  * Inamic - josul hărții: Jocul se încheie 
 + 
 +===== Cerințe avansate ===== 
 + 
 +**Coborâre sinusoidală a inamicilor**:​ Pe măsură ce inamicii coboară, aceștia se vor mișca și stânga-dreapta într-un mod sinusoidal 
 + 
 +**Sistem valuri**: Când toți inamicii sunt distruși pe ecran, după încă 5 secunde, alți inamici vor fi creați în scenă. Acești noi inamici vor fi mai rapizi decât cei precedenți (coboară mai repede, trag mai des și proiectilele lor vor fi mai rapide) 
 + 
 +**Mișcare verticală a jucătorilor**:​ Se permite folosirea celor patru taste săgeți (↑←↓→) pentru a mișca jucătorul. 
 + 
 +===== Barem ===== 
 + 
 +==== Funcționalități de bază (150p) ==== 
 + 
 +  * Editor (75p) 
 +    * Desenare componente în stânga ecranului (10p) //​Includeți doar componentele care le folosiți în jocul ales de voi.// 
 +    * Desenare grilă proiectare vehicul (15p) 
 +    * Desenare număr componente rămase (5p) 
 +    * Desenare buton start (5p) 
 +    * Drag and drop pentru construcție (20p) 
 +    * Click dreapta pentru ștergere (10p) 
 +    * Verificare constrângeri vehicul (15p) 
 +    * Colorare buton start (2,5p) 
 +    * Copierea vehicului proiectat în joc (2,5p) 
 +  * Implementare joc (75p) 
 +    * **Pong** 
 +      * Desenare scenă (25p) 
 +      * Control palete (5p) 
 +      * Mișcare bilă (5p) 
 +      * Detectare Coliziuni (10p) 
 +      * Ricoșeu bilă la marginile orizontale ale hărții (5p) 
 +      * Ricoșeu bilă la palete (10p) 
 +      * Scor la gol (5p) 
 +      * Resetare bilă (10p) 
 +    * **Breakout** 
 +      * Desenare scenă (25p) 
 +      * Control paletă (5p) 
 +      * Mișcare bilă (5p) 
 +      * Detectare Coliziuni (15p) 
 +      * Spargere cărămizi (10p) 
 +      * Pierdere viață (5p) 
 +      * Resetare bilă (5p) 
 +      * Servire minge la începutul jocului (5p) 
 +    * **Chicken Invaders** 
 +      * Desenare inamici (15p) 
 +      * Mișcare inamici (5p) 
 +      * Tragere proiectile de către inamici (5p) 
 +      * Mișcare navă (5p) 
 +      * Tragere proiectile de către navă (5p) 
 +      * Mișcare proiectile (5p) 
 +      * Detectare coliziuni (15p) 
 +      * Distrugere inamici la coliziune cu proiectil al navei (5p) 
 +      * Joc pierdut când nava este lovită de un proiectil al unui inamic (5p) 
 +      * Joc pierdut când un inamic atinge marginea de jos a hărții (5p) 
 +      * Afișare scor (5p) 
 + 
 +==== Funcționalități avansate (75p) ==== 
 + 
 +  * **Pong** 
 +    * Implementare componentă bumper (desenare + constrângeri) (10p) 
 +    * Creștere viteză bilă (10p) 
 +    * Animație paletă (10p) 
 +    * Implementare componentă tun (desenare + constrângeri) (10p) 
 +    * Lansare de bile din tunuri la rundă nouă (15p) //Dacă este implementată această cerința cerința "​Resetare bilă" este considerată rezolvată.//​ 
 +    * Suport în joc pentru mai multe bile (20p) 
 +  * **Breakout** 
 +    * Animație spargere cărămizi (30p) 
 +    * Logică cărămizi rezistente (25p) 
 +    * Desenare cărămizi în mai multe culori în funcție de câtă rezistență mai au (20p) 
 +  * **Chicken Invaders** 
 +    * Coborâre sinusoidală a inamicilor (20p) 
 +    * Sistem valuri (45p) 
 +    * Mișcare completă a jucătorilor (10p) 
 + 
 +==== Exemple de funcționalități bonus ==== 
 +  * Camera shake (+20p) 
 +  * Animații cu “particule” la distrugerea obiectelor (+10p) 
 +  * Sistem de viață per componentă (+25p) 
 +  * Modele diferite în funcție de gradul de daune primit (+10p) 
 +  * Elemente UI în timpul jocului, ex: scor obținut, inamici rămași etc. (+10–20p) 
 +  * Sistem magazin (în funcție de performanța în timpul jocului, se pot achiziționa upgrade-uri / componente mai puternice etc.) (+20–30p) 
 +  * Mai multe blocuri cu funcționalități diferite (+5–10p per bloc) 
 +  * Design coerent, frumos al jocului (+10p) 
 + 
 +==== Întrebări și răspunsuri ==== 
 + 
 +Pentru întrebări vom folosi forumurile de pe moodle. Orice nu este menționat în temă este la latitudinea fiecărui student! 
 + 
 +==== Notare ==== 
 + 
 +Baremul este orientativ. Fiecare asistent are o anumită libertate în evaluarea temelor (de exemplu, să dea punctaj parțial pentru implementarea incompletă a unei funcționalități sau să scadă pentru hard coding). Același lucru este valabil atât pentru funcționalitățile obligatorii,​ cât și pentru bonusuri.
  
-**Folosirea tunurilor(25p)**:​ Jucătorii pot folosi tunurile pentru ​trage proiectile folosind tasta SPACE. Proiectilele sparg cărămizi la fel ca bilaProiectelele sunt eliminate din scenă fie când ies din ecran, fie când lovesc o cărămidă.+<note warning>​ 
 +Tema trebuie încărcată pe moodle. Pentru ​fi punctată, tema trebuie prezentată la laboratorVor exista laboratoare speciale de prezentare a temelor (care vor fi anunțate).</​note>​
  
-Sistemul de tragere este alternativ. La fiecare apăsare a tastei space se va căuta dacă există un tun care nu a tras de curând (5 secunde)Dacă da, atunci doar acel tun va trage un proiectil.+==== Indicații suplimentare ==== 
 +Tema va fi implementată în OpenGL și C++Este indicat să folosiți framework-ul și Visual Studio.
  
-**Cărămizi rezistente(35p)**: Pentru a distruge o cărămidă ​este necesar ​să fie atins de mai multe ori de bilă sau de un proiectilSe vor desena cărămizile în culori diferiteFiecare culoare indică câte lovituri mai sunt necesare pentru a distruge ​rămida.+<​note>​Pentru implementarea temei, în folderul ​**src/lab_m1** puteți crea un nou folder, de exemplu **Tema1**, cu fișierele **Tema1.cpp** și **Tema1.h** (pentru implementare POO, este indicat ​să aveți și alte fișiere). Pentru a vedea fișierele nou create în Visual Studio în Solution Explorer, apăsați click dreapta pe filtrul **lab_m1** și selectați **Add→New Filter**. După ce creați ​un nou filtru, de exemplu **Tema1**, dați click dreapta și selectați **Add→Existing Item**Astfel adăugați toate fișierele din folderul nou creatÎn fișierul **lab_list.h** trebuie adăugată și calea tre header-ul temeiDe exemplu: **#include “lab_m1/​Tema1/​Tema1.h”**</​note>​
  
-</hidden>+==== Arhivarea proiectului ==== 
 +<note> 
 +  * În mod normal arhiva trebuie să conțină toate resursele necesare compilării și rulării 
 +  * Înainte de a face arhiva asigurați-vă că ați curățat proiectul Visual Studio: 
 +      * Click dreapta pe proiect în **Solution Explorer** -> **Clean Solution** 
 +      * Ștergeți folderul __**/build/​.vs**__ (dacă nu îl vedeți, **este posibil să fie ascuns**) 
 +  * În cazul în care arhiva tot depășește limita de 50MB (nu ar trebui), puteți să ștergeți și folderul __**/​deps**__ sau __**/​assets**__ întrucât se pot adăuga la testare. Nu este recomandat să faceți acest lucru întrucât îngreunează mult testarea în cazul în care versiunea curentă a bibliotecilor/​resurselor diferă de versiunea utilizată la momentul scrierii temei. 
 +</note>
  
egc/teme/2025/01.1761496232.txt.gz · Last modified: 2025/10/26 18:30 by robert.caragicu
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