Computer Games (Graduate level), Fall 2012
Wednesdays at 5pm-6:50pm
Note: the room has been changed to WWH, Rm 512

Instructor: Ken Perlin

Office hours: Tuesday, 4-5pm

Text: Class notes (so make sure you come to class!), will be posted on-line after each lecture.

Grader: Jonathan Tompson


Course description:

This will be an intensive course in which you will learn principles of game design by studying well designed existing games, and by implementing original games.

You will be implementing lots of games this semester, so be prepared to work and to keep up with the class. Generally there will be an assignment every week. If you have a heavy course load in other classes, you might want to consider not taking this class.

Also, you are expected to do your own programming, so don't take this class if you are a weak programmer. From the beginning of the semester you will be writing computer programs as part of your work for this class.

At the start of the semester you will be working individually, but for most of the remainder of the course you will be working in teams, with each team member taking on rotating roles of game design, art direction and evaluation.

Evaluation is an essential part of game design. A game is not complete unless people other than yourself can play it successfully without you standing over their shoulder telling them what to do. Achieving this goal can be harder than you might think. For this reason, a significant portion of your work this semester will consist of learning how to properly evaluate games, and then how to iterate design based on that evaluation.

There will be no formal textbook. Rather, the class notes, posted here after every class, will serve as the text. For this reason, and because class participation is an integral part of this course, it is extremely important that you attend classes.

September 5

In the first class we discussed games as media, and compared games to other media, such as films and novels. We talked about what is unique about games, and the basic elements of good game design. One key idea is to understand that the player is engaged largely because he/she is going through a learning process. The good game designer keeps the player in a state of "flow", so that this learning generally happens at a near optimal rate. A game must not level up either too slowly or too quickly.

We showed a few simple examples of games, and then students formed into groups to practice brainstorming on game design together.

September 12

In this class we started looking at the simple game platform that we will use for the first part of this semester, and we went through the process of implementing a game in class.

You can download the game platform package and examples from class here.

Then we formed into groups with three or four participants each. Each group was charged with coming up with an idea for a game that (1) asks the player to do something artistically creative (such as compose music, create a drawing or sculpture, write a poem, etc), as well as (2) teaches some worthwhile educational subject, such as math, or history, or geography, or physics, etc.

An example of such a game is the sumGame that is included in this week's download.

The assignment, due before class next Wednesday, is for each student to create an individual implementation of a game that accords with their group's idea. You can use the downloaded game platform package to implement this.

To compile and run from the command line, you can use the latest version of the Java Development Kit (JDK), which you can download from Once you have that, you should just be able to use my "compile" script from the command line.

You can also develop from an Integrated Development Environment (IDE) such as Eclipse. You can download Eclipse from the Eclipse Downloads page . Be sure to download Eclipse IDE for Java Developers.

Installing Eclipse is slightly more involved if you are on Windows than if you are on a Mac. So if you are on Windows, you can read this Tutorial for installing Eclipse on Windows.

September 19

In this class we went over various ideas in class, and introduced the idea of simulation in games, showing things like making particles repel each other to create behavior.

Then we broke into groups. Each group was charged with helping each other to develop ideas that would allow you to convert the one-level game you've already implemented into a three level game.

Your individual assignment for the September 26 class is to use those ideas and create a game that has three distinct challenge levels for players. Mastery of each level should prepare the player for the next two levels. As you do this, be prepared to be able to articulate the specific skills that the player masters in each level. Then we split into groups and

September 26

We discussed level design at a high level, including the nature of A.I. in games, and the need to break down the behavior of the level into modular parts. What seems to be "intelligence" on the part of an NPC (Non-Player Character) is actually the result of algorithms that are distributed throughout various parts of the game level.

We then showed some parameterizable procedural walking aniamtion, as a partial illustration of how the illusion of "smart" behavior can be constructed from multiple "stupid" components.

After that students gathered into groups, to create a group implementation and presentation of a game prototype, which you will present as a group in the October 3 class. It would be great if you could develop further the ideas that you developed in the last few weeks, so that you can build on that work, but it's ok if you feel you have a much better alternate idea instead.

In creating this prototype, you would do well to split your tasks in complementary ways -- one person taking care of implementation, another person handling art and music, and a third focusing on playability.

You should be prepared to present your game prototype as though to an actual game publisher. In other words, it is not merely the game itself that matters, but how you introduce the concept and explain it.

You will have more opportunities through the semester to present your games in this way. Think of this as a first "test run".

October 3

The seven groups presented their game prototypes, which were wonderful and varied in their ideas and approaches.

Then we had a mini-lecture about the need to compute paths in interactive time, and went over the A* search algorithm and how it extends Dykstra's algorithm, and how both algorithms make use of a min-heap for efficiency.

I then showed a radically different lternate path algorithm for multiple actors.

Your assignment for next Wednesday October 10 will be an individual assignment. I would like you to put up, on your web page for this class, a proposal for a game design. Now that you understand more clearly what it takes to describe a game properly, you are more prepared to do this. Your proposal should contain the following elements:

For October 17

A number of you have fallen behind on your individual assignments, and some of the groups did not actually reach a working multi-level game.

Rather than give any new work, I'm going to use the time between now and our next class -- 5pm on Wednesday October 17 -- as a general amnesty. You can finish up anything that was already assigned (this includes both individual and group projects) between now and next Wednesday before class starts, without incurring any grade penalty.

Make sure to use this time while you have it!!

For those of you who are already up to date, feel free to make improvements to any of the individual or group work in this class from the start of the semester to now. Any improvements you make will indeed positively impact your grade in the course.

Class on October 17

We had over the first of a two-part lecture about how to use my 3D graphics package, in preparation for making games in 3D.

Then students formed into new groups, to put together a new computer game. In this game, you were free to use the ideas from one of your individual game proposals of the week before, or to combine several of those proposals, or to just create a completely new game idea.

For this project I am also asking you to divide the work among yourselves roughly as follows: One person is the "game designer", another takes charge of the programming and technical tasks, and a third takes charge of the artistic/visual/sound/music assets.

For October 24 you need to take your game at least to a first stage of prototype implementation.

In class on October 24 each group will have an opportunity to briefly present its game.

Class on October 24

In this class we reviewed the game projects from the most recent teams. We then did the second part of the two-part lecture about how to use my 3D modeling/rendering/animation package.

The examples I implemented in class, together with all support code, can be found in

The goal is to start you creating games in 3D. You are welcome to use either this package or a 3D package of your own choosing.

Your homework, due by class next Wednesday October 31 before class starts, is to create a model and some simple interactive animation of that model, around the theme of Halloween. Your animation can be as simple as "it does something when you click on it."

You do not need to create a game for this assignment. That will come later. For now I just want you to become familiar with how to create 3D models and how to animate them.

You can also, as always continue to improve and refine any of the other class assignments you have been working on over the course of this semester, both individual and group projects. Any improvements can only help your grade, as well as your understanding of how to make better games.

Because of the untimely intervention of hurricane Sandy, I am extending the deadline for the 3D "Halloween" assignment to this coming Wednesday, November 7.

Class on November 7

This was a guest lecture by Denis Zorin on the topic of creating smooth spline surfaces for real time computer graphics, which has important application in 3D computer games.

Homework for November 14 will be to be prepared to present your 3D model and animation example, and to think of ways that your 3D model and animation can be used as the basis for a 3D computer game.

You will be briefly presenting your 3D model and animation in class on November 7. In the course of your presentation, you should clearly articulate an idea for a computer game that makes use of this work.

For extra credit: In your presentation, show the beginnings of a computer game implementation.

Class on November 14

In this class we look at peoples' 3D models, and discussed how they might be developed into game ideas. People formed into groups to work on these games.

Class on November 21

In this class students present the rough version of the games their group made, and these are critiqued.

Class on November 28

In this class we have a guest lecture by Chris Romero, who talks about the Unity game platform, and his experience working with game technology for DARPA. In the second hour he critiques the games of each group.

Class on December 5

I showed some recent work I did in making better interactive development tools for 3D modeling and rendering.

Then we discussed the possibilities as the field of computer games continues to move off the screen and into the real world. As an example, we looked at the Sphero, a spherical robot toy that can provide the basis for many "mixed reality" games.

Homework for next week: Describe an idea for a game sometime in the future, between now and twenty years from now, extrapolating reasonably from current technology, in the spirit of "mixing the real and the virtual" that is suggested by the Sphero.

Next week we will be showing our work at the technology showcase, in the 13th floor lounge from 5pm to 8pm.

Groups that will show from 5pm to 6:30pm on Dec 12:

Groups that will show from 6:30pm to 8pm on Dec 12:

On December 19, we will be giving final presentations of our projects in class. That will be the "final exam" for this class.