Project Description
Dungeon Rush is a turn-based RPG x endless runner game that I built in Python alongside one other teammate. I designed and pitched the original concept, and I programmed the combat engine as well as the runner-mode abilities. In the game, players control a party of three characters (a warrior, archer, and wizard). The main gamemode is an auto-runner game in which the player must avoid obstacles and reach the end goal within the time limit. If the player collides with an enemy, they must defeat a party of enemies within a turn-based battle system. They must make decisions quickly to save as much time as possible. Each character and enemy has unique stats and abilities, and in the runner mode, each playable character has unique abilities that help the player to avoid obstacles.
Accomplishments
- Designed and successfully pitched the project.
- Created and adhered to a production plan that resulted in implementation of all MVP features.
- Programmed a versatile RPG combat system.
- Made animated sprites for the playable characters.
- Built a dictionary data structure that allowed for quick editing and addition of levels.
- Designed and implemented functionality for the game's UI.
- My first game completed as part of a team.
Objectives and Implementation
My goal with this project was to design a unique concept that would give me experience programming several different game mechanics and make for fun and interesting gameplay. I also worked to apply many of the object-oriented programming technziques that I had learned over the course of my freshman year. The three main object types (player, enemy, obstacle) inherited from base classes which made it easy to build content into the game.

For example, all collision between player and enemies is handled by the base enemy class, and all of the debuffs we implemented are handled by the base class as well.
Another aspect of the game that I played a large role in programming was the level manager. In order to make it easy to add new levels to the game, I created a level dictionary which would store all of the informtation that the game loop needed in order to run a new level, which made it simple to balance and modify different sections of the game.

Left to right, the data included the player's speed, time range between enemy spawns, list of potential enemy spawns, the leve's boss, the amount of distance from the player's starting location to the boss, and the level's timer. These were all of the variables that we wanted to modify between levels, and storing them in this way allowed us to both add and scale the difficulty of levels on the fly.
Reflection
Looking back on my code, there are certainly many improvements that could be made. For instance, though the code for drawing enemies could easily have been implemented in the base enemy class, I ended up creating separate functions for each enemy type. Despite the naive implementation of many things, I am quite proud of how this project turned out. I was able to design a concept, create a realistic development timeline, and execute on it. I also gained valuable experience on how to collaborate with other programmers and utilize version control software, and I learned firsthand how essential it is to pre-plan the overarching systems that need to be programmed into the game.