Course: CMSC 23800/53800 Game Construction Instructor: John Reppy Ry 256 Lecture: TR 4:30-5:50 Ry 251 Phoenixforge server: http://phoenixforge.cs.uchicago.edu Piazza: piazza.com/uchicago/spring2014/cmsc23800/home
Computer games are one of the most exciting applications of computer technology. Computer games are also large software systems that embody cutting-edge graphics as well as techniques from scientific simulation, networking, AI, and databases. This course is an introduction to the issues of computer game construction. Students will work in teams to design and create their own games using existing libraries for graphics, physics simulation, etc. While students are not expected to be experts in everyone of the technical areas that underly computer games (e.g., graphics, scientific computing, networking, etc.), expertise in one or two of these areas is required, as is a strong background in programming.
There are two pieces of course work expected for this class.
Each student is expected to actively participate and contribute to his/her group's project. There will be regular group presentations in class over the course of the term (approximately one every two weeks), as well as a final presentation/demo.
Each student is expected to write and present an individual report on some aspect of Computer Game design or construction. A one-to-two page project proposal is due in class on Tuesday, April 22, and the final report and class presentation will be due Thursday May 29 (9th week). Some ideas for possible topics can be found here.
Title: Introduction to Game Development (2nd Ed) Editor: Steve Rabin Publisher: Charles River Media, 2009 Title: Chris Crawford on Game Design Author: Chris Crawford Publisher: New Riders Publishing, 2003
Here are links to papers and other written material that you may find interesting/useful for the project.
Steering Behaviors For
Autonomous Characters
This GDC 1999 paper by Craig Reynolds describes an approach to modeling steering behavior
for agents in a game.
Advances in Path Planning These are slides from a AAAI tutorial on A* and its variants.
OpenAL Specification (Version 1.1) This is the specification of the OpenAL library, which is supported on most operating systems, including MacOS X and Linux.
You are encouraged to use existing software libraries where possible. Such code might take the form of lower-level libraries that are directed toward a specific task, or a larger, higher-level, library that has most of the components of a game engine.
GLFW is a C library for abstracting away the OS-specific aspects of a graphics application. It supports window management (including full-screen support) and various kinds of input devices (kwyboard, mice, and joysticks).
SDL (Simple DirectMedia Library) is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware.
SFML (Simple and Fast Multimedia Library) is another development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware. It can be thought of as an object oriented alternative to SDL.
GLM (OpenGL Mathematics) is a C++ library that provides support for GLSL-style programming on the CPU (i.e., vectors, matricies, etc.)
GLI (OpenGL Image) is a C++ library that provides support for dealing with image data in an OpenGL compatible way.
Assimp (Open Asset Import Library) is a C++ library that supports importing various model formats in a uniform manner. It can be used to load graphical models into your game or to convert between different formats.
ftgl is a font rendering library for OpenGL.
GLFX is a library for writing effects files for OpenGL, which are integrated shader programs.
enet is a reliable datagram library that runs on top of UDP. It was originally developed for the Cube FPS game.
Boost is a collection of C++ libraries that you may find useful.
These are libraries that deal with fairly specific issues Here are links to some potentially useful libraries:
Open Scene Graph is ab open-source 3D graphics toolkit,
G3D Engine is an open-source 3D engine written in C++.
Ogre 3D is an open source 3D game library/engine.
jMonkeyEngine is an open source 3D game library/engine written in Java.
OpenSteer is a C++ library for constructing steering behaviors. There is an associated web page that provides links to relevant papers.
Bullet Physics SDK is an open-source physics engine written in C++.
Open Dynamics Engine is another open-source physics engine written in C++.
The Open Racing Car Simulator (TORCS) is a research platform for AI research.
In addition to the above libraries, we will also make some project-specific code available for your use.
There are many game-programming websites on the internet; here are a few that I have found useful.
Amit's Game Programming Information
This site has a whole host of links and articles about a wide range
of game-programming topics.
Path planning tutorial from AAAI 2008.