As part of the practical course following the lecture The C++ Programming Language at the University of Osnabrück, we had two weeks to develop a complete game in a team of 11 students, including a level editor. The project involved working with libraries such as Box2D for physics and Boost, as well as the HDF5 data format. We decided to develop Bomberperson, a Bomberman-inspired multiplayer game with a few additional mechanics.
The Game
Bomberperson is a maze-based multiplayer game for 2-4 players, where the goal is simple: eliminate the other players and be the last one standing. Players can place bombs that explode after a short delay, sending explosions in multiple directions, destroying obstacles and potentially killing other players. Destroyed obstacles can drop power-ups, which can temporarily improve a player’s abilities or make their life more difficult.

We added quite a few items and mechanics beyond the classic Bomberman gameplay. Players can collect coins, throw Koopa shells at each other, and pick up various upgrades that increase their running speed, explosion range, strength, immunity, or health. Not all items are beneficial, though: some slow players down or even trigger explosions.
There are also different types of floor tiles, which affect how players move around the level. Mud slows them down, oil makes movement slippery, speedpads accelerate or decelerate them, and a special ghost carpet allows players to walk through walls. Objects have different physical properties and interactions: some can be destroyed by explosions, others can be pushed, pulled, or thrown around. Getting caught in an explosion kills a player, while getting hit by a Koopa shell reduces their health.
The game supports both keyboard and gamepad controls, includes sound effects, and features multiple levels with different themes, including one set on the moon.
The Level Editor
Besides the game itself, we developed a level editor that allows players to create their own maps or modify existing ones. Users can place walls, obstacles, items, and player starting positions, select from different tilesets, or import their own custom tilesets.
Levels are stored as XML files, containing not only the arrangement of the map but also various gameplay and physics parameters. These include player speed, bomb range, game duration, friction, damping, and movement forces. This allows levels to behave quite differently, beyond just looking different.
The editor supports up to four player starting positions, with at least one required to save a level. Created levels can be loaded and played directly in the game.
The Technical Implementation
Under the hood, Bomberperson uses a custom C++ game engine built around SDL, Box2D, and Boost.
At the center is the Game class, which manages the game window, physics context, and the currently loaded level. The Level class contains all game objects, organized into separate collections for tiles, items, and players.
We designed the game around a common Entity base class, which provides functionality shared by the different types of objects. Each entity implements a tick() method that updates its state during the game loop, as well as methods for interacting with other objects, such as gotHit(). The level’s render() method then iterates over the entities to draw them at their current positions.
The physics simulation is handled separately through Box2D. Each game entity has a corresponding physics entity managed by the PhysicsContext, which handles its position and physical interactions. When rendering an object, its position is obtained from the physics simulation rather than maintained separately by the rendering code.
We also implemented several factories to manage the large number of different objects and textures. The ItemFactory, for example, can spawn random items at a given position when an obstacle is destroyed. Other objects, such as boxes, oil pads, and special floor tiles, are created directly from the level configuration.
The texture factory loads and deduplicates textures, avoiding unnecessary copies of the same resources. It also manages animated sprites and their frame updates. For objects that should animate synchronously, such as multiple identical boxes, the animations are kept in sync rather than having each object advance independently.
With all the different entity types, their interactions, and their physical properties, the game became quite a bit more complex than a simple grid-based Bomberman clone. Especially considering that we developed it together with the level editor in just two weeks!
Gameplay Video
Unfortunately, we had to use a strict license, so I cannot currently provide a playable version of the game, but here’s a video showing it in action: