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 - camera va fi de tip TPS (third-person), iar jucatorul se va roti doar in jurul axei OY (stanga-dreapta) astfel incat directia camerei (forward) va fi si cea a jucatorului
  • 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`:

  1. Pistolul, care trage incet, pe o distanta relativ mica
  2. Pusca, care face automat zoom, trage repede si la distanta mai mare, dar cu putere mai mica
  3. 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 (sau orice altceva doriti) se pot folosi orice modele 3D incarcate sau obiecte compuse din mai multe primitive. Puteti incarca obiecte de tipul obj, fbx, dae sau orice altceva e suportat de libraria assimp care va asigura incarcarea de fisiere.

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

Exemplu de rezolvare tema: tema2demo.zip tema2demox86.zip

Barem notare

  • Crearea unui character 3d care este mereu orientat cu spatele catre o camera third-person [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) [10p]
  • Minimap [15p]
  • Animatie de distrugere a inamicilor (cadere lateral sau orice alta animatie mai complexa) [10p]
  • Readme [5p]

Total : 100 pct

README-ul trebuie sa respecte urmatoarea structura

  1. Nume, prenumne, grupa si serie
  2. Utilizare aplicatie - taste/mouse/stari/etc
  3. Detalii de implementare - clase/structura
  4. Probleme aparute
  5. 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
  6. Status implementare functionalitati si descriere bonus (in caz ca exista)

Bonusuri posibile

  1. 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).
  2. Animatie pentru mersul personajului (membrele nu vor avea incheieturi, ci vor fi formate dintr-o singur parte: de ex un paralelipiped).
  3. Orice nu e specificat si considerati ca poate reprezenta un bonus de implementare. Se poate acorda bonus pentru orice functionalitatea ce intra in categoriile:
    • game logic
    • game mechanics
    • elemente grafice mai avansate, din afara arei acoperite de tema

  • 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 20 pct
  • Bonusul nu este conditionat de trimiterea la timp a temei. Puteti obtine bonus chiar daca ati trimis tema cu intarziere.

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 ExplorerClean 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)
  • este obligatoriu ca arhiva sa contina folderele /libs si /Resources utilizate in timpul dezvoltari intrucat acestea se mai pot modifica pe parcurs cursului iar gasirea versiunii corecte ingreuneaza mult testarea

egc/teme/02.txt · Last modified: 2016/12/17 17:44 by alexandru.gradinaru
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