Student Project: Programming Games

Universität der Bundeswehr München, 2020


Abstract icons for a UML diagram, some program code, and a game controller

Starting in 2020, I have been one of several project group supervisors in the Programming Project at the UniBw M. Having learned the fundamentals of object-oriented programming, in this module the students gather in teams and develop their first full software project, a reimplementation of an existing game concept, from start to finish.

Plants vs. Zombies

Project Team

  • Desiree Arnold
  • Noah Dieckmann
  • Sven Keineke
  • Dominic Knopf
  • Heiner Lüken
  • Matthias Sporck
  • Florian Stender


  • Julian Fietkau
  • Bastian Bauers

Plants vs. Zombies is a single-player game commonly ascribed to the “tower defense” genre. The game runs in real time and has waves of attacking zombies approach from the right side of the screen. The player is tasked with building suitable defenses to prevent them from reaching the left side of the on-screen lawn. To that end, various plants can be placed in the zombies’ path, but this ability is contingent on the game’s main resource – sunlight – which must be gathered and farmed.

This version of the game puts its own twist on the visual style of the original, featuring all custom artwork. The plant arsenal has been reduced to a subset of the original game and some other aspects of the gameplay (zombie variety, environmental aspects, progression unlocks) have also been streamlined. One of the bigger programming challenges was making sure that no matter how many plants, zombies and sunlight nuggets are on screen, everything behaves as it should and animates fluidly. The final stage of this game features an all-new boss fight (against “Dr. Zomboss”), and upon winning it, the player gains access to an endless mode that consists of increasingly difficult waves of zombies.


Project Team

  • Jakob Bräunlich
  • Jakob Layer
  • Alexander Macharski
  • Jan Magnusson
  • Robin Marth
  • Florian Nußbaum
  • Alessandro Pedace


  • Julian Fietkau
  • Ibrahim Hamade

Pokémon is a game consisting of several complex subsystems, such as its 2D world and the player’s movement therein as well as the turn-based fights based on attack moves with element type advantages. Like in the original games, wild Pokémon can be encountered in the tall grass, and they can then be caught and trained. The game features a world map sporting two towns with Pokémon Centers and PokéMarts, a number of NPCs, and a gym with five enemy trainers ascending in difficulty.

Due to the time constraints of the Programming Project, this version of the game naturally has a reduced scope compared to the original. It contains 304 Pokémon species (the real franchise is up to 900 at the time of writing) and only five of the 18 element types found in the original series. The fighting moves are restricted to pure attack moves (the Pokémon do not have stats other than HP and AP) and the only kind of item in the game are Pokéballs. Nonetheless, the team went through significant effort to replicate the menu and dialog UI experience from the early-2000s Pokémon games. At the end of the course time, the project even gained a multiplayer component that features not only the possibility of Pokémon fights between players, but also a shared overworld with real-time movement and text chatting.


The Programming Project is a core module in the undergrad computer science degree at UniBw M. It builds upon earlier courses (most specifically Object-oriented Programming) to guide students from their experience with small-scale exercises in solo programming to full-fledged team-based software development projects.

After forming teams of 6 to 8 students, they pick a game concept from a provided list. Designing and implementing this game is their overarching goal for the next three months, during which they proceed through a number of project phases which reflect the classic waterfall model of software development: first they explore and define the goal in detail, then they workshop a software architecture design (also in increasing detail) before starting their implementation, for which the Programming Project currently uses Java and JavaFX. The tail end of the project allows for two weeks of minor revisions and bugfixes before the results are presented and discussed. Besides the finished implementation, project results also consist of documentation artifacts such as UML class diagrams, flow charts, state and sequence diagrams, use case descriptions and unit testing manuals.

Throughout this entire process, the student groups share weekly meetings with their tutor (a senior student who has already completed the course) and their supervisor (a university employee). My role as the supervisor is partly organizational – ensuring that commitments are being kept, that documentation is being completed on time, and that the work stays goal-oriented – and partly technical when it comes to discussions about the details of software architecture or the use of modern programming tools.