Tema 1: AstroKitty

  • Responsabil: Radu Boeru, Alex Gradinaru
  • Perioada de lucru: 18 Octombrie - 1 Noiembrie (2 saptamani)
  • Termen de predare: 1 Noiembrie 2017, 23:55
  • Depunctare intarziere: 2.5p/zi pana la maxim 40p din totalul de 150p

Enunt

Scopul temei - Implementarea unui joc 2D prin utilizarea conceptelor prezentate in primele 3 laboratoare:

  • constructia de meshe simple
  • tratarea evenimentelor pentru mouse
  • utilizarea transformarilor 2D: translatie, rotatie, scalare

Cerinta - Sa se implementeze in OpenGL o aplicatie in care utilizatorul poate controla un astronaut printre platforme si asteroizi pana ajunge la o pozitie de sfarsit.

Astronautul se lanseaza intr-o directie si va merge cu viteza constanta pana la intalnirea unui obstacol. Exista mai multe tipuri de obstacole:

  • platforme de stationare: daca astronautul atinge o astfel de platforma acesta va stationa pe ea
  • platforme de reflexie: daca astronautul atinge o astfel de platforma va fi deplasat mai departe cu acelasi unghi cu care a ajuns pe platforma (fenomen de reflexie)
  • asteroizi: daca astronautul atinge un asteroid, acesta din urma este distrus, iar astronautul este propulsat in alta directie, in functie de unghiul de lovire
  • platforma finala: daca astronautul atinge o astfel de platforma se termina jocul (sau nivelul)

Controlul se va face astfel:

  • folosind pozitia cursorului se va indica directia de deplasare a caracterului
  • folosind click-ul de la mouse se poate lansa caracterul

Ciocnirea sau atingerea a doua obiecte se defineste prin termenul de coliziune. Determinarea coliziunii poate fi simplificata prin aproximarea caracterului cu un cerc.

Astronautul trebui sa isi pastreze orientarea atat in cazul deplasarii cat si in cazul stationarii. In cazul platformelor care sunt deasupra caracterului, orientarea va fi in jos, altfel in sus. In cazul deplasarii, orientarea trebuie sa fie in directia deplasarii. Exemplu minimal:

Geometrie minimala

  • Astronaut ↔ triunghi
  • Asteroizii ↔ discuri de cerc (minim 8 varfuri) cu rotatie, translatie sau scalare permanenta (discretizarea punctelor poate fi facuta cu un pas mai mare astfel incat sa fie observata mai bine rotatia acestora)
  • Platformele ↔ suprafete rectangulare fixe in spatiu

Implementare suficienta

  • Scena este fixa (nu se misca odata cu astonautul si nu exista spatiu din scena care sa nu se vada in ecran, nefiind astfel necesara miscarea ferestrei) - peretii scenei pot fi considerati platforma de stationare sau de reflexie, la alegerea voastra
  • Pentru obstacole sunt minime urmatoarele:
    • 1 platforma de stationare
    • 1 platforma de reflexie
    • 1 asteroid cu fiecare animatie (un asteroid cu rotatie, unul cu translatie si unul cu scalare) sau 2 asteroizi cu transformari compuse (ex: 1 asteroid cu scalare si translatie si 1 asteroid cu rotatie si translatie).
    • 1 platforma finala
  • Orice nu este mentionat sau specificat explicit este lasat la latitudinea voastra

Inspiratie: Rockitty

Observatii

Alte aspecte ce nu au fost prezentate raman la latitudinea voastra.

  • Se poate utiliza framework-ul de laborator sau o implementare proprie.
  • Documentatia pentru evenimentele de mouse se gaseste in fisierul /Core/Window/InputController.h

Punctajul este oferit doar pentru cerintele integrate in aceeasi scena.

Punctajul bonus se ofera doar daca cerintele obligatorii sunt implementate corect.

Arhivarea proiectului

  • in mod normal arhiva trebuie sa contina toate resursele necesare compilarii si rularii
  • inainte de a face arhiva asigurati-va 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)
  • in cazul in care arhiva tot depaseste limita de 20MB (nu ar trebui), puteti sa stergeti si folderul /libs sau /Resources intrucat se pot adauga la testare. Nu este recomandat sa faceti acest lucru intrucat ingreuneaza mult testarea in cazul in care versiunea curenta a librariilor/resurselor difera de versiunea utilizata la momentul scrierii temei.

Barem notare

  • Crearea geometriei: astronaut, platforme, asteroizi [25p]
  • Deplasare la click in directia aleasa [20p]
  • Orientare astronaut in directia de deplasare [10p]
  • Reflexie la coliziunea cu platformele de reflexie [20p]
  • Detectarea coliziunii cu platformele de stationare (incetarea miscarii) [15p]
  • Repozitionare astronaut odata ajuns pe platforma de stationare [10p]
  • Asteroizi dinamici (translatie, rotatie sau scalare) [20p]
  • Distrugere asteroid la coliziune [10p]
  • Modificare directie (reflexie si orientare) dupa coliziunea cu un asteroid [10p]
  • Oprirea jocului la atingerea pozitiei finale [5p]
  • Readme [5p]

Bonusuri posibile

  • La coliziunea cu un asteroid acesta este fragmentat in asteroizi mai mici [5p]
  • Nivel complex (platforme oblice, scena dinamica - se misca odata cu astonautul si exista spatii din scena care nu se vad la un moment dat in ecran) [5p]
  • Simularea fortelor de accelerare si prezenta unor asteroizi cu camp gravitational [5p]
  • Efect de “aterizare” la incetarea miscarii (noua orientare nu este obtinuta instant, este observata rotatia triunghiului) [5p]
egc/teme/2017/01.txt · Last modified: 2019/10/22 06:31 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