Computer Game Programming (Fall, 2017)

Tuesdays and Thursdays 13:30-14:50 in NSH 3002

Taught by Jim McCann. Office Hours in EDSH 229 by appointment.

Course Goals

Computer Game Programming will help you build the programming skills needed to turn ideas into games. This means we'll be covering both runtime systems and the asset pipelines to fuel them, along with -- optionally -- some game-design exercises.

The philosophy of this course is to learn by building games, from (nearly) the ground up -- this means lots of C++ and OpenGL hacking, a smattering of scripting (shell, python, javascript, lua), and a lot of documentation-reading. You do not need to be an expert in any of these things, but it would help if you are familiar with C++ and the modern OpenGL (3.2+) API.

Essentially, we will be working through a similar set of exercises to Game Programming '09, but with optional design and required asset pipeline sections.


Students will be graded out of 17 + 3N points, divided as follows:

3NSmall Games
17Final Game

There are no late days; however, there is enough slack in the grading to support completely missing one assignment.

Small games will be assigned roughly weekly to highlight basic game-related functions. The Final Game will be larger undertaking by groups of 3-4.

More information about both of these types of assignments will be forthcoming.

Life Advice

Stay Healthy

Being sick isn't fun. University health services is conveniently located and has flu vaccine available starting in September.

Mental health is an important aspect of physical health. CMU's CaPS services exist to help you manage your mental state.

Don't Steal

Using other people's code without giving credit is a form of plagiarism. Plagiarism is a highly immoral activity that I take very seriously. If you plagiarize, you will fail the class, and I will do my best to make sure you are removed from CMU entirely.

All you need to do to avoid plagiarism is to make sure to give credit for the code you use in you project. Something as simple as the comment "//based on" can save your academic career from ruin.

Additionally, most source code is covered by some sort of license agreement. Make sure that code you use has a license agreement compatible with this course. For example, I am unwilling to pay for a license for a library just so I can compile your code, or sign a non-disclosure agreement just so I can read it.


The course does not have a textbook. However, there are several documents available on the internet that you may find useful:

There are also some great, cross-platform content-creation tools that we will use in our asset pipelines:

And some places to get free game assets:


(NOTE: schedule not final.)

8/29 (T)Course intro; Timing; Stupid Code; Design DocsGame0: "Tennis For One" [Design Due 8/31, Noon]
8/31 (R)Designs; Timing; Base0 Code.Game0: "Tennis For One" [Implementation Due 9/5, Noon]
9/5 (T) Sprites. Modern OpenGL (2D). Game1: "Text/Tiles" [Design Due 9/7, Noon]
9/7 (R) Design1 Review. Asset Pipelines. Base1 + Atlas Loading. Game1: "Text/Tiles" [Implementation Due 9/16, 8pm]
9/12 (T) Modern OpenGL (3D). The Scene. Transforms. Assets.
9/14 (R) Modern OpenGL (3D). Hierarchy. Game2: The Object Show [Design Due 9/19]
9/19 (T) Modern OpenGL (3D). Hierarchy (cont'd). Game2: The Object Show [Implementation Due 9/26]
9/21 (R) Modern OpenGL (3D). Materials (BRDF toy). Cameras. (mat4 toy). Culling. Post-Processing.
9/26 (T) Collision. Game3: Sports [Design Due 9/28]
9/28 (R) Walk Meshes. 2D Physics. Particle-based Physics. Game3: Sports [Implementation Due 10/3]
10/3 (T) Intelligence & Planning (interactive A* intro) (games notes) Extra Credit: CQ vs LHS [Due 10/5]
10/5 (R) Sound (Ableton's "Learning Music") Required: Three Final Game Ideas With Pictures [Due 10/10]
10/10 (T) Networking Required: Three (More!) Final Game Ideas With Pictures [Due 10/12]
10/12 (R) Retrospective. Required: One Pitch Slide (1024x768, .png or .jpg) [Due 10/17]
10/17 (T) Final Game Pitches
10/19 (R)Final Game Meetings
10/24 (T)Shadows (pt1) (NVIDIA's soft shadows sample, stencil shadow toy) Final Game: Design Document Due [Noon]
10/26 (R)Shadows (pt2)
10/31 (T)Non-Photorealistic Rendering Final Game: Prototype Due [Noon]
11/2 (R)Skinning (notes and example code)
11/7 (T)Fonts (freetype, signed distance field magnification)
11/9 (R)Image-Based Lighting (detailed notes, siggraph paper)
11/14 (T)Final Game Midpoint Demo Final Game: Demo Due [Noon]
11/16 (R)Group Work Time + Donuts
11/21 (T)Transparency (compositing digital images, sort fragments, modify blending, build depth layers)
11/23 (R)No class - Thanksgiving
11/28 (T)Work Day + Donuts
11/30 (R)Special Topics (curl noise, IK)
12/5 (T)Work Day + Donuts
12/7 (R)Final Game Demonstrations + Donuts Final Game Due [Noon]
12/8 (F)Final Game Expo! (setup: 4pm, Expo: 4:30-7pm)

Design Doughnuts

Doughnut Counter

In order to encourage submission of optional design documents, I will add one to the design doughnut counter for every person who completes a design document. Any morning when the doughnut counter is at least 10, I will bring donuts for the class, and subtract 10 from the counter value.