Custom C++ game engine
Technical
This project uses SDL for player input and sound, imgui for UI and glm as math library.
The engine
It is made based on design patterns to have the core functionality needed for games. The first one of these patterns is the update method, which allows people to manage the behavior of game objects by overriding an update method. The engine does not have a fixed update since its goal was to run an arcade game that is not physics-based. To customize objects the way the user wants I added components so you can add only the functionality you need to game objects that need it. Next up was adding observers so objects could interact and react if necessary. After making sure objects could communicate I added the option to add player input using SDL. This input uses the command pattern to have objects act the way the user wants. Last but not least I added the option to add sound to games with the help of the service locator pattern which loads sound on a different thread for better performance.
The game
In order to test the functionality, I implemented Qbert. It consists out of three levels of which the data is read in from a JSON file. All Qbert enemies are in the game, so the player has to be aware of Coily, Wrongway and Ugg because hitting them makes the player lose a life. Slik and Sam take away some of the player's progress and can be eliminated by colliding with them. On top of the base version of the game, I also added a co-op version and a versus mode, where a second player plays as Coily. Players can either choose to play using a controller or using a keyboard.