Skip to content

Latest commit

 

History

History
93 lines (79 loc) · 5.59 KB

File metadata and controls

93 lines (79 loc) · 5.59 KB

Find Rakis

You are a ship in a randomly generated universe. The universe has multiple solar systems. You must use your three tools to travel: the hyperdrive, the thrusters, the gun and the extractor.

  • Using your gun you can destroy asteroids to harvest special fuel for your hyperdrive.
  • Using your extractor you can get normal fuel from stars and gas giants.
  • Using your thrusters you can traverse solar systems.
  • Using your hyperdrive you can move between solar systems.

Controls :

  • You move forward using the up key.
  • You rotate left using the left key.
  • You rotate right using the right key.
  • You interact using the c button.
  • You switch between interactions using the down key.

You balance your different types of fuels while looking for the planet desert orange planet rakis. When you find it, you will be notified of the time it took for you to find it and distance traveled.

You have limited fuel and using your knowledge of space travel, you must find the planet Rakis, so you can get the spice. The game relies a lot on its atmosphere since the gameplay is simple.

Tema 0

  • Nume proiect (poate fi schimbat ulterior)
  • Scurtă descriere a temei alese, ce v-ați propus să implementați

Tema 1

Cerințe

  • definirea a minim 3-4 clase folosind compunere cu clasele definite de voi; moștenirile nu se iau în considerare aici
  • constructori de inițializare cu parametri pentru fiecare clasă
  • pentru o aceeași (singură) clasă: constructor de copiere, operator= de copiere, destructor
  • operator<< pentru toate clasele pentru afișare (std::ostream) folosind compunere de apeluri cu operator<<
  • cât mai multe const (unde este cazul) și funcții private
  • implementarea a minim 3 funcții membru publice pentru funcționalități netriviale specifice temei alese, dintre care cel puțin 1-2 funcții mai complexe
    • nu doar citiri/afișări sau adăugat/șters elemente într-un/dintr-un vector
  • scenariu de utilizare cu sens a claselor definite:
    • crearea de obiecte și apelarea tuturor funcțiilor membru publice în main
    • vor fi adăugate în fișierul tastatura.txt DOAR exemple de date de intrare de la tastatură (dacă există); dacă aveți nevoie de date din fișiere, creați alte fișiere separat
  • minim 50-55% din codul propriu să fie C++, .gitattributes configurat corect
  • tag de git: de exemplu v0.1
  • serviciu de integrare continuă (CI) cu toate bifele; exemplu: GitHub Actions
  • code review #1 2 proiecte

Tema 2

Cerințe

  • separarea codului din clase în .h (sau .hpp) și .cpp
  • moșteniri:
    • minim o clasă de bază și 3 clase derivate din aceeași ierarhie
    • ierarhia trebuie să fie cu bază proprie, nu derivată dintr-o clasă predefinită
    • funcții virtuale (pure) apelate prin pointeri de bază din clasa care conține atributul de tip pointer de bază
      • minim o funcție virtuală va fi specifică temei (i.e. nu simple citiri/afișări sau preluate din biblioteci i.e. draw/update/render)
      • constructori virtuali (clone): sunt necesari, dar nu se consideră funcții specifice temei
      • afișare virtuală, interfață non-virtuală
    • apelarea constructorului din clasa de bază din constructori din derivate
    • clasă cu atribut de tip pointer la o clasă de bază cu derivate; aici apelați funcțiile virtuale prin pointer de bază, eventual prin interfața non-virtuală din bază
      • suprascris cc/op= pentru copieri/atribuiri corecte, copy and swap
      • dynamic_cast/std::dynamic_pointer_cast pentru downcast cu sens
      • smart pointers (recomandat, opțional)
  • excepții
    • ierarhie proprie cu baza std::exception sau derivată din std::exception; minim 3 clase pentru erori specifice distincte
      • clasele de excepții trebuie să trateze categorii de erori distincte (exemplu de erori echivalente: citire fișiere cu diverse extensii)
    • utilizare cu sens: de exemplu, throw în constructor (sau funcție care întoarce un obiect), try/catch în main
    • această ierarhie va fi complet independentă de ierarhia cu funcții virtuale
  • funcții și atribute static
  • STL
  • cât mai multe const
  • funcții de nivel înalt, de eliminat cât mai mulți getters/setters/funcții low-level
  • minim 75-80% din codul propriu să fie C++
  • la sfârșit: commit separat cu adăugarea unei noi clase derivate fără a modifica restul codului, pe lângă cele 3 derivate deja adăugate din aceeași ierarhie
    • noua derivată nu poate fi una existentă care a fost ștearsă și adăugată din nou
    • noua derivată va fi integrată în codul existent (adică va fi folosită, nu adăugată doar ca să fie)
  • tag de git pe commit cu toate bifele: de exemplu v0.2
  • code review #2 2 proiecte

Tema 3

Cerințe

  • 2 șabloane de proiectare (design patterns)
  • o clasă șablon cu sens; minim 2 instanțieri
    • preferabil și o funcție șablon (template) cu sens; minim 2 instanțieri
  • minim 85% din codul propriu să fie C++
  • tag de git pe commit cu toate bifele: de exemplu v0.3 sau v1.0
  • code review #3 2 proiecte

Resurse