The University of Michigan hosts an annual game development challenge, in which small teams of students have just 48 hours to develop a video game. The event is run by the campus' game development club, Wolverine Soft.
Better Know A District
My team consisted of fellow University of Michigan students Alex Soule and Steve Dewitt. Alex and I programmed; Alex composed the music; and Steve created the graphics.
This year is my third year participating in the contest. The first contest was held only a few months after I started college. Even though I had been programming for several years, starting with Qbasic back in elementary school, I had little experience in game development. Several poor design choices, including writing the game in Java and Swing, led to an incomplete game that took last place.
My second year didn't go much better. Despite having taken a couple of programming courses and being pared with an excellent programmer and artist, none of us had much game development experience. We brainstormed an excellent idea, but got too caught up in learning how to use our framework, SDL. This game was largely incomplete, and so we took last place yet again.
This year, I was determined to do much better. A few days before the contest, I sat down and made a list of various lessons I learned from the previous contests. Noting several areas that had caused problems, I went through a list of permitted game frameworks. The library I found particularly suitable was ClanLib, a C++ cross platform toolkit that wraps around SDL, OpenGL, and various system libraries. It has an impressive list of features and is fairly well documented. I was able to set it up and create a few test programs before the contest, eliminating a source of serious time problems.
Friday
8:00 p.m. After an hour delay, the contest starts. The theme is "Honoring Stephen Colbert," a very narrow theme and a surprise considering the previous year's theme: "Fight." I meet with Steve, who informs me that Alex will show up later.
We brainstorm on some couches outside the main contest room. For an hour, we talk about various gameplay designs and decide to do an adaptation of a "catch the cat" Flash game called Chat Noir. The game is a turn-based strategy and puzzle game; the goal is to stop a cat from leaving the game board.
We decide to use Colbert's "Better Know a District" as our starting point. The segment features Colbert attempting to interview every member of Congress, one district at a time. The skit has appeared less frequently over time as members of congress have caught on to its satirical purpose. Our game has the player placing fans of The Colbert Report on a game board to box in members of Congress and force them to be interviewed.
We decide to create a level progression, with the goal of having one unique level per congressional district. Ideas that we implement include different AI algorithms and the number of directions that the AI can move. We talk about implementing power-ups -- special board squares that give a bonus to either the player or the AI -- but we end up cutting them due to their complexity.
9:30 p.m. ClanLib will be the framework. I work on creating the basic structure of the program while Steve creates artwork. My development environment of choice is the standard UNIX command line tools. Due to the hobbled nature of the Red Hat Enterprise Linux installations on University of Michigan's engineering desktops, I commandeer the monitor, mouse, keyboard, and power outlet of a desktop and work on my Ubuntu installation on my laptop.
Alex shows up and by a very fortunate coincidence also perfers Linux CLI tools. He has access to a Ubuntu server and works on it by forwarding an X server display.
Before the start of the 48 hours, I had set up an empty subversion repository on my web server to ease the sharing of code. Also, because I had worked with ClanLib before the contest, I had no problems creating the basic structure. Alex initially had some problems compiling and installing ClanLib, mostly due to ClanLib's poorly written configure script and extensive development package requirements.
We create the basic game structure, which remains largely unchanged through out the contest. Here's what we did, in pseudo-code:
1. Initialize ClanLib and various libraries
2. Call program code
1. Initialize game data
2. While not quitting
1. If escape is pressed, quit
2. Execute a single step of the current game state
3. Change the current if necessary
4. Paint the screen
5. Check for events and any library "maintenance" work
3. Cleanup game data
3. Cleanup ClanLib and various libraries
I name the project Sierra, after the letter ‘s' in the NATO phonetic alphabet, to avoid wasting time trying to name the project early on. Additionally, we decide to call the members of Congress in the game "the victims."