This is an old revision of the document!
Tema 2: Build and Survive
Responsabil: Ciprian Apetrei, Alex Gradinaru
Perioada de lucru: 14 Noiembrie - 4 Decembrie (~3 saptamani)
Termen de predare: 4 Decembrie 2016, 23:59
Depunctare intarziere: 2.5p/zi pana la maxim 40p din totalul de 100p
Enunt
Scopul temei este implementarea unui joc simplu ce presupune utilizarea conceptelor de geometrie 3D invatate in primele 5 laboratoare:
Utilizarea evenimentelor de tastatura si mouse
Definirea si incarcarea de meshe simple in OpenGL
Utilizarea transformarilor 3D: translatie, scalare, rotatie
Utilizarea de camere
Utilizarea transformarilor de proiectie
Sa se implementeze un joc OpenGL in care utilizatorul are posibilitatea de a controla un personaj 3D ce va avea posibilitatea de a lansa proiectile catre inamici astfel:
prin intermediul tastelor W, A, S, D (sau orice alte 4 taste) juctorul se poate misca in spatiul 3D
positia mouse-ului va determina rotirea camerei si a jucatorului (similar cu ce am facut in laborator)
apasarea butonului de mouse (left click) va lansa proiectile
Inamicii se vor genera initial la fiecare 5 secunde dintr-un colt si vor parcurge toata scena intr-un labirint in forma de Z pana cand ajung la coltul opus. Pe masura ce trece timpul, inamicii vor deveni din ce in ce mai greu de omorat si se vor genera din ce in ce mai repede. Scopul jocului este de a opri inaintarea inamicilor catre sfarsitul labirintului.
Pentru simplitate, nu este necesara implementarea de coliziuni cu mediul inconjurator (deplasarea inamicilor poate fi fixa/hardcodata).
Jucatorul are la dispozitie 3 arme ce se pot schimba de la tastatura folosind tastele `1`,`2`,`3`:
Pistolul, care trage incet, pe o distanta relativ mica
Pusca, care face automat zoom, trage repede si la distanta mai mare, dar cu putere mai mica
Grenade launcher, care trage grenade cu bolta, rar, dar foarte puternice.
Proiectilele vor avea proprietati care le controleaza distanta, directia si puterea.
Pentru coliziunea proiectilelor puteti sa folositi variante de testare simple (AABB, sfere etc.).
Jucatorul are 3 vieti care vor fi seminificate de 3 sfere mici ce se rotesc in jurul acestuia (fiecare executa o rotatie fata de una dintre axele OX, OY, OZ). Atunci cand un inamic ajunge la capatul culoarului jucatorul va pierde o viata si va disparea una dintre sfere. Astfel, daca 3 inamici au ajuns la capatul culoarului jocul este pierdut.
Cand un inamic sau userul moare, se va crea o animatie ce va imita o cadere in lateral a personajului/inamicului. Inamicii vor mai executa in acelasi timp si o animatie de scalare catre 0 astfel incat sa creeze impresia ca dispar.
Pentru a ajuta jucatorul, pe parcursul traseului, vor exista si 3 turnuri care vor trage in cel mai apropiat inamic. Turnurile se vor orienta mereu catre inamicul inspre care trag.
Pentru turnuri, personaj si inamici se pot folosi orice modele 3D incarcate(obj) sau obiecte compuse din mai multe primitive.
De asemenea in joc va exista si un minimap in coltul dreapta jos ce va reprezenta toata scena vazuta de sus in care inamicii sunt desenati cu rosu, turnurile cu verde, iar utlizatorul cu albastru.
Minimap-ul se deseneaza intr-un viewport separat, folosind o proiectie ortogonala si o camera situata deasupra scenei.
Pentru colorare se poate folosi spre exemplu mesh-ul `box` din laborator in care aveti pe fete culorile necesare sau desenarea de mesh 2D cu o culoare (RenderMesh2D).
Exemplu rezolvare
Vom pune in curand si un demo.
Barem notare
Crearea unui character 3d care este mereu orientat cu spatele catre o camera TPS [15p]
Crearea inamicilor care parcurg traseul si sunt orientati spre directia in care merg [10p]
Armele userului (pistol [5p], pusca [5p], grenade launcher [10p]) [20p]
Turnurile care se rotesc si trag catre adversar [15p]
Mecanismul prin care proiectilele trase de user/turnuri scad viata inamicilor (detectia de coliziuni) [15p]
Minimap [15p]
Animatie de distrugere a inamicilor (cadere lateral sau orice alta animatie mai complexa) [10p]
Total : 100 pct
Bonusuri posibile
Inamicii vor veni in valuri, iar intre valuri user-ul va intra intr-un mod build, in care scena este vazuta de sus, iar el poate sa construiasca turnuri si sa le pozitioneze unde doreste (Tower Defence).
Animatie pentru mersul personajului (membrele nu vor avea incheieturi, ci vor fi formate dintr-o singur parte: de ex un paralelipiped).
Orice nu e specificat si considerati ca poate reprezenta un bonus de implementare. Se poate acorda bonus pentru orice functionalitatea ce intra in categoriile:
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)
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