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 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.
Spatiul de joc este un dreptunghi. Figura de mai jos prezinta moduri in care se poate reprezenta harta:
Jucatorul nu poate sa iasa din harta. Harta trebuie sa fie mai mare decat fereastra de afisare.
Pe harta vor fi si alte obstacole, reprezentate prin dreptunghiuri scalate diferit, prin care jucatorul nu poate sa treaca.
Jucatorul poate sa traga cu proiectile reprezentate prin dreptunghiuri negre (la click stanga cu mouse-ul). Proiectilele vor fi lanstate din pozitia jucatorului, in directia in care jucatorul priveste (data de cursorul mouse-ului). Traiectoria acestora va liniara, iar viteza de deplasare, constanta. Ele vor fi de asemenea rotite in functie de directia de tragere. In momentul coliziunii cu un inamic, proiectilul va fi distrus (va disparea). De asemenea, inamicul va disparea, iar jucatorul va castiga un numar de puncte. 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 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.
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.
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 dispar cand sunt loviti de un proiectil al jucatorului. Inamicii trebuie sa urmareasca incontinuu jucatorul. Inamicii pot trece prin obstacole.
Scopul jocului este ca jucatorul sa supravietuiasca inamicilor cat mai mult timp. Jucatorul porneste de la un nivel maxim de viata (health). La fiecare coliziune cu un inamic, acest nivel scade. Daca nivelul scade la 0, atunci jucatorul moare si jocul se termina. Healthbar-ul se va prezenta pe ecran (orizontal, in partea de sus, sau vertical, in partea dreapta) prin doua dreptunghiuri:
Scorul va creste la eliminarea inamicilor. Scorul se va afisa periodic in consola sau se va ilustra pe ecran prin doua dreptunghiuri, similar cu healthbar-ul (scorebar).
Mentiune: in cazul acestei teme, se accepta coliziuni simple (cerc-cerc si cerc-dreptunghi aliniat cu axele).
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.
Barem orientativ pentru realizarea functionalitatilor (din 150 puncte):
Pentru intrebari vom folosi forumurile de pe moodle. Orice nu este mentionat in tema este la latitudinea fiecarui student!
Baremul este orientativ. Fiecare asistent are o anumita libertate in evaluarea temelor (de exemplu, sa dea punctaj partial pentru implementarea incompleta a unei functionalitati sau sa scada pentru hard coding). Acelasi lucru este valabil atat pentru functionalitatile obligatorii, cat si pentru bonusuri.
Tema trebuie incarcata pe moodle. Pentru a fi punctata, tema trebuie prezentata la laborator. Vor exista laboratoare speciale de prezentare a temelor (care vor fi anuntate).
Tema va fi implementata in OpenGL si C++. Este indicat sa folositi framework-ul si Visual Studio.
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”
14 noiembrie ora 23:59