Assignment 1: Get Ready Player 1!

  • Out on: September 3, 2017
  • Due by: September 8, 2017 before 10:00 pm
  • Collaboration: None.


For your first assignment you'll do two very different things individually:

  • You'll hack on a libsdl2 program that draws some kind of animation and plays some kind of music/sound effects. This ensures that all of you have installed libsdl2 (and whatever bindings you need) and have the basics working.
  • You'll write up your proposal (not your team's proposal!) for the game you want to develop this semester. This ensures that all of you have some input into your team's eventual decisions regarding the game.

You'll submit both of these things in one archive, see Deliverables below for details. This will ensure that all of you have at least done one submission on your own (something that will come in handy later when your designated submitter is asleep around the deadline).

Problem 1: Hacking with libsdl2! (60%)

On Piazza we handed you a simple demo program illustrating how you can use the libsdl2 library to get a simple animation and some music going. As discussed in lecture, your job for this problem is to make that program your own. There are two basic options here:

  • If you're not exactly a "hot-shot" programmer, it'll suffice if you study the existing program enough to replace the font, the text that is displayed, the background graphic and (of course) the musical score with something else. It would be nice if you did more, but that's the bare minimum we expect from anyone in the course, regardless of background.
  • If you have experience with programming, you should be able to do a lot more than just "replace the resources" as it were. Try to add some "special effect" like a bunch of semi-transparent blobs bouncing around the screen. Try to add code that allows you to control what's going on using either the keyboard or the mouse. Try to replace the static text with a longer, scrolling message. The possibilities are literally infinite! Impress us, but don't write an entire game yet. Please!

If you do the minimum required in a way that works, we'll hand you around 50% for this problem. If you do more than the minimum, but not much more, we'll hand you around 55%. If you give us something really cute, you'll get the entire 60% for your efforts.

Please surprise us (without being offensive?)! Try to make it cute! Maybe even make it cool! But certainly make it your own!


  • The libsdl2 (and language binding!) documentation is your friend! Read lots and lots of it, that's an investment that will really pay off.
  • If you're unsure which programming language you'll want to use for the course, spend less time on the fancy effects and details, but hand in more than one version of your demo, in more than one language. (Be sure to use the approved bindings!)

Problem 2: What's your game? (40%)

As you know, you're supposed to produce a two-dimensional top-down action adventure game as your project this semester. On Piazza we've collected several examples (good and bad) for the kind of game you should be shooting for. But this only settles the overall genre, it doesn't restrict the story, the world, the mechanics, the theme, etc.

For this problem you should write up your own, personal vision for the kind of game you'd like to build this semester. Try to stick to the given genre constraints as much as possible, but within those, try to be as creative as possible. Also try to produce a focused vision of your game, not an oversized heap of random features and nothing else.

If you don't have much personal experience with these kinds of adventure games, it may be a good idea to play a few (or at least to watch plenty of gameplay videos). There are many examples of this genre out there, just spend an hour with the search-engine of your choice doing some research. Feel free to draw inspiration from existing games, but make sure to include relevant links to articles/videos about the games you're inspired by.

While it's possible to suggest simply cloning an existing game, it is certainly more fun to put your own spin on it. Try to address at least the following as part of your proposal:

  • Background Story: What has happened before the game? What is the overall goal of the game? Who are the various actors we will meet? What is their motivation? Hint: Don't write a novel, just imagine you had to fit it all on the back of a DVD case and make it seem interesting for someone browsing games in a store.
  • Game Setting: Where (and when, if applicable) does the game take place? What are some features of the environment that you plan to take advantage of? Is the environment static or are we "exploring" it? In how many directions can we explore? Hint: This should make clear what the overall graphical theme will be but also what kinds of music/sound effects you're going for; those choices should be somewhat harmonious.
  • Rough Levels (if you have levels that is, otherwise I guess it's major events/plot points): What is the sequence of levels you're planning to do? What is the outcome of each level (there may be several possible outcomes for some). Hint: Don't design a sequence of 20 levels, keep things simple and only describe 3-5 levels for now. You can always fit in more levels later.
  • Game Mechanics: What are the basic mechanics of your game? How is the player's performance evaluated? What's the basic control scheme? Are there powerups, if so of what sort? Do you focus more on dexterity (e.g. avoiding enemies with elegant maneuvers), cleverness (e.g. tricking enemies into killing themselves), firepower (e.g. maximizing powerups over a period of time), or... Something else? Are there even distinct levels? If not, why not? Are there bosses? Do levels always stick to the overall theme/setting, or are there special levels with different looks/rules? Does the player have some notion of "hit points" or "shield power" or does the player "die" instantly when hit by an enemy? Are there bonus lives or health/repair packs? Can you revisit previous levels later in the game? Are there arcade-style challenge stages? Hint: Don't try to cram too much stuff into the game, try to find a set of mechanics that work together and (presumably) feed off each other. Having done your research on classic games can really pay off here...

You can add more details that are not mentioned above, but please don't send us a whole book. If we get the impression that your proposal was thrown together in 20 minutes before the deadline, we'll give you at most 30% for this problem. If your proposal reads like a reasonably well thought-out one, we'll hand you around 35%. If you give us something really cute, really well-designed, you'll get the entire 40% for your efforts.


You should write all this up in a plain text file (not a PDF or M$ Word document!) called game-vision.txt. Please make sure that your document is readable: at most 80 characters per line, structured into sections, paragraphs, etc. Maybe do a bit of spell-checking? Figure out a nice format in which to cite websites. Just make it moderately pleasant for us to read in a basic text editor.


Please turn in a gzip-compressed tarball of your assignment. (If you have no idea what this means, please ask a technical person in the course to help you out with packaging.) The filename for this assignment should be cs255-assignment-1-name.tar.gz with name replaced by the first part of the email address you used to register on Piazza. (See Piazza for additional information on how to submit assignments.)

The programming part should contain no derived files whatsoever but allow building all derived files. Include a README file that briefly explains what your program(s) do and that contains any other notes you want us to check out before grading. Please include very specific build instructions that work on Linux!