Used Tehnologies: C++, CMake, SFML
Poo's Musically Fight is a game that combines my two main passions: games and music. Built in C++ using Object-Oriented Programming (OOP) concepts, this project is designed to showcase my skills in game development and software engineering.
In this game, your mission is to fight against waves of enemies, with each hit contributing to the creation of a song. The more enemies you defeat, the more complex and interesting your musical composition becomes.
- C++ Development: The game is developed in C++, showcasing proficiency in a widely-used programming language.
- Object-Oriented Programming: Utilizes OOP concepts to create a modular and maintainable codebase.
- Interactive Gameplay: Players engage in combat with waves of enemies, with each action contributing to a dynamic soundtrack.
- Music Integration: Every hit and action in the game contributes to an evolving musical piece, making each playthrough unique.
- Movement:
W
,A
,S
,D
(UP
,LEFT
,DOWN
,RIGHT
) - Attack (can't spam it):
SPACE
- Pause:
ESC
Aveți voie cu cod generat de modele de limbaj la care nu ați contribuit semnificativ doar în folder-ul generated
.
Codul generat pus "ca să fie"/pe care nu îl înțelegeți se punctează doar pentru puncte bonus, doar în contextul
în care oferă funcționalități ajutătoare și doar dacă are sens.
O cerință nu se consideră îndeplinită dacă este realizată doar ca o serie de apeluri proxy către cod generate.
- Project name (can be changed later)
- Short description of the chosen theme, what you aim to implement
- Define at least 3-4 classes using composition with the classes you have defined
- Initialization constructors
- For the same (single) class: copy constructor, copy
operator=
, destructor
-
operator<<
for all classes for display (std::ostream) - As many
const
as possible (where applicable) - Implement at least 3 public member functions for functionalities specific to the chosen theme, including at least 1-2 more complex functions
- Not just read/display or add/remove elements in/from a vector
-
git
tag: for examplev0.1
- Continuous integration (CI) service; example: GitHub Actions
- Separate code from classes into
.h
(or.hpp
) and.cpp
- Inheritance:
- At least one base class and 3 derived classes
- The hierarchy must have its own base, not derived from a predefined class
- Class with an attribute of type pointer to a base class with derivatives
- Virtual (pure) functions called through base pointers from the class containing the base pointer attribute
- At least one virtual function must be specific to the theme (e.g., not just simple read/display)
- Virtual constructors (clone): necessary but not considered specific functions for the theme
- Call the base class constructor from the derived constructors
- Smart pointers (recommended, optional)
-
dynamic_cast
/std::dynamic_pointer_cast
for meaningful downcasting
- Override cc/op= for correct copying/assigning, copy and swap
- Exceptions
- Own hierarchy based on
std::exception
or derived fromstd::exception
; at least 3 classes for specific errors - Meaningful usage: for example,
throw
in the constructor (or function returning an object),try
/catch
inmain
- Own hierarchy based on
- Static functions and attributes
- STL
- As many
const
as possible - At the end: separate commit with the addition of a new derived class without modifying the rest of the code, besides the already added 3 derived classes
- The new derived class cannot be an existing one that was deleted and added again
-
git
tag: for examplev0.2
- 2 design patterns
- A meaningful template class; at least 2 instantiations
- Preferably also a meaningful template function; at least 2 instantiations
-
git
tag: for examplev0.3
orv1.0
- SFML (Zlib)