top of page

Data Surge

About

Data Surge is a 2D Bullet Hell Shooter set in a cybernetic universe where the player takes on the role of a defensive programme battling waves of computer viruses. The game's frenetic gameplay is a blend of dynamic shooting and strategic power ups.
 
Its variety of enemies guarantees an incremental difficulty, allowing for different gameplay between the different rounds. The aim of the game is to achieve the highest possible score over a theoretically infinite number of rounds.

My role

I developed this game on my own in C++ using SDL2. I structured the code in a modular way, creating dedicated classes for the player, the enemies, the state machine and so on. The game's main loop was coded manually to maintain fine-grained control over the flow of the game. Position calculations and transformations are carried out using the GLM library to ensure precision.
I implemented optimisation mechanisms such as smart pointers and object pools to ensure smooth performance and a clean, scalable code architecture.

Project objective

This project was designed as part of my Bac2 Q2 programming exam at the Haute École Albert Jacquard college. The aim was to create a complete Bullet Hell Shooter, using only SDL2 and C++. I set myself the challenge of implementing advanced mechanisms (manual memory management, modular architecture, state machine, etc.), in order to strengthen my technical knowledge and produce an optimised game.

Main features

  • A variety of enemies: there are five different types of enemy, each with a different level of difficulty

  • Power-ups: there are 4 different power-ups, each with 3 different rarities

  • Scoring and progression system: points awarded according to the type of enemy eliminated

  • Modular architecture: state machine to clearly organise game behaviour

  • Object pooling: optimised reuse of projectiles and entities in memory to optimise performance and limit dynamic allocations during gameplay

  • Single level: the level tilemap is organised differently each time a new game is launched

  • Collision detection: the collision system is based on rectangles to manage interactions between the player, enemies and projectiles

Technologies used

  • SDL2

  • C++

  • GLM (for vector calculations)

Logs.png
Settings.png

With the unlimited framerate, the game can easily run at several thousand fps without any difficulty.

Challenges and solutions

Manual memory management in C++ was a major challenge: each object (player, enemies, projectiles, etc.) must be correctly allocated and released to avoid leaks. To optimise this, I implemented an object pooling system, which reduced the number of dynamic allocations and improved performance. The implementation of a reflective state machine allows for smoother management of the display of different screens. In order to maintain a stable framerate in the presence of numerous entities on screen, I've optimised the game loop and collision detection. These optimisations guarantee fluid gameplay even at the most intense moments.

What this project shows about me

This project demonstrates my desire to optimise, my autonomy and my rigour. I managed the development of this project on my own, from conception to finalisation. I planned and tested every feature to ensure that the game performed well and was fun to play. Finally, Data Surge reflects my passion for video game development, as well as my desire to produce a functional and polished project.

Personal reflection and learning

This project has enabled me to develop several key skills. I learnt how to manage memory in C++ and how to use pointers intelligently to avoid leaks. I strengthened my software architecture skills by breaking the game down into different parts such as player management, enemies and interfaces. I've also learnt how to optimise my code to maintain high performance. I'm now able to create and correctly manage an SDL2 game loop, as well as the graphical rendering and input management within this framework.

Links / Download

At the moment, Data Surge is not available for public download. I plan to make it available in the near future.

bottom of page