Differences

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

Link to this comparison view

egc:teme:2021:01 [2021/10/28 17:03]
anca.morar
egc:teme:2021:01 [2021/11/14 15:41] (current)
anca.morar
Line 1: Line 1:
 ==== Tema 1 - Survival Shooter ==== ==== Tema 1 - Survival Shooter ====
  
-In cadrul temei 1 se va implementa un shooter ​survival simplu cu camera top-down in care jucatorul trebuie sa distruga cat mai multi inamici, inainte sa moara. ​+In cadrul temei 1 se va implementa un survival ​shooter ​simplu cu camera top-down in care jucatorul trebuie sa distruga cat mai multi inamici, inainte sa moara. ​
  
  
 === Jucatorul === === Jucatorul ===
  
-Jucatorul este reprezentat de catre niste primitive geometrice (minimum 3), pozitionate sugestiv, astfel incat directia in care priveste jucatorul sa fie clara. Un exemplu este cel din figura ​de mai jos, in partea stanga, in care jucatorul priveste in jos. +Jucatorul este reprezentat de cateva ​primitive geometrice (minimum 3), pozitionate sugestiv, astfel incat directia in care priveste jucatorul sa fie clara. Un exemplu este cel din figura de mai jos, in partea stanga, in care jucatorul priveste in jos.  
 +Directia in care priveste utilizatorul este data de cursorul mouse-ului. Acest lucru se poate observa de asemenea in figura de mai jos, unde sunt prezentate doua orientari diferite ale personajului,​ in functie de pozitia cursorului mouse-ului.
 Acesta se deplaseaza pe axele X și Y (sus, stanga, jos, dreapta), cu tastele W, A, S, D. Acesta se deplaseaza pe axele X și Y (sus, stanga, jos, dreapta), cu tastele W, A, S, D.
-Directia in care priveste utilizatorul este data de cursorul mouse-ului. Acest lucru se poate observa in figura de mai jos, unde sunt prezentate doua orientari diferite ale personajului,​ in functie de pozitia cursorului mouse-ului. 
- 
-{{ :​egc:​teme:​2021:​tema.png?​nolink&​400 |}} 
  
 +{{ :​egc:​teme:​2021:​tema.png?​nolink&​350 |}}
 === Harta === === Harta ===
  
Line 29: Line 28:
 Proiectilele nu pot trece prin obstacole. Astfel, la intalnirea unui obstacol sau al unui perete al hartii, proiectilele dispar. Proiectilele nu pot trece prin obstacole. Astfel, la intalnirea unui obstacol sau al unui perete al hartii, proiectilele dispar.
 Arma jucatorului are o distanta maxima de tragere, astfel ca dupa parcurgerea unei anumite distante, un proiectil dispare, chiar daca nu a intalnit un inamic. Arma jucatorului are o distanta maxima de tragere, astfel ca dupa parcurgerea unei anumite distante, un proiectil dispare, chiar daca nu a intalnit un inamic.
-Arma jucatorului are si un fire rate maxim. Astfel, jucatorul va putea lansa proiectile in mod succesiv dupa o regula de timp (de exemplu, nu va putea trage un proiectul decat o data la minim 0.5 secunde).+Arma jucatorului are si un "fire rate" ​maxim. Astfel, jucatorul va putea lansa proiectile in mod succesiv dupa o regula de timp (de exemplu, nu va putea trage un proiectul decat o data la minim 0.5 secunde). 
 +Animatia de mai jos prezinta un exemplu in care jucatorul trage cu proiectile. 
 + 
 +{{ :​egc:​teme:​2021:​egc-t1-shooting-demo.gif?​direct&​300 |}}
  
 === Camera === === Camera ===
-Camera va urmari in permanenta jucatorul (jucatorul va fi desenat tot timpul in centrul ferestrei de afisare). ​+Camera va urmari in permanenta jucatorul (jucatorul va fi desenat tot timpul in centrul ferestrei de afisare). ​In video-ul de mai jos puteti vedea un exemplu de harta, in care spatiul logic se deplaseaza impreuna cu jucatorul. Animatia aceasta nu prezinta ce se vede pe ecran (in fereastra de afisare). In fereastra de afisare se va vedea numai ce este inclus in viewport. 
 + 
 +{{ :​egc:​teme:​2021:​egc-t1-viewport-demo-2.gif?​direct&​300 |}}
  
 === Inamicii === === Inamicii ===
  
 Inamicii se reprezinta tot prin forme geometrice simple, dar cu alte culori/​primitive,​ astfel incat sa se diferentieze fata de jucator. De exemplu, daca jucatorul este format din cercuri crem, asemenea figurii, inamicii pot fi reprezentati prin aranjamente de patrate rosii. ​ Inamicii se reprezinta tot prin forme geometrice simple, dar cu alte culori/​primitive,​ astfel incat sa se diferentieze fata de jucator. De exemplu, daca jucatorul este format din cercuri crem, asemenea figurii, inamicii pot fi reprezentati prin aranjamente de patrate rosii. ​
-Inamicii se vor crea incontinuu de-a lungul jocului, fie cate unul pe rand (de exemplu, sa apara un inamic nou la 3 secunde), fie in valuri (de exemplu, sa apara 5 inamici noi la 10 secunde). Fiecare inamic are o viteza diferita de deplasare. Pozitiile unde apar inamicii si vitezele acestora se pot stabili aleator sau se pot calcula dupa diferite reguli, dar nu trebuie sa fie hardcodate).+Inamicii se vor crea incontinuu de-a lungul jocului, fie cate unul pe rand (de exemplu, sa apara un inamic nou la 3 secunde), fie in valuri (de exemplu, sa apara 5 inamici noi la 10 secunde). Fiecare inamic are o viteza diferita de deplasare. Pozitiile unde apar inamicii si vitezele acestora se pot stabili aleator sau se pot calcula dupa diferite reguli, dar nu trebuie sa fie hardcodate.
 Inamicii dispar cand sunt loviti de un proiectil al jucatorului. Inamicii dispar cand sunt loviti de un proiectil al jucatorului.
 Inamicii trebuie sa urmareasca incontinuu jucatorul. Inamicii trebuie sa urmareasca incontinuu jucatorul.
 Inamicii pot trece prin obstacole. Inamicii pot trece prin obstacole.
 +
 +
  
 === Gameplay === === Gameplay ===
Line 58: Line 64:
   * Veti avea de implementat urmatoarele tipuri de coliziuni ​   * Veti avea de implementat urmatoarele tipuri de coliziuni ​
     * jucator - inamic ​     * jucator - inamic ​
-    * jucator - perete+    * jucator - perete ​harta
     * jucator - obstacol     * jucator - obstacol
     * proiectil - inamic     * proiectil - inamic
-    * proiectil - perete+    * proiectil - perete ​harta
     * proiectil - obstacol     * proiectil - obstacol
-    * inamic - perete+    * inamic - perete ​harta
  
 <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 73: Line 79:
 </​note>​ </​note>​
  
 +Animatia de mai jos prezinta un exemplu de fereastra de afisare a jocului, in care jucatorul trage in inamici (reprezentati cu rosu). La coliziunea cu unul dintre inamici, healtbar-ul este modificat. La intalnirea unui pick-up, nivelul de viata este crescut din nou (aceasta cerinta nu este obligatorie). In animatie se poate observa ca jucatorul este in permanenta in centrul ferestrei de afisare si ca acesta nu poate trece dincolo de limitele hartii.
 +
 +{{ :​egc:​teme:​2021:​egc-t1-full-demo-2.gif?​direct&​300 |}}
  
 === Bonus === === Bonus ===
-  * Traiectorii complexe pentru inamici - acestia continua sa urmareasca jucatorul, dar incearca sa se fereasca de proiectile ​(10p) +  * Traiectorii complexe pentru inamici - acestia continua sa urmareasca jucatorul, dar incearca sa se fereasca de proiectile 
-  * Afisarea unui minimap ​(10p)+  * Afisarea unui minimap
   * Crearea unui tip de inamic mai complex - care ataca jucatorul cu proiectile   * Crearea unui tip de inamic mai complex - care ataca jucatorul cu proiectile
   * Scena mult mai complexa   * Scena mult mai complexa
-  * Diverse pick-up-uri (ex: element care creste nivelul de viata, element care mareste ​proiectile ​pentru o anumita perioada, element de rapid fire mode in care arma isi modifica ​firerate-ul astfel incat sa traga o data la minim 0.2 secunde, element care transforma arma intr-un shotgun astfel incat sa se lanseze mai multe proiectile la o tragere, etc) (10p)+  * Diverse pick-up-uri (ex: element care creste nivelul de viata, element care mareste ​proiectilele ​pentru o anumita perioada, element de rapid fire mode in care arma isi modifica ​fire rate-ul astfel incat sa traga o data la minim 0.2 secunde, element care transforma arma intr-un shotgun astfel incat sa se lanseze mai multe proiectile la o tragere, etc)
  
 <note tip>​Exemplu (doar pentru orientare): https://​www.youtube.com/​watch?​v=vcezerC5fDk&​ab_channel=TasselsPlays </​note>​ <note tip>​Exemplu (doar pentru orientare): https://​www.youtube.com/​watch?​v=vcezerC5fDk&​ab_channel=TasselsPlays </​note>​
Line 86: Line 95:
 === Functionalitati obligatorii === === Functionalitati obligatorii ===
 Barem orientativ pentru realizarea functionalitatilor (din 150 puncte): Barem orientativ pentru realizarea functionalitatilor (din 150 puncte):
-  * Desenare jucator - 25p+  * Desenare jucator - 15p
   * Miscare si orientare jucator - 10p   * Miscare si orientare jucator - 10p
-  * Harta (desen ​si coliziune 20p+  * Harta (desen ​harta, desen obstacole) - 15p
   * Camera - 25p   * Camera - 25p
-  * Inamici ​20p +  * Desenare inamici ​15p 
-  * Proiectile (tragere, desenare ​si coliziune) - 20p +  * Miscare si orientare inamici - 5p 
-  * Scor si healtbar(functionalitate si UI) - 15p+  * Proiectile (tragere si desenare) - 20p 
 +  * Coliziuni - 25p 
 +    * jucator - inamic ​ (5p) 
 +    * jucator - perete harta (5p) 
 +    * jucator - obstacol (2.5p) 
 +    * proiectil - inamic (5p) 
 +    * proiectil - perete harta (2.5p) 
 +    * proiectil - obstacol (2.5p) 
 +    * inamic - perete harta (2.5p) 
 +  * Scor si healthbar ​(functionalitate si UI) - 20p
  
 === Intrebari si raspunsuri === === Intrebari si raspunsuri ===
-Pentru intrebari vom folosi forumurile de pe moodle. ​+Pentru intrebari vom folosi forumurile de pe moodle. ​Orice nu este mentionat in tema este la latitudinea fiecarui student!
  
 === Notare === === Notare ===
Line 105: Line 123:
 Tema va fi implementata in OpenGL si C++. Este indicat sa folositi framework-ul si Visual Studio. ​ Tema va fi implementata in OpenGL si C++. Este indicat sa folositi framework-ul si Visual Studio. ​
  
-Pentru implementarea temei, in folderul ​Source/​Laboratoare/ puteti crea un nou folder, de exemplu Tema1, cu fisierele Tema1.cpp si Tema1.h (pentru implementare POO, este indicat sa aveti si alte fisiere). Pentru a vedea fisierele nou create in Visual Studio in Solution Explorer, apasati click dreapta pe filtrul ​Laboratoare ​si selectati Add->New Filter. Dupa ce creati un nou filtru, de exemplu Tema1, dati click dreapta si selectati Add->​Existing Item. Astfel adaugati toate fisierele din folderul nou creat. ​+Pentru implementarea temei, in folderul ​__**src/lab_m1**__ ​puteti crea un nou folder, de exemplu Tema1, cu fisierele Tema1.cpp si Tema1.h (pentru implementare POO, este indicat sa aveti si alte fisiere). Pentru a vedea fisierele nou create in Visual Studio in Solution Explorer, apasati click dreapta pe filtrul ​lab_m1 ​si selectati Add->New Filter. Dupa ce creati un nou filtru, de exemplu Tema1, dati click dreapta si selectati Add->​Existing Item. Astfel adaugati toate fisierele din folderul nou creat. ​
 In fisierul lab_list.h trebuie adaugata si calea catre header-ul temei. De exemplu: #include "​lab_m1/​Tema1/​Tema1.h"​ In fisierul lab_list.h trebuie adaugata si calea catre header-ul temei. De exemplu: #include "​lab_m1/​Tema1/​Tema1.h"​
  
Line 112: Line 130:
 <​note>​ <​note>​
   * in mod normal arhiva trebuie sa contina toate resursele necesare compilarii si rularii   * in mod normal arhiva trebuie sa contina toate resursele necesare compilarii si rularii
-  * inainte de a face arhiva asigurati-va ca ati dat clean la proiect +  * inainte de a face arhiva asigurati-va ca ati curatat proiectul Visual Studio: 
-    * click dreapta pe proiect in **Solution Explorer** -> **Clean Solution**, sau +      * click dreapta pe proiect in **Solution Explorer** -> **Clean Solution** 
-    * stergeti folderul __**/Visual Studio/​obj**__ +      si stergeti folderul __**/build/.vs**__ (daca nu il vedeti, **este posibil sa fie ascuns**) 
-  * stergeti fisierul __**/Visual Studio/​Framework_EGC.sdf**__ (in caz ca exista) +    SAU stergeti ​complet ​folderul __**/build**__ 
-  * stergeti fisierul __**/Visual Studio/​Framework_EGC.VC.db**__ (in caz ca exista) +  * in cazul in care arhiva tot depaseste limita de 50MB (nu ar trebui), puteti sa stergeti si folderul __**/deps**__ sau __**/assets**__ intrucat se pot adauga la testare. Nu este recomandat sa faceti acest lucru intrucat ingreuneaza mult testarea in cazul in care versiunea curenta a librariilor/​resurselor difera de versiunea utilizata la momentul scrierii temei.
-  * stergeti folderul __**/Visual Studio/.vs**__ (daca nu il vedeti, **este posibil sa fie ascuns**) +
-  * 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 cazul in care arhiva tot depaseste limita de 20MB (nu ar trebui), puteti sa stergeti si folderul __**/libs**__ sau __**/Resources**__ intrucat se pot adauga la testare. Nu este recomandat sa faceti acest lucru intrucat ingreuneaza mult testarea in cazul in care versiunea curenta a librariilor/​resurselor difera de versiunea utilizata la momentul scrierii temei.+
 </​note>​ </​note>​
  
egc/teme/2021/01.1635429803.txt.gz · Last modified: 2021/10/28 17:03 by anca.morar
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