This shows you the differences between two versions of the page.
|
egc:teme:2025:02 [2025/11/16 19:24] silviu.stancioiu00 [Vehicule] |
egc:teme:2025:02 [2025/11/16 21:06] (current) silviu.stancioiu00 [Trenul] |
||
|---|---|---|---|
| Line 24: | Line 24: | ||
| * Locomotiva va fi alcătuită din încăperea vatmanului (reprezentată de un paralelipiped vertical) și zona motorului (reprezentat de un cilindru orizontal). La rândul său, va merge pe mai multe roți, reprezentate tot de cilindri. | * Locomotiva va fi alcătuită din încăperea vatmanului (reprezentată de un paralelipiped vertical) și zona motorului (reprezentat de un cilindru orizontal). La rândul său, va merge pe mai multe roți, reprezentate tot de cilindri. | ||
| - | {{:egc:teme:2025:locomotiva.png?300 |}} {{ :egc:teme:2025:vagon.png?300|}} | + | {{:egc:teme:2025:locomotiva2.png?300 |}} {{ :egc:teme:2025:vagon.png?300|}} |
| === Control === | === Control === | ||
| Line 100: | Line 100: | ||
| ==== Sistem 3D de construcție a hărții (editor interactiv) ==== | ==== Sistem 3D de construcție a hărții (editor interactiv) ==== | ||
| - | Puteti considera un volum 3d in care statiile, obstacolele si sinele se pot afla oriunde. Lumea poate fi reprezentata ca un grid3D sau Octree, in care fiecare casuta din grid poate contine fie o statie, fie o sina, fie un obstacol. Sinele pot fi vazute ca niste tuburi intre planete (sa le numim găuri negre; in a galaxy far far away) și pot fi reprezentate ca simple paralelipipede ce unesc 2 celule vecine din grid. Stațiile vor fi planete și vor reprezentate prin cuburi și/sau sfere. | + | Puteti considera un volum 3d in care statiile, obstacolele si sinele se pot afla oriunde. Lumea poate fi reprezentata ca un grid3D sau Octree, in care fiecare casuta din grid poate contine fie o statie, fie o sina, fie un obstacol. Sinele pot fi vazute ca niste tuburi intre planete (sa le numim găuri negre; in a galaxy far far away) și pot fi reprezentate ca simple paralelipipede ce unesc 2 celule vecine din grid. Stațiile vor fi planete și vor fi reprezentate prin cuburi și/sau sfere. |
| ==== UI ==== | ==== UI ==== | ||
| Line 120: | Line 120: | ||
| În acest joc, traseul trenurilor este avariat în permanență iar jucătorul — în rolul unui mecanic — trebuie să parcurgă traseul cu o drezină pentru a repara șinele deteriorate. Traseul poate include porțiuni la suprafață, subterane sau suspendate, iar trenurile circulă automat pe acest traseu. Scopul jocului este menținerea caii ferate în stare funcțională cât mai mult timp posibil. | În acest joc, traseul trenurilor este avariat în permanență iar jucătorul — în rolul unui mecanic — trebuie să parcurgă traseul cu o drezină pentru a repara șinele deteriorate. Traseul poate include porțiuni la suprafață, subterane sau suspendate, iar trenurile circulă automat pe acest traseu. Scopul jocului este menținerea caii ferate în stare funcțională cât mai mult timp posibil. | ||
| - | ==== Traseu ==== | + | === Traseu === |
| - | Implementarea unui track predefinit, cu un minim de 2 curbe. Se consideră curbă orice schimbare de direcție a traseului cu 90 de grade. Acesta nu se va schimba pe durata jocului.m Traseul va fi format din mai multe segmente de șină și din minim 3 stații. | + | Implementarea unui track predefinit, cu un minim de 2 curbe. Se consideră curbă orice schimbare de direcție a traseului cu 90 de grade. Acesta nu se va schimba pe durata jocului. Traseul va fi format din mai multe segmente de șină și din minim 3 stații. |
| - | ==== Avarierea șinelor ==== | + | === Avarierea șinelor === |
| Fiecare segment trebuie să poată intra în starea “avariat” cu o probabilitate aleatorie. Segmentul avariat trebuie să fie vizual diferit prin: | Fiecare segment trebuie să poată intra în starea “avariat” cu o probabilitate aleatorie. Segmentul avariat trebuie să fie vizual diferit prin: | ||
| Line 164: | Line 164: | ||
| Scopul jucătorului este să mențină trenurile în mișcare cât mai mult timp prin repararea segmentelor afectate. Când drezina se află suficient de aproape de un segment avariat, jucătorul poate declanșa o acțiune de reparare – cât timp este în raza acestuia și apasă tasta F șina se va repara instant. Reparația readuce segmentul la forma și culoarea inițială. Trenurile pot circula din nou peste segmentul reparat. Jocul se termină fie când un tren așteaptă prea mult în fața unei avarii (de ex. peste 30 de secunde), fie când există prea multe segmente avariate simultan (de ex. mai mult de 50% din traseu este avariat). | Scopul jucătorului este să mențină trenurile în mișcare cât mai mult timp prin repararea segmentelor afectate. Când drezina se află suficient de aproape de un segment avariat, jucătorul poate declanșa o acțiune de reparare – cât timp este în raza acestuia și apasă tasta F șina se va repara instant. Reparația readuce segmentul la forma și culoarea inițială. Trenurile pot circula din nou peste segmentul reparat. Jocul se termină fie când un tren așteaptă prea mult în fața unei avarii (de ex. peste 30 de secunde), fie când există prea multe segmente avariate simultan (de ex. mai mult de 50% din traseu este avariat). | ||
| + | |||
| + | ==== Cerințe avansate (la alegere) ==== | ||
| + | |||
| + | <note important> | ||
| + | Observație! Funcționalitățile avansate însumează 75 de puncte. Aveți libertatea să alegeți oricare dintre funcționalitățile avansate de mai jos pentru a acumula punctele, fără a fi necesară implementarea tuturor funcționalităților de la un singur tip de joc. Funcționalitățile suplimentare sunt considerate bonus. Pentru punctajele detaliate consultați baremul. | ||
| + | </note> | ||
| + | |||
| + | === Sistem de semnalizare sau pathfinding === | ||
| + | |||
| + | * Semnale luminoase care blochează/permit trenurilor accesul la intersecții. | ||
| + | * Sistem de pathfinding pentru navigarea între stații. | ||
| + | |||
| + | === Mecanism de dificultate === | ||
| + | |||
| + | * Avariile nu se mai soluționează instant, ele au un timp de așteptare. | ||
| + | * Reparația avariei necesită să rămâi prezent în aria ei până se termină. | ||
| + | * Creșterea gravității unei avarii cu cât rămâne nesoluționată mai mult timp → consecința ar fi că durează din ce în ce mai mult să repari o avarie. | ||
| + | |||
| + | === Trenuri suplimentare === | ||
| + | |||
| + | * Un tren special (ex. tren express) care nu poate fi întârziat → duce imediat la game over dacă staționează. | ||
| + | |||
| + | === Elemente de UI === | ||
| + | |||
| + | * Bară de progres pentru reparații | ||
| + | * Afișarea timpului de joc | ||
| + | * Afișarea numărului de segmente care trebuie reparate | ||
| + | * Afișarea timpului de așteptare maxim al trenurilor | ||
| + | * Ecran de end game | ||
| + | |||
| + | === Ecran de editor la începutul jocului pentru construirea traseului === | ||
| + | |||
| + | * Traseul nu va mai fi definit în cod, ci va exista o etapă de building înainte de începerea jocului propriu-zis în care jucătorul va așeza segmentele de șină în lume. | ||
| === Minimap === | === Minimap === | ||
| - | Implementarea unui minimap 2D minimal în care să se vadă tot traseul: | + | Implementarea unui **minimap** 2D minimal în care să se vadă tot traseul: |
| * Reprezentarea fiecărui segment printr-un simbol (de exemplu puncte sau linii). | * Reprezentarea fiecărui segment printr-un simbol (de exemplu puncte sau linii). | ||
| Line 173: | Line 206: | ||
| * Simbol pentru poziția jucătorului pe hartă. | * Simbol pentru poziția jucătorului pe hartă. | ||
| + | ===== Minigame 2: Mini Metro ===== | ||
| + | |||
| + | Scopul acestui joc este acela de a prelua pasageri de la stația la care se află și de a-i duce la stația în care își doresc. | ||
| + | |||
| + | === Mediu === | ||
| + | |||
| + | Inițial, în scenă se vor afla 2 statii. La anumite momente de timp o nouă stație va apărea la o poziție aleatoare. Jucătorul va putea adăuga diferite tipuri de șină astfel încât să corespundă cu relieful hărții. | ||
| + | |||
| + | === Pasageri === | ||
| + | |||
| + | În fiecare stație, la un anumit interval de timp va apărea câte un pasager care va dori să ajungă la o altă stație aleatoare. În acest sens, fiecare gară va fi reprezentată sub forma unui simbol geometric (de exemplu, piramidă, paralelipiped, cilindru, sferă etc.). Toate gările vor avea aceeași culoare (de exemplu, mov). Toți pasagerii vor fi colorați în aceeași culoare (de exemplu, verde). Fiecare pasager va fi reprezentat de gara în care dorește să ajungă (de exemplu, un pasager care dorește să ajungă într-o gară paralelipiped va fi reprezentat sub forma unui paralelipiped mai mic). | ||
| + | |||
| + | === Gameplay === | ||
| + | |||
| + | Trenul se va mișca automat, iar scopul jucătorului va fi să plaseze șine de tren astfel încât să conecteze gările într-un mod cât mai eficient. Jocul se va termina în momentul în care o gară va fi prea aglomerată (de exemplu, vor fi mai mult de 10 pasageri în gară). Pentru a ilustra gradul de ocupare al gării la un anumit moment de timp culoarea acesteia va varia în shader (pornind de la culoarea sa de bază pâna la un roșu intens). | ||
| + | |||
| + | ==== Cerințe avansate ==== | ||
| + | |||
| + | <note important> | ||
| + | Observație! Funcționalitățile avansate însumează 75 de puncte. Aveți libertatea să alegeți oricare dintre funcționalitățile avansate de mai jos pentru a acumula punctele, fără a fi necesară implementarea tuturor funcționalităților de la un singur tip de joc. Funcționalitățile suplimentare sunt considerate bonus. Pentru punctajele detaliate consultați baremul. | ||
| + | </note> | ||
| + | |||
| + | === Trenuri suplimentare === | ||
| + | |||
| + | * Posibilitatea de a adăuga mai multe vagoane în funcție de numărul de pasageri care au ajuns la destinație (de exemplu, la fiecare 15 pasageri, jucătorul va putea adăuga un nou vagon la trenul cu cele mai putine vagoane sau va putea adăuga un tren nou cu un vagon) | ||
| + | |||
| + | === Elemente de UI === | ||
| + | |||
| + | * Bară de aglomerare pentru fiecare stație | ||
| + | * Afișarea timpului de joc | ||
| + | * Ecran de end game | ||
| + | |||
| + | === Minimap === | ||
| + | |||
| + | Implementarea unui **minimap** 2D minimal în care să se vadă tot traseul: | ||
| + | |||
| + | * Reprezentarea fiecărei șine printr-o linie. | ||
| + | * Fiecare gară printr-un simbol asociat formei sale (de exemplu, o gara piramida va fi reprezentată printr-un triunghi). Fiecare gară va avea altă culoare în funcție de gradul său de ocupare. | ||
| + | * Icon pentru poziția jucătorului pe hartă. | ||
| + | |||
| + | |||
| + | ===== Minigame 3: Cargo delivery ===== | ||
| + | |||
| + | În acest tip de joc va exista o gară centrală care va emite comenzi. În plus, vor exista o serie de alte câteva gări de unde se vor putea prelua resursele necesare pentru a îndeplini comanda. Trenul se va mișca automat, dar harta va fi construită astfel încât să existe cel puțin trei intersecții diferite între șine. La fiecare intersecție jucătorul va trebui prin apăsarea tastelor WASD să aleagă direcția în care va merge trenul astfel încât să reușească să ia toate materialele într-un timp limită de un minut. | ||
| + | |||
| + | === Mediu === | ||
| + | |||
| + | În scenă se va afla gara centrală și cel puțin alte 3 gări de resurse. Gările de resurse vor avea forme și culori diferite (de exemplu, paralelipiped, sferă, piramidă etc.) în funcție de resursa care poate fi colectată din ele. Gările vor fi conectate între ele prin șine, dar nu direct, ci prin cel puțin 3 intersecții diferite. | ||
| + | |||
| + | === Resursele === | ||
| + | |||
| + | Gara centrală va emite o comandă de resurse. Fiecare resursă va avea asociată o culoare și o formă unică. | ||
| + | Comanda emisă de gara centrală va fi compusă din 5 resurse aleatorii care se pot repeta. Acestea se vor plasa în dreptul gării centrale (pentru a știi comanda) sub forma unei liste. Când una din resurse este colectată ea va dispărea din listă. | ||
| + | O resursă colectată dintr-o gară se va regenera după o perioadă de timp (de ex. 5 secunde). | ||
| + | |||
| + | === Gameplay === | ||
| + | |||
| + | Trenul se va mișca automat, iar scopul jucătorului va fi să selecteze la fiecare intersecție direcția de mers a trenului. Comanda trebuie terminată într-un minut. După ce toate resursele din comandă au fost colectate, trenul trebuie să se întoarcă la gara centrală, moment în care se va genera o altă comandă. Jocul se va termina în momentul în care jucătorul nu completează comanda în timp util. Pentru a ilustra timpul rămas pentru livrarea comenzii, culoarea gării centrale va varia în shader (pornind de la culoarea sa de bază pâna la un roșu intens). | ||
| + | |||
| + | ==== Cerințe avansate ==== | ||
| + | |||
| + | <note important> | ||
| + | Observație! Funcționalitățile avansate însumează 75 de puncte. Aveți libertatea să alegeți oricare dintre funcționalitățile avansate de mai jos pentru a acumula punctele, fără a fi necesară implementarea tuturor funcționalităților de la un singur tip de joc. Funcționalitățile suplimentare sunt considerate bonus. Pentru punctajele detaliate consultați baremul. | ||
| + | </note> | ||
| + | |||
| + | === Gameplay avansat === | ||
| + | |||
| + | * Jucătorul selectează prin AD pe șină direcția în care vrea să meargă | ||
| + | * Intersecțiile vor fi mai mult de 4 direcții de mers. | ||
| + | * Resursele trebuie preluate în ordinea în care au fost generate | ||
| + | |||
| + | === Elemente de UI === | ||
| + | |||
| + | * Afișarea timpului de joc | ||
| + | * Ecran de end game | ||
| + | |||
| + | === Minimap === | ||
| + | |||
| + | Implementarea unui **minimap** 2D minimal în care să se vadă tot traseul: | ||
| + | |||
| + | * Reprezentarea fiecărei șine printr-o linie. | ||
| + | * Fiecare gară de resurse este reprezentată printr-un simbol și o culoare asociate formei sale (de exemplu, o gara piramida va fi reprezentată printr-un triunghi portocaliu). | ||
| + | * Gara centrală va avea propriul său simbol, iar culoarea sa va diferi în funcție de timpul rămas pentru finalizarea comenzii | ||
| + | * Simbol pentru poziția jucătorului pe hartă. | ||
| + | |||
| + | === Ecran de editor la începutul jocului pentru construirea traseului. === | ||
| + | |||
| + | ===== Barem ===== | ||
| + | |||
| + | ==== Funcționalități de Bază (150p) ==== | ||
| + | |||
| + | * Mediul Inconjurator (60) | ||
| + | * Teren (15) | ||
| + | * Stații (15) | ||
| + | * Șine (30) | ||
| + | * Minim 3 tipuri diferite (15) | ||
| + | * Fiecare se poate așeza pe un anumit tip de teren (15) | ||
| + | * Tren (75) | ||
| + | * Constructie (30) | ||
| + | * Miscare automata (45) | ||
| + | * Minim 3 tipuri de gări (15) | ||
| + | |||
| + | ==== Funcționalități Avansate (75p) ==== | ||
| + | |||
| + | <note> | ||
| + | Puteți alege oricare dintre funcționalitățile avansate de mai jos pentru a acumula puncte până la 75. Funcționalitățile suplimentare sunt considerate bonus. Aveți libertatea să alegeți oricare dintre funcționalitățile avansate, fără a fi necesară implementarea tuturor funcționalităților de la un singur tip de joc. | ||
| + | </note> | ||
| + | |||
| + | === Tipuri de Jocuri (Acestea sunt doar recomandări și pot fi combinate/adaptate după preferință.) === | ||
| + | |||
| + | * **Rail Maintenance** | ||
| + | * Drezina (20) | ||
| + | * Construcție (10) | ||
| + | * Control (10) | ||
| + | * Coliziuni (30) | ||
| + | * Drezină - Șină avariată (15) | ||
| + | * Tren - Șină avariată (15) | ||
| + | * Deformare avarie în shader (20) | ||
| + | * Game over (5) | ||
| + | * **Mini Metro** | ||
| + | * Amplasare aleatoare gări și pasageri (5) | ||
| + | * Oprire în gară (10) | ||
| + | * Mecanica plasare șine prin click (35) | ||
| + | * Deformare culoare gară aglomerată în shader (20) | ||
| + | * Game Over (5) | ||
| + | * **Cargo Delivery** | ||
| + | * Construcție traseu cu minim 3 intersecții, o gară principală și 3 gări de resurse (25) | ||
| + | * Deformare culoare gară centrală în funcție de timp (20) | ||
| + | * Preluare comenzi și resurse (20) | ||
| + | * Selectare direcție de mers (10) | ||
| + | * Game over (5) | ||
| + | |||
| + | === Alte functionalitati avansate (doar in cazul ca nu au fost folosite în joculeț) === | ||
| + | |||
| + | * Minimap (20p) | ||
| + | * Split screen (20p) | ||
| + | * Nivel de dificultate diferit (10) | ||
| + | * Meniu de construit sinele (30) | ||
| + | * Mediu 3D (40) | ||
| + | * Elevație diferită a hărții (20) | ||
| + | |||
| + | <note important> | ||
| + | Alte funcționalități pe care nu le-am descris vor fi punctate în concordanță cu dificultatea / calitatea implementării. | ||
| + | </note> | ||
| + | |||
| + | <note> | ||
| + | Este permisa utilizarea modelelor externe / create in blender / importate *doar* pentru obstacole (si alte obiecte care nu au fost descrise in enunt). Vagoanele, sinele si terenul trebuie generate din cod. Coliziunea cu obiectele importate va fi in continuare efectuată asa cum a fost descris in enunt (minim 2 corpuri de coliziune, aceastea trebuie sa fie cat mai apropiate de forma modelului). Este indicat ca daca folositi modele externe, scena sa pastreze o anumita coeziune estetica (daca trenurile si terenul sunt cu numar mic de poligoane si netexturate, modelele ar trebuii sa aiba un stil similar). | ||
| + | </note> | ||
| + | |||
| + | <note warning> | ||
| + | In cazul in care punctajul obtinut din cerințele avansate depășește cele 75p alocate, la bonus se vor adăuga punctele în plus dar cu o valoare de 3 ori mai mica, si se pot obține până la 25 de puncte în plus. | ||
| + | </note> | ||
| + | |||
| + | ==== Întrebări și Răspunsuri ==== | ||
| + | |||
| + | Pentru întrebări vom folosi forumurile de pe moodle. Orice nu este menționat în temă este la latitudinea fiecărui student! | ||
| + | |||
| + | ==== Notare ==== | ||
| + | |||
| + | Baremul este orientativ. Fiecare asistent are o anumită libertate în evaluarea temelor (de exemplu, să dea punctaj parțial pentru implementarea incompletă a unei funcționalități sau să scadă pentru hard coding). Același lucru este valabil atât pentru funcționalitățile obligatorii, cât și pentru bonusuri. | ||
| + | |||
| + | <note warning> | ||
| + | Tema trebuie încărcată pe moodle. Pentru a fi punctată, tema trebuie prezentată la laborator. Vor exista laboratoare speciale de prezentare a temelor (care vor fi anunțate). | ||
| + | </note> | ||
| + | |||
| + | ==== Indicații Suplimentare ==== | ||
| + | |||
| + | Tema va fi implementată în OpenGL și C++. Este indicat să folosiți framework-ul și Visual Studio. | ||
| + | |||
| + | <note> | ||
| + | Pentru implementarea temei, în folderul src/lab_m1 puteți crea un nou folder, de exemplu Tema2, cu fișierele Tema2.cpp și Tema2.h (pentru implementare POO, este indicat să aveți și alte fișiere). Pentru a vedea fișierele nou create în Visual Studio în Solution Explorer, apăsați click dreapta pe filtrul lab_m1 și selectați Add→New Filter. După ce creați un nou filtru, de exemplu Tema2, dați click dreapta și selectați Add→Existing Item. Astfel adăugați toate fișierele din folderul nou creat. În fișierul lab_list.h trebuie adăugată și calea către header-ul temei. De exemplu: #include “lab_m1/Tema2/Tema2.h” | ||
| + | </note> | ||
| + | |||
| + | ==== Arhivarea proiectului ==== | ||
| + | <note> | ||
| + | * În mod normal arhiva trebuie să conțină toate resursele necesare compilării și rulării | ||
| + | * Înainte de a face arhiva asigurați-vă că ați curățat proiectul Visual Studio: | ||
| + | * Click dreapta pe proiect în **Solution Explorer** -> **Clean Solution** | ||
| + | * Ștergeți folderul __**/build/.vs**__ (dacă nu îl vedeți, **este posibil să fie ascuns**) | ||
| + | * În cazul în care arhiva tot depășește limita de 50MB (nu ar trebui), puteți să ștergeți și folderul __**/deps**__ sau __**/assets**__ întrucât se pot adăuga la testare. Nu este recomandat să faceți acest lucru întrucât îngreunează mult testarea în cazul în care versiunea curentă a bibliotecilor/resurselor diferă de versiunea utilizată la momentul scrierii temei. | ||
| + | </note> | ||
| - | Cerințe avansate (la alegere) | ||