This shows you the differences between two versions of the page.
egc:teme:2020:01 [2020/11/01 09:25] anca.morar |
egc:teme:2020:01 [2020/11/17 19:31] (current) florin_eugen.iancu |
||
---|---|---|---|
Line 1: | Line 1: | ||
==== Tema 1 - Bow and Arrow ==== | ==== Tema 1 - Bow and Arrow ==== | ||
- | In cadrul temei 1 veti implementa propria versiune de Flappy Bird. Tot ce nu este specificat ramane la creativitatea voastra. | + | In cadrul temei 1 se va implementa o versiune simplificata a jocului Bow and Arrow. Tot ce nu este specificat ramane la creativitatea voastra. |
=== Jucatorul === | === Jucatorul === | ||
Line 7: | Line 8: | ||
Jucatorul va fi reprezentat doar prin arc si sageata. Sageata va fi creata prin combinarea a minim 2 primitive geometrice(ex: triunghi, dreptunghi sau linie). Arcul va fi alcatuit dintr-o linie verticala si un arc de cerc. | Jucatorul va fi reprezentat doar prin arc si sageata. Sageata va fi creata prin combinarea a minim 2 primitive geometrice(ex: triunghi, dreptunghi sau linie). Arcul va fi alcatuit dintr-o linie verticala si un arc de cerc. | ||
- | {{ :egc:teme:2020:bow.png?nolink&350|}} | + | {{ :egc:teme:2020:bow.png?nolink&300 |}} |
=== Tinte === | === Tinte === | ||
Obiectele in care jucatorul trebuie sa traga cu sageata vor fi de 2 feluri: baloane si shuriken. | Obiectele in care jucatorul trebuie sa traga cu sageata vor fi de 2 feluri: baloane si shuriken. | ||
- | Baloanele vor fi create prin combinarea a minim 2 primitive(ex: un cerc scalat diferit pe axele x si y si o polilinie). Acestea se vor deplasa ascendent pe axa OY(vor aparea in partea de jos a scenei si vor urca). Baloanele vor fi de doua culori diferite: baloanele rosii - vor mari scorul, baloanele galbene - vor micsora scorul. | + | Baloanele vor fi create prin combinarea a minim 2 primitive(ex: un cerc scalat diferit pe axele x si y si o polilinie). Acestea se vor deplasa ascendent pe axa OY(vor aparea in partea de jos a scenei si vor urca). Baloanele vor fi de doua culori diferite: baloanele rosii- vor mari scorul, baloanele galbene- vor micsora scorul la coliziunea cu sageata. |
Stelutele shuriken vor fi create prin combinarea a 4 triunghiuri. Ele se vor deplasa pe axa OX(vor aparea din partea dreapta a scenei si se vor indrepta catre jucator). Stelutele vor fi animate - se vor roti in jurul centrului pe tot parcursul deplasarii. | Stelutele shuriken vor fi create prin combinarea a 4 triunghiuri. Ele se vor deplasa pe axa OX(vor aparea din partea dreapta a scenei si se vor indrepta catre jucator). Stelutele vor fi animate - se vor roti in jurul centrului pe tot parcursul deplasarii. | ||
+ | |||
+ | Obiectele trebuie definite ca in laboratorul 2. Nu se accepta incarcarea de obiecte 3D! | ||
Line 20: | Line 24: | ||
=== Gameplay === | === Gameplay === | ||
- | Jocul va fi un endless runner, care va crea impresia ca pasarea se deplaseaza de la stanga la dreapta printre perechile de dreptunghiuri. In realitate, nu se deplaseaza pasarea de la stanga la dreapta, ci scena se deplaseaza de la dreapta spre stanga. | + | Arcul jucatorului se afla in partea stanga a scenei. Arcul se poate deplasa doar pe axa OY, prin apasarea tastelor W, S. Directia de tragere a arcului se poate ajusta prin miscarea mouse-ului. Arcul va fi mereu rotit astfel incat sageata se va deplasa catre pozitia curenta a mouse-ului. Jucatorul va putea trage o sageata la cateva secunde. Viteza de deplasare a sagetii este determinata de timpul de apasare al butonului mouse-ului. Cu cat butonul este apasat mai mult timp, cu atat viteza va fi mai mare, pana la o limita setata. |
- | Pasarea este afectata de gravitatie. Ea va avea intotdeauna tendinta sa se incline in jos si sa cada. Daca se apasa tasta SPACE, pasarea se va ridica , inclinandu-se in sus. Daca pasarea se loveste de dreptunghiuri, moare. Pe masura ce timpul de supravietuire al pasarii trece, creste si punctajul jucatorului. In consola se va afisa periodic punctajul jucatorului. Atunci cand pasarea moare, se va afisa in consola un mesaj, impreuna cu punctajul final. | + | |
- | === Detalii de implementare === | + | Jucatorul va avea 3 vieti. La coliziunea dintre arc si un shuriken jucatorul va pierde o viata. La pierderea tuturor vietilor, jocul se va termina. |
- | * Caderea sau ridicarea pasarii se vor implementa prin translatie pe axa Oy. | + | Scorul va creste la coliziunea sagetii cu baloanele rosii sau shuriken. Scorul se va afisa periodic in consola sau se va ilustra pe ecran sub forma unui dreptunghi scalat (scorebar). |
- | * Inclinarea pasarii in jos va fi implementata printr-o rotatie (fata de centrul de greutate al pasarii) in sens orar, iar inclinarea pasarii in sus, printr-o rotatie in sens trigonometric | ||
- | * Perechile de dreptunghiuri se vor translata incontinuu pe axa Ox (de la dreapta la stanga). De fiecare data cand o pereche de dreptunghiuri dispare (s-a deplasat spre stanga pana cand a iesit din spatiul de desenare), apare o alta pereche de dreptunghiuri in partea dreapta. Crearea mediului inconjurator trebuie sa se realizeze in asa fel incat consumul de memorie si timpul de redare sa fie optime. Nu creati incontinuu obiecte care sa reprezinte perechile de dreptunghiuri care apar si dispar din spatiul de desenare!!!! O implementare eleganta este sa creati un singur dreptunghi in functia init(), iar in functia Update() sa dati comanda de desenare pentru acel dreptunghi de mai multe ori, de fiecare data la alta pozitie si cu alt factor de scalare pe OY, astfel incat dreptunghiurile desenate sa aiba inaltimi diferite. La fel, in functia Update() nu trimiteti spre desenare dreptunghiuri care au disparut din ecran!! | + | === Detalii de implementare === |
- | + | ||
- | * Toate animatiile trebuie sa fie independente de platforma. | + | |
+ | * Sagetile pot fi lansate doar catre partea dreapta a scenei.In momentul coliziunii sagetii cu un obiect se va declansa o animatie de distrugere a obiectului(ex: balonul va fi scalat cu factor subunitar pana dispare de tot). | ||
+ | * Afisarea puterii de tragere se va realiza astfel: un dreptunghi amplasat sub jucator, care va fi scalat pe axa OX cat timp butonul mouse-ului este tinut apasat. | ||
+ | * Coliziunea dintre sageata si obiectele tinta se va implementa prin testarea daca varful sagetii este inclus in cercul incadrator al fiecarui obiect tinta. | ||
+ | * Coliziunea dintre shuriken si arcul jucatorului se va implementa prin testarea intersectiei cercurilor incadratoare ale obiectelor. | ||
+ | * Crearea mediului inconjurator trebuie sa se realizeze in asa fel incat consumul de memorie si timpul de redare sa fie optime. Nu creati incontinuu obiecte care sa reprezinte obiectele tinta si sagetile care apar si dispar din spatiul de desenare!!!! O implementare eleganta este sa creati un singur obiect in functia init(), iar in functia Update() sa dati comanda de desenare pentru acel obiect de mai multe ori, de fiecare data la alta pozitie si cu alt factor de scalare. | ||
+ | * Toate animatiile trebuie sa fie independente de timpul de procesare al unui cadru. | ||
- | * Coliziunea dintre pasare si dreptunghiuri se poate simplifica prin verificarea unei coliziuni intre un cerc si dreptunghiuri (daca pasarea este destul de mica in raport cu dreptunghiurile, ea poata fi aproximata prin cercul care o incadreaza) | ||
<note tip>Mai multe informatii despre ce reprezinta coliziunea si cum se poate implementa: | <note tip>Mai multe informatii despre ce reprezinta coliziunea si cum se poate implementa: | ||
Line 41: | Line 46: | ||
* [[https://www.youtube.com/watch?v=aTbw71EpamY]] | * [[https://www.youtube.com/watch?v=aTbw71EpamY]] | ||
* [[https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_collision_detection]] | * [[https://developer.mozilla.org/en-US/docs/Games/Techniques/3D_collision_detection]] | ||
+ | Mentiune: in cazul acestei teme, coliziunile sunt mult mai simple (punct-cerc si cerc-cerc). | ||
</note> | </note> | ||
=== Bonus === | === Bonus === | ||
- | * (5p) Animatie de scalare pentru perechile de dreptunghiuri (o pereche de dreptunghiuri sa se comporte ca un set de usi glisante de la un lift modern), astfel incat sa se apropie si sa se departeze incontinuu, pastrand totusi o distanta suficient de mare intre ele astfel incat pasarea sa treaca printre ele) | + | * Scena cat mai realista (adaugarea unui personaj in scena, etc) |
- | * (5p-10p) Scena cat mai realista (perechile de stalactite si stalagmite sa fie in mai multe culori, din forme mai complexe, pasarea sa arate ca o pasare) | + | * Cresterea dificultatii jocului (viteza de deplasare a obiectelor tinta, numarul obiectelor tinta, etc) |
- | * Stalactitele si stalagmitele sa nu fie numai verticale (look up 2D GJK) | + | * Animatii (ex: baloanele sa se deplaseze pe un traseu serpuitor; la coliziunea dintre sageata si balon, balonul sa fie deformat realist si sa cada conform gravitatiei) |
- | * Sa creasca dificultatea jocului pe masura ce creste punctajul jucatorului | + | * Sageata sa tina cont de gravitatie (aruncarea sub un unghi inclinat) |
- | * Animatie care sa simuleze modul prin care pasarea da din aripi | + | * Diverse alte obiecte tinta (exemple in video) |
- | <note tip>Exemplu (doar pentru orientare): https://www.youtube.com/watch?v=I69adfEqwC0</note> | + | <note tip>Exemplu (doar pentru orientare): https://youtu.be/dcv-XKmUPjo </note> |
=== Functionalitati obligatorii === | === Functionalitati obligatorii === | ||
Barem orientativ pentru realizarea functionalitatilor (din 150 puncte): | Barem orientativ pentru realizarea functionalitatilor (din 150 puncte): | ||
- | * desenare pasare (25p) | + | * Desen scena - 40 p (10p sageata, 10p arcul, 10p baloane, 10p shuriken) |
- | * desenare mediu si animatie, cu utilizarea optima a resurselor (40p) | + | * Animatie obiecte tinta - 10p |
- | * animatii fluide pasare (35p) | + | * Stabilirea pozitiei arcului cu tastele - 10p |
- | * coliziuni (35p) | + | * Stabilirea directiei de tragere si deplasare a sagetii - 25p (15p directie, 10p deplasare) |
- | * printare statistici in consola (10p) | + | * Coliziunea sageata-obiecte tinta - 15p |
- | * readme (5p) | + | * Coliziunea shuriken-personaj - 15p |
+ | * Sistemul de tragere(viteza sageata + power bar) - 15p | ||
+ | * Animatie tinte doborate - 10p | ||
+ | * Actualizare scor - 10p | ||
=== Intrebari si raspunsuri === | === Intrebari si raspunsuri === | ||
Line 86: | Line 96: | ||
* stergeti fisierul __**/Visual Studio/Framework_EGC.sdf**__ (in caz ca exista) | * stergeti fisierul __**/Visual Studio/Framework_EGC.sdf**__ (in caz ca exista) | ||
* stergeti fisierul __**/Visual Studio/Framework_EGC.VC.db**__ (in caz ca exista) | * stergeti fisierul __**/Visual Studio/Framework_EGC.VC.db**__ (in caz ca exista) | ||
- | * stergeti folderul __**/.vs**__ (in caz ca exista) | + | * stergeti folderul __**/Visual Studio/.vs**__ (daca nu il vedeti, **este posibil sa fie ascuns**) |
* stergeti folderul __**/x64**__ sau __**/x86**__ (in caz ca exista) | * stergeti folderul __**/x64**__ sau __**/x86**__ (in caz ca exista) | ||
* executabilul final este generat in folderul __**/x86**__ sau __**/x64**__ la finalul link-editarii in functie de arhitectura aleasa la compilare (32/64 biti) | * executabilul final este generat in folderul __**/x86**__ sau __**/x64**__ la finalul link-editarii in functie de arhitectura aleasa la compilare (32/64 biti) | ||
Line 93: | Line 103: | ||
=== Deadline tema === | === Deadline tema === | ||
- | 3 noiembrie ora 23:55 | + | 17 noiembrie ora 23:59 |
+ | |||
+ | === Responsabili tema === | ||
+ | * Stefania Cristea | ||
+ | * Andrei Lapusteanu | ||
+ | * Anca Morar |