Differences

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

Link to this comparison view

egc:teme:01 [2016/11/12 22:41]
gabriel.ivanica [Barem notare]
egc:teme:01 [2017/10/04 17:29] (current)
alexandru.gradinaru create pages for homeworks indexed by years
Line 1: Line 1:
-====== Tema 1: Geometry Wars ====== +====== Tema 1 (2016): Geometry Wars ====== 
- +====== ​Tema 1 (2017): Titlu ======
- +
-  * **Responsabil**:​ Gabriel Ivanica \\ +
-  * **Perioada de lucru**: 31 Octombrie - 13 Noiembrie ​(2 saptamani) +
-  * **Termen de predare**13 Noiembrie 2016, 23:59 \\  +
-  * **Depunctare intarziere**:​ **2.5p/zi** pana la maxim **40p** din totalul de **100p** +
- +
- +
- +
-===== Enunt ===== +
- +
-<​note>​ +
-**Exemplu rezolvare tema**: {{:​egc:​teme:​tema1:​geometry_wars.zip|Geometry Wars}} +
-</​note>​ +
- +
-Scopul temei este implementarea unui joc simplu ce presupune utilizarea conceptelor invatate in primele 3 laboratoare:​ +
-  * Utilizarea evenimentelor de tastatura si mouse +
-  * Definirea si incarcarea de meshe simple in OpenGL +
-  * Utilizarea transformarilor 2D: translatie, scalare, rotatie +
- +
-Sa se implementeze un joc OpenGL in care utilizatorul are posibilitatea de a controla o nava spatiala in 2D astfel: +
-  * prin intermediul tastelor W, A, S, D (sau orice alte 4 taste) nava se poate misca sus/​jos/​stanga/​drapta pe cele 2 axe OX / OY  +
-  * positia mouse-ului pe ecran va determina rotirea navei controlate in acea directie +
-    * atunci cand mouse-ul se misca nava se va roti in directia mouse-ului +
- +
-O serie de inamici (kamikaze) vor aparea pe ecran la un interval de timp **de 2 secunde**. Acest interval se va micsora constant pe parcursul jocului pana la valoarea de **0.5 secunde**. +
- +
-Initial nava spatiala controlata de utilizator este plasata in centrul ecranului. Iar toti inamicii vor aparea pe un cerc virtual in jurul utilizatorului (cercul sa aiba o raza astfel incat inamicii sa apara aproape de marginea ecranului). Pozitiile de pe cerc ale inamicilor sunt generate aleatoriu. +
- +
-Fiecare inamic are urmatoarele proprietati:​ +
-  * viteza de deplasare aleatorie:​ +
-    * viteza ar trebui sa fie mai mica decat cea a navei controlate de utilizator +
-  * numarul de vieti (1 sau 2) - generat aleatoriu +
-  * culoare in functie de numarul de vieti astfel: +
-    * daca inamicul are initial 1 viata atunci va avea culoarea albastru +
-    * daca inamicul are initial 2 vieti atunci va avea culoarea galben +
-      * atunci cand inamicul cu 2 vieti pierde o viata: +
-        * culoarea acestuia se va modifica intr-o alta culoare; in exemplu prezentat, rosu +
-        * nava inamica se va scala la jumatate printr-o animatie ce dureaza aproximativ **250ms** +
- +
-Fiecare inamic se roteste dupa pozitia navei utilizator si se deplaseaza spre acesta (cu viteza random aleasa). Atunci cand un inamic intra in coliziune cu nava player se scade 1 viata iar inamicul este distrus. +
- +
-Nava controlata de utilizator are posibilitatea de a trage cu proiectile. Proiectilele au o viteza de deplasare mult mai mare ca nava spatiala. Atunci cand utilizatorul va apasa **CLICK STANGA** pe mouse se va lansa un proiectil in directia cursorului de pe ecran. Acesta va continua sa se deplaseze in aceasi directie atat timp cat nu are loc o coliziune cu o nava inamica. +
- +
-Pentru coliziune puteti sa folositi cea mai simpla varianta de testare de coliziune, **sfere <-> sfera**, folosind dimensiunea dimensiunea relativa a fiecarui obiect. +
- +
-Nava principala are initial **3 vieti**. Acestea vor fi afisate in coltul din dreapta sus prin intermediul unor simple depretunghiuri ca in exemplul dat. +
- +
-Atunci cand numarul de vieti ale navei ajunge la 0, jocul se va sfarsi iar fundalul ecranului se va colora cu rosu printr-o animatie de 2 secunde, plecand de la culoarea initiala negru. +
- +
-==== Geometrie ​==== +
- +
-  * Navele sunt formate din unirea a 2 triunghiuri asa cum se poate vedea si in exemplul dat +
-  * Proiectilele si vietile utilizatorului sunt niste patrate/​dreptunghiuri scalate corespunzator +
- +
-===== Observatii ​===== +
- +
-<note important>​ +
-Culorile date sunt orientative. Puteti sa folositi ce culori doriti atat timp cat se vede clar distinctia dintre culori. +
-</​note>​ +
- +
-<note tip> +
-  * Este recomandat sa folositi un spatiu logic de definire a geometriei asa cum este prezentat in [[http://​ocw.cs.pub.ro/​courses/​egc/​laboratoare/​03#​utilizare | Laborator3_Vis2D]] +
-  * Puteti sa porniti de la o orice laborator doriti sau sa va generati o clasa asemanatoare cu cele de laborator. +
-  * Plecand de la pozitia mouse-ului in pixeli si stiind spatiul logic utilizat, puteti sa calculati pozitia logica a cursorului pentru a roti corespunzator nava utiliator +
-  * Timpul global(in secundede la inceputul jocului este returnat de functia statica''​Engine::​GetElapsedTime()''​ +
-  * Folositi OOP +
-    * Exemplu: Nava utilizator si inamicii pot fi instante ale unor obiecte Enemy, Player ambele ce extind GameObject. +
-    * mentineti starea obiectelor: pozitie, scalare, rotatie, culoare, vieti, etc ca si membri ai clasei +
-    * pe baza pozitiei, scalarii si rotatiei calculati de fiecare data matricea de modelare ce trebuie folosita la desenare +
-  * Documentatia pentru evenimentele de mouse/​tastatura se gaseste in fisierul [[https://​github.com/​UPB-Graphics/​Framework-EGC/​blob/​master/​Source/​Core/​Window/​InputController.h|/​Core/​Window/​InputController.h]] +
-  * Pentru a randa un obiect folosind o culoare anume aveti disponibila functia urmatoare:​ +
-<code cpp> +
-void RenderMesh2D(Mesh * mesh, const glm::mat3 &​modelMatrix,​ const glm::vec3 &color) const; +
-</​code>​ +
- +
- +
-</​note>​ +
- +
-<note warning>​ +
-  * Geometria obiectelor trebuie generata si incarcata manual de voi asa cum s-a invatat in laboratorul 2. Nu aveti voie sa folositi functia ''​Mesh::​LoadMesh()''​ pentru a incarca obiecte 2D/3D din fisier. +
-  * Framework-ul contine in __/​libs/​Engine/​Component/​Transform__ o clasa numita ''​Transform''​. Nu aveti voie sa o folositi. Transformarile de rotatie/​scalare/​translatie trebuie facute asa cum s-a invatat in laboratorul 3. Si, da! Puteti sa folositi **Transform2D.h**. +
-</​note>​ +
- +
-===== Exemplu rezolvare ​===== +
- +
-<​note>​ +
-{{:​egc:​teme:​tema1:​geometry_wars.zip|Geometry Wars}} +
-</​note>​ +
-===== Barem notare ===== +
- +
-  * Respectarea geometriei specificate pentru proiectil si nave **[10p]**  +
-  * Miscarea navei utilizatorului pe ecran folosind tastatura **[10p]**  +
-  * Rotirea navei dupa mouse **[10p]**  +
-  * Generare navelor inamice in jurul player-ului **[5p]**  +
-  * Deplasare corecta a inamicilor (sa urmareasca playerul / rotatie corecta) **[15p]**  +
-  * Generarea corecta a proiectilelor (deplasare, rotatie) **[10p]**  +
-  * Coliziunea proiect <-> inamic, inamic <-> nava utilizator **[10p]**  +
-  * Animatia scalarea inamic cand pierde o viata + schimbarea culorii + dublarea vitezei **[10p]**  +
-  * Animatie culoare ecran la finalul jocului **[10p]**  +
-  * Afisarea pe ecran in coltul dreapta sus a numarului de vieti ale navei **[5p]**  +
-  * README **[5p]**  +
- +
-Total : **100 pct** +
- +
-<​note>​ +
-**README-ul** trebuie sa respecte urmatoarea structura +
-  - Nume, prenumne, grupa si serie +
-  - Utilizare aplicatie - taste/​mouse/​stari/​etc +
-  - Detalii de implementare - clase/​structura +
-  - Probleme aparute +
-  - Continutul arhivei (optional) +
-    * in cazul in care sunt necesare detalii importante despre structura proiectului,​ precum existenta unor fisiere speciale, fisiere de configurare,​ resurse de proiect, etc +
-  - Status implementare functionalitati si descriere bonus (in caz ca exista) +
-</​note>​ +
-<​note>​ +
-**Arhivarea proiectului** +
-  * in mod normal arhiva trebuie sa contina toate resursele necesare compilarii si rularii +
-  * inainte de a face arhiva asigurativa ca ati dat clean la proiect +
-    * click dreapta pe proiect in **Solution Explorer** -> **Clean Solution**, sau +
-    * stergeti folderul __**/Visual Studio/​obj**__ +
-  * stergeti fisierul __**/Visual Studio/​Framework_EGC.sdf**__ (in caz ca exista) +
-  * stergeti fisierul __**/Visual Studio/​Framework_EGC.VC.db**__ (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) +
-  * in ca ca arhiva tot depaseste limita de 20MB (nu ar trebui), puteti sa stergeti si folderul __**/​libs**__ sau __**/​Resources**__ intrucat se pot adauga la testare +
-</​note>​ +
-  +
-===== Bonusuri posibile ===== +
- +
-  * Inamici diversi:  +
-    * Un inamic in jurul caruia se invart 2 sateliti iar utilizatorul trebuie sa distruga sateltii acestuaia mai intain pentru a putea distruge inamicul (**~10p**) +
-    * Inamic care atunci cand este distrus se genereaza 2 inamici mai mici (la distanta unul de celalalt) +
-    * Boss enemy: inamic (mare) capabil sa traga cu proiectile catre nava utilizator si are viata foarte mare, se misca doar stanga dreapta de exemplu. Considerati ca dupa ce au fost omorati 100 de inamici simpli nu mai apare nici un alt inamic, urmand ca inamicul principal sa apara din marginea de sus a ecranului (**~15p**) +
-  * obiecte cadou ce diverse abilitati, exemple (implementati cel putin 2-3) **(~15p)** +
-    * viata in plus +
-    * invincibilitate pentru **N** secunde (sa se schimbe culoarea jucatorului) +
-    * scut pentru 1 coliziune (sa fie desenat un cerc in jurul navei utilizator) +
-    * posibilitatea de a trage cu mai multe proiectile si in directii diferite +
-  * orice nu e specificat si considerati ca poate reprezenta un bonus de implementare +
-  * Referinta pentru inspiratie: [[https://​www.youtube.com/​watch?​v=y-_qlaywKBs| Geometry Wars ]] +
- +
-<​note>​ +
-  * Bonusul se acorda doar daca cerintele de baza ale temei sunt implementate corect +
-  * Notarea bonusului este la latitudinea asistentului si a calitatii implementarii,​ nu exista barem dar in principiu se pot accorda 5, 10, 15 pct +
-  * Pentru implementari foarte speciale bonusul acordat poate ajunge pana la maxim 25 pct +
-  * Bonusul nu este conditionat de trimiterea la timp a temei. Puteti obtine bonus chiar daca ati trimis tema cu intarziere. +
-</​note>​ +
- +
- +
- +
- +
  
egc/teme/01.1478983267.txt.gz · Last modified: 2016/11/12 22:41 by gabriel.ivanica
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