Arkanoid
As a technical test for an interview as a gameplay programmer, I was tasked with programming the video game Arkanoid.
The development time was one week, with 4-5 hours of work spent on the project per day.
You can download the project from the github: https://github.com/carloscaz/Arkanoid

Features of Arkanoid
Entity Component System (ECS)
The code architecture and design are based on an Entity Component System (ECS) that I created from scratch.
The ECS works through different systems that execute their respective logic using data from the components of the different entities present in the game.
The systems existing in this Arkanoid project are:
Ball System: Executes the logic related to the balls present in the game.
Brick System: Executes the deactivation of bricks when they are hit by the ball.
Collision System: Responsible for checking collisions between the different game entities that have collision enabled.
Level System: Responsible for managing the loading of different levels.
Player System: Responsible for executing the logic related to the player's actions.
PowerUp System: Responsible for executing the logic for the different powerups available in the game.
Render System: Manages the rendering of all game entities on the screen.
UI System: Manages the logic associated with all UI elements present.
Game Design Patterns
During development, I also considered implementing design patterns.
I primarily implemented the singleton design pattern, as it allows for the creation of a single instance of a class, avoiding the possibility of creating duplicate instances. I implemented this pattern in the ECS systems, as only one instance of each system should exist at any given time.
Collision System
One of the main aspects of the project is collision checking between different entities. The approach used was to check for collisions between balls and bricks on the one hand and the player, and for collisions between the player and power-ups on the other. To do this, I implemented my own collision system of the circle-box collision type, optimizing the system by pre-checking the distance between entities to avoid unnecessary calculations if the entities are far away.
Technologies used
For this project, I used the following technologies:
C++ as programming language
OpenGL and GLFW for the graphics
GLM for the math operations
stb_image to load sprites in OpenGL
ImGUI to create a simple UI for the player score
RapidJSON to create a data driven architecture