Student Project: Programming Games

Universität der Bundeswehr München, 2020–2021

Summary

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.

Elli Is You (Baba Is You)

Project Team

  • Coleen Cabalo
  • Lars Gatzemeyer
  • Marcel Kinzen
  • Jonas Lacher
  • Tim Meyer
  • Niklas Schäfer
  • Elia Sperr

Supervision

  • Julian Fietkau
  • Klaus Willimczik

In Baba Is You, the rules of the game are tangible parts of the world. Initially controlling a small white creature named Baba, the player can deconstruct and rearrange the rules that govern the logic of the game to solve puzzles consisting of various environmental obstacles. Under ordinary circumstances a key might open a door, but if no key is available, why not change the rules so the door can be opened with some water?

In this variant of the game, the default player character is a purple elephant named Elli. Featuring six levels of increasing difficulty, the player must help Elli navigate the game logic to create a winning state. Finishing the game unlocks a custom level mode, where more levels can be loaded from external text files. As a creative twist not present in the original game, Elli can be scripted: the player may write out a list of moves in advance to solve a level, including the option to loop instructions. In this way, Elli Is You intends to introduce basic programming concepts to its audience – which is also why the color scheme is inspired by the default IntelliJ syntax highlighting.

Deutschland Inc. (Factorio)

Project Team

  • James Beutler
  • Rodney Brassat
  • Niklas Mörsdorf
  • Johannes Münch
  • Chris-Miron Rickert-Nühs
  • Paul Schöne
  • Akay Schuster
  • Alexander Theiss

Supervision

  • Julian Fietkau
  • Thomas Ottenhus

Factorio is a game about industriousness and industry. Stranded on an alien planet, the player is tasked with building up automated resource production lines from nothing. Starting with a few pieces of coal and iron ore mined from the ground, they need to move from handling individual hand-operated smelters while fending off hostile alien insects to fully automatic production lines for components and products of ever-increasing complexity fed by automatic drills and huge amounts of energy. After all, the rocket for the way home cannot be built by hand.

This version of the game moves the setting to a fictionalized branch of the German military and a lone engineer fending for survival behind enemy lines. The beginning phase of the game closely mirrors the original, featuring similar procedural world generation and a thread of production moving from basic coal smelting to electrical power lines and transport belt networks – although here, the enemies are hostile soldiers instead of alien critters. As in the original, the way home is secured by researching better technologies.

Plants vs. Zombies

Project Team

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

Supervision

  • 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.

Pokémon

Project Team

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

Supervision

  • 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.

Background

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.