Tema 2 - Avion cu Motor

  • Responsabili: Alex Grădinaru, Anca Băluțoiu
  • Lansare: 8 noiembrie
  • Termen de predare: 29 noiembrie 2019, ora 23:55 (30 și 1 nu se vor considera întârziere)
  • Notă: Orice informație ce nu a fost acoperită în acest document este la latitudinea voastră!

În cadrul temei 2 trebuie să implementați un joc în care sunteți un aviator ce nu trebuie să se lovească de obstacole și nici să rămână fără combustibil pentru avion.

Demo (cu tot cu bonusuri):

Gameplay

Jocul va fi un endless runner cu un avion într-o mișcare continuă de la stânga la dreapta. Pentru control avionul va urmări mouse-ul în deplasarea sus-jos. În momentul în care avionul merge în sus, acesta va fi rotit corespunzător cu partea din față a avionului orientată înspre cer. Când acesta merge în jos, avionul va fi rotit înspre mare.

Pilotul va avea un total de 3 vieți. În scenă, vor apărea periodic obstacole pe care pilotul trebuie să le evite. Dacă nu reușește să le evite și intră în ele, acesta va pierde o viață. În momentul în care rămâne fără vieți, jocul s-a terminat.

De asemenea, pilotul trebuie să aibă în calcul și cât combustibil mai are. Combustibilul se consumă constant în timp sau în momentul accelerării. În momentul în care rămâne fără combustibil, jocul s-a terminat. Pentru a nu rămâne fără combustibil, pilotul trebuie să adune cât mai multe obiecte de combustibil.

Pentru a evidenția finalul jocului se va implementa o animație de prăbușire a avionului prin rotirea și căderea acestuia în jos (vedeți un exemplu la finalul demo-ului).

Jucătorul va avea la dispoziție o cameră first person și o cameră third person asemănătoare cu cea din demo. Se poate schimba între cele două camere prin apăsarea tastei C.

Construcția Scenei

  • Avionul: Pentru a crea avionul, veți folosi mai multe forme simple. De exemplu, puteți folosi cuburi de mărimi și culori diferite. Astfel, puteți avea două cuburi pentru aripi, un cub pentru coadă, un cub pentru corp, un cub pentru cap, un cub pentru elice și un cub pentru suportul de elice. De asemenea, elicea avionului trebuie să se rotească în continuu (exemplu în figura de mai jos).

  • Norii: Norii vor fi și ei, la rândul lor, construiți din mai multe forme simple. Puteți să îi construiți, folosind 4 cuburi poziționate aleator unul lângă altul. Un exemplu de nor aveți în figura de mai jos. Norii trebuie să aibă o animație (de exemplu să se rotească anumite cuburi din componența lor).

  • Marea: Pentru a crea marea deasupra căreia zboară avionul, veți folosi un cilindru pe care îl veți plasa centrat în partea de jos a ecranului. Pentru realism, marea va avea valuri generate și se va roti în continuu. Valurile vor fi realizate în Vertex Shader prin deformări aleatoare, dar care sa asigure o continuitate in timp (de exemplu se pot defini varfuri interioare cilindrului cu pozitii distorsionate ca in figura, iar apoi se poate aplica in vertex shader o rotație în jurul poziției inițiale pentru fiecare vertex al cilindrului, fiecare astfel de rotație având viteză și rază aleatoare definita pentru vertexul respectiv)

  • Obstacole: Obstacolele vor fi reprezentate în scenă prin obiecte de culoare roșie (de exemplu sfere) cu o animație de rotație. În momentul coliziunii cu avionul acestea dispar iar jucătorul pierde o viață.
  • Combustibil: Alimentarea avionului se poate face din zbor prin colectarea obiectelor de combustibil. Acestea vor fi reprezentate de obiecte cu o culoare turcoaz, vor dispuse într-o înșiruire arcuită și vor avea o animație de rotire permanentă. Pot fi reprezentate spre exemplu prin obiecte de tip Teapot. În momentul coliziunii cu avionul acestea dispar, iar combustibilul avionului va crește.

Mai multe informatii despre coliziuni si cum se pot implementa in 3D:

Interfața cu utilizatorul

Atât viețile rămase, cât și combustibilul disponibil vor fi afișate pe ecran. Pentru acest lucru se pot folosi orice forme sau metode care să exprime acest lucru: sugerăm folosirea unor sfere pentru vieți și două dreptunghiuri suprapuse pentru combustibil (unul negru în spate și unul colorat în față, care se va scala pentru a evidenția consumarea combustibilului).

Bonusuri Posibile

Pe lângă obstacole sau combustibil, pot să existe și alte obiecte specifice în scenă ce aduc anumite beneficii/dezavantaje (de exemplu, o sferă galbenă poate aduce o viață în plus sau un cub verde face avionul invincibil pentru o perioadă de timp, sau poate trage proiectile pentru distrugerea obstacolelor etc.).

  • Avion realist: corpul avionului nu va fi un simplu cub/paralelipiped, ci va fi mai îngust spre coadă și mai larg spre față. De asemenea, elicea avionului trebuie să se rotească în conformitate cu accelerația avionului (de exemplu dacă accelerează se rotește mai repede, altfel mai încet).

  • Pilot: pilotul va fi creat asemănător avionului, folosind mai multe forme simple de mărimi și culori diferite. Pentru că pilotul avionului este un pilot fabulos, acesta va avea pletele în vânt. Astfel, folosind simple translatări ale formelor ce alcătuiesc părul, se va crea impresia că părul acestuia este în bătaia vântului, sau se pot folosi de asemenea deformări în Vertex Shader pentru simularea mișcării părului

  • Creșterea dificultății jocului pe măsură ce trece timpul
  • Avionul scoate fum cand accelereaza
  • În momentul coliziunii, obiectele se sparg în mai multe bucățele (ca în video)
  • Iluminare: Avionul are lumini de tip spot în fața avionului

Notare (150p)

  • Construcția avionului (total 30p)
    • Componente (10p)
    • Deplasare (10p)
    • Animații (10p)
  • Construcția mediului (total 70p)
    • Marea (obiect + deformare animata in shader) (30p)
    • Norii (15p)
    • Combustibil (15p)
    • Obstacole (10p)
  • Interfața cu utilizatorul (10p)
  • Implementarea camerei third person (20p)
  • Implementarea camerei first person (20p)

Arhivarea proiectului

  • Î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 dat clean la proiect
    • Click dreapta pe proiect în Solution ExplorerClean Solution, sau
    • Ștergeți folderul /Visual Studio/obj
  • Ștergeți fișierul /Visual Studio/Framework_EGC.sdf (în caz că există)
  • Ștergeți fișierul /Visual Studio/Framework_EGC.VC.db (în caz că există)
  • Ștergeți folderul /.vs (în caz că există)
  • Ștergeți folderul /x64 sau /x86 (în caz că există)
    • Executabilul final este generat în folderul /x86 sau /x64 la finalul link-editării în funcție de arhitectura aleasă la compilare (32/64 biți)
  • În cazul în care arhiva tot depășește limita de 20MB (nu ar trebui), puteți să ștergeți și folderul /libs sau /Resources î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.

egc/teme/2019/02.txt · Last modified: 2019/11/12 07:57 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