General Information
Course: CMSC 23800 / MPCS 53800 Game Construction Instructor: John Reppy Ry 256 Lecture: TR 15:00-16:20 Ry 276 Piazza: piazza.com/uchicago/spring2017/cmsc23800/home
Overview
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 with a focus on the problems of designing and implementing a game engine. Students will work in teams to design and create their own game 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.
Course work
There are two pieces of course work expected for this class.
- Group project:
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.
- Individual report
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 29, and the final report and class presentation will be due Thursday May 25 (9th week). Some ideas for possible topics can be found here.
The project
Text books
There are no required texts for the course, but you may find the following books interesting/useful:
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
Papers
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.
Coding resources
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 rendering or physics engine. We will not be using complete game engines, such as Unity or the href="https://www.unrealengine.com">Unreal Development Kit, in this class.
Low-level libraries
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 (keyboard, 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. (Does not appear to be under active development anymore).
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.
In addition, there are a number of higher-level libraries that you may find useful for implementing components of your game:
Open Scene Graph is an 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.
If you decide to target just Mac OS, then you may find the following libraries provided by Apple to be useful:
- GLKit for OpenGL programming (inlcudes Math utilities)
- SceneKit for retained-mode 3D graphics
- Model I/O for loading 3D assets
Web sites
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.