Computer Game Programming (Fall, 2021)
In this class, we made a bunch of small games, as well as seven final games. Check out the trailer or download the final games below:
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 some game-design exercises (with an eye to thrifty code).
Previous years with similar content: Game Programming '20, Game Programming '19, Game Programming '18, Game Programming '17, Game Programming '09.
Students will be graded out of 20 + 3N + 6 points, divided as follows:
You will be reading lesson materials asynchronously, then discussing the material in class; your class participation score will be based on your contributions to these discussions (as well as the written answers in the lesson materials). 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.
There are no late days; however, if your lowest small game score is less than 3, it will be replaced by a 3 when computing your grade.
Being sick isn't fun. University health services often has flu vaccine available starting in September (though this year things may work a little differently). Your standard anti-SARS-CoV-2 measures might also work well against influenza.
Mental health is an important aspect of physical health. CMU's CaPS services exist to help you manage your mental state.
If you have a disability and are registered with the Office of Disability Resources, I encourage you to use their online system to notify me of your accommodations and discuss your needs with me as early in the semester as possible. I will work with you to ensure that accommodations are provided as appropriate. If you suspect that you may have a disability and would benefit from accommodations but are not yet registered with the Office of Disability Resources, I encourage you to contact them at email@example.com.
Using other people's code or data without giving credit is a form of plagiarism. Plagiarism is an 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 and data you use in you project.
Something as simple as the comment "
//based on https://wiki.libsdl.org/SDL_CreateWindow" can save your academic career from ruin.
Additionally, most human-created works are covered by copyright and thus subject to some sort of license agreement. Make sure that code and data you use has a license agreement compatible with this course. For example, I am unwilling to pay for a license for a library so I can compile your code, or sign a non-disclosure agreement so I can read it.
This is a course that involves writing a lot of code. Please, by all means, work together!
- For all assignments, feel free to share code, as long as you understand the code you use, have permission to use the code, and give credit. (You still need to make different games than each-other.)
- For game1-game6 (not game0), you can work in group (up to 3) and turn in a single game. I will expect more of a group than an individual (approximately, one "extra, fancy thing" in the game per extra person), and I will need to interview your group to ensure your contribution was equitable. Also, please don't work with the same people all the time.
The course does not have a textbook. However, there are several documents available on the internet that you may find useful:
- The OpenGL Specifications (of particular interest: OpenGL 3.3 and GLSL 3.30)
- docs.GL contains man pages for OpenGL functions.
- SDL Documentation
- cppreference.com the slightly-better documentation wiki for modern C++
- Advances In Real-Time Rendering SIGGRAPH course notes covering advanced rendering techniques being used in games
- Blender API Documentation, useful when writing or modifying export scripts.
There are also some great, cross-platform content-creation tools that we will use in our asset pipelines:
- GIMP is a 2D raster graphics editor
- Inkscape is a 2D vector graphics editor
- Blender is a 3D modelling, animation, and rendering suite
- Audacity is a decent free sound editor
And some places to get free game assets:
- Kenney.nl has 2D and 3D assets, creative-commons licensed
- Poly Haven has a great collection of free HDR images (for image-based lighting), PBR textures (for fancy materials), and 3D models
- FreePD free, public domain music
- Incompetech royalty-free (but make sure you credit the author) music
- freesound various CC-licensed sound effects
- gameaudiogdc large pack of royalty-free game sound effects
This schedule is subject to change in cases where my estimation of the time required to cover a topic does not match the reality.
All assignments are due before class unless otherwise noted.
- Course intro
- Compile basecode, start game0
- Before Class: finish Asset Pipelines (pt 2)
- Game0 Showcase
- Share asset pipeline code
- Before Class: finish Meshes
- From Blender to your game.
- Scene efficiency.
- Before Class: finish Sound ("Sound" part)
- Design a sound API
- Make sound with code
- Before Class: finish Sound ("Music" part)
- Music Theory by and for beginners
- Game2 Showcase
- Before Class: finish Text + Fonts
- Font and text layout pipelines
- Before Class: finish Collision
- Build fast collision checks
- Before Class: finish WalkMesh
- WalkMesh code share
- Game4 Showcase
- Theme cards and pictures
- Before Class: finish Networking
- Game5 Showcase
- Networking code share
- Lag simulation
- Theme selection
- Set up group infrastructure
- Write planning docs
- Prototype work time
- Game6 Showcase
- Before Class: finish Framebuffers
- Prototype work time
- How to playtest
- Prototype playtest
- Vertical slice planning + work time
- Before Class: finish Lighting
- Before Class: finish Shadows
- Advanced topics on-demand
- set up distribution (itch.io?)
- Build out work time
- Bug hunting
- Polish + presskit planning + work time
- Final game show and tell
Aug 31 Game0: Not Pong due
Sep 7 Game1: Sprite-Based Game due
Sep 14 Game2: The Virtual World due
Sep 21 Game3: Require Sound due
Sep 28 Game4: Choice-Based Game due
Oct 5 Game5: Walking Simulator due
Oct 19 Game6: Multiplayer due
Oct 28 final A: Prototype due
Nov 4 final B: Vertical Slice due
Nov 16 final C: Build Out due
Nov 30 final D: Polishing & Presskit due