For this project, I created a game engine in C++ to recreate the classical arcade game Qbert.
I tried to make my Engine as polyvalent as possible.
I made the qbert game as close as possible from the original, but I also added a few surprises...
This project consists in two parts :
An open-source ownmade game engine that you can discover on my Github repository. This is a basic 2D game engine to make small games quickly.
A remake of Qbert, the famous arcade game. I also added a coop and a versus mode to make the game funnier.
This project was realized as a part of my Game Programming 4 cours during my second year at Howest Digital Arts and Entertainment.
For this project I implemented almost everything by myself. I created the Engine in C++ by myself based on Minigin, which is a very simple starter project including libraries like SDL and glm and that I used as a barebone for my full project.
For the game engine part, here is an non-exhaustive list of the features I implemented :
Game object, transform and components.
Scene switching.
Ready to use for any case Finite State Machine (FSM).
Sound System.
Event handling.
Text and images.
Controller and commands handling.
Base component that can be used quickly
Text
Image
FSM
UI
and more...
For the gameplay part, I recreated QBert from scratch. Here is a quick overview of the most important features I implemented :
Multiple game modes
Single mode (classic game)
Coop mode (2 QBerts in the level, two controllers are required)
Versus mode (1 Player as Qbert, 1 Player as enemy, two controllers are required)
Levels are loaded from json files
You can increase the amount of enemies if you want additional difficulty.
Base QBert gameplay:
Jump
Direction (character moving diagonally)
Enemies
Map completion system
Discs
Switch between scenes for every level.
Life system.
For this project, I exclusively used C++20 as a language and Visual Studio 2022 as an IDE. All the project was made from scracth except a few features.
However, I used the following libraries to make my life easier:
ImGUI (for test purpose only)
SDL (for the images)
SDL_Mixer (sound)
XInput (controllers)
glm (basic math features like vector and matrices)
Minigin (as a barebone)
I learned a lot by doing this project.
Of course, on a technical side, I know way better how a game engine work. But I also learned to deal with such ambitious project like this one.
Technical Learning :
I learned a lot about game programming patterns :
Game objects
Transform
Dirty flag
Controller
Finit State Machine (FSM)
Component
Service Locator
Observer
Event Queue
I improved my knowledge of modern C++20 programming.
I learned to use libraries like ImGUI or XInput.
I improved my knowledge of SDL, SDL_Mixel and glm.
Project managment learning :
With this project, I learned to deal with my ambition. When I got the assignment to make a game engine, of course I wanted to create the new Unreal Engine and I was sincerely motivated to do it. But it wasn't unfortunately possible for multiple reason. Unreal was made by an expensive amount of people really skilled in their domain and specilized in a wide range of domains. I couldn't decently learn all of this, especially in the short amount of time that was given to me to realize this engine. I had to review my ambitions to keep my project at a reachable scope and that serve the purpose of my game. Thinking that way, I focused on implemnting the features I really needed.