Image from the 1989 arcade video game Zero Wing


This course provides an introduction to the principles and practice of computer game programming and design, with a focus on technical/programming issues. This includes an introduction to game hardware and systems, the structure of game engines, object and terrain modeling, game physics, AI for games, networking for games, rendering and animation, and aural rendering.


There is no required text. We will post copies of materials to the class Lectures Page as they become available.


A grade of at least C- in CMSC 420.

Programming assignments may be done in any programming language using any libraries, provided that prior arrangements have been made with the TA to be sure he can compile and run your program. Some programming assignments will be done using the Unity game engine, which involves knowledge of C# or Javascript.

Course material will be quite diverse, including algorithms and data structures, artificial intelligence, networking, linear algebra and basic geometry, basic physics. My goal is that the course be mostly "self-contained", and so if you find that you are unfamiliar with any topics that I discuss, please let me know.

Course Work

Course work will consist of a combination of written homework assignments (roughly two), short programming assignments (roughly two), and one final programming project, due at the end of the semester. Homework assignments and short programming assignments are to be done individually. The final project may be done individually or in small groups (see below).

Written homeworks will be due at the start of class on the due date (since I discuss solutions in class). Late homeworks are not allowed, so just turn in whatever you have done by the due date. Programming assignments will typically be due at midnight of the due date. They are subject to the following late penalties: up to six hours late: 5% of the total; up to 24 hours late: 10%, and then 20% for every additional day late.

While I have not decided on the exact exam structure, at this point I plan to have two exams during the semester and have no final exam. (This will provide people a bit more time to work on their final projects and demos.) Weights: Written homeworks and short programming assignments 40% total, final project 20%, exams 20% each. (Note that these weights are tentative and may vary.)

As a courtesy to the TA, homework assignments are to be written up neatly and clearly, and programming assignments must be clear and well-documented. Programming assignments will be done in Unity. Final projects can be implemented in the system of your choice.

More about the Final Project: The final project will be a game of your own design. There are no set requirements—it may be 3-dimensional (preferred) or 2-dimensional, interactive (preferred) or turn-based, and of whatever genre you like. It may be implemented with the aid of a game development system such as Unity (preferred) or simply as a stand-alone program. Grading will be largely based on the particular elements that you bring to the project (including the novelty of the concept, quality of the game-play, computer graphics, algorithmic innovations, artistic quality). I prefer that people work individually or in groups of two, but larger groups are permitted with my permission. (My main concern with larger groups is the workload be evenly balanced among the group members.) The TA and I will meet intermittently with groups to check on each team's progress.

At the end of the semester, each group/individual will be expected to give a short (5 minute) presentation of their game to the rest of the class. For archival purposes a short video showing your game in action will be prepared.


We will be using Piazza for class discussions. Rather than sending email to the instructor or TA, you are encouraged to post your questions to Piazza, which will allow everyone (instructor, TA, and classmates) to vier and respond to your question and the answers posted. (If you have a question of a more private nature, you can send email directly to us.) We will be sending out invitations to the class to join Piazza, but feel free to enroll in the class at any time by going to

Academic Dishonesty

As in all courses, students shall to abide by and uphold the University's Code of Academic Integrity. Violations of these policies will be dealt with harshly, and typically result in the assignment of a failing XF grade for the course. Please consult the Student Honor Council page for further information.

Students shall respect the intellectual property rights of others at all times, and shall not submit any resources, software, documents or other artifacts that are not their own, without explicit advanced approval from the course instructors.

Attempts to falsely represent the correctness of your work, or to delay other members of the class from completing an assignment, or to disrupt computing services for either students or faculty, or to have project deliverables derive from the efforts of others outside the class (except as explicitly arranged with the instructor) will be considered forms of academic dishonesty. If you are in doubt, please check with one of the instructors.


Game programming is an extremely diverse topic. Our focus will be on computer-science issues, and in particular the major technical elements that underlie a typical game engine. The following list of topics is very tentative. Depending on time, some topics may be added or dropped, and the order of topics may change.

Game Architecture and Engines:
The organization, structure, and overall features of a typical game engine. Introduction to the Unity game engine.
Geometric Programming and Data Structures:
Basic aspects of geometry and linear algebra and their applications to game programming. Bounding volumes and efficient collision detection.
Modelling, and Animation:
Shape representations and meshes, level of detail, terrain modeling, articulated models and skinning, animation, texture modeling, procedural generation and geometry synthesis.
AI for Games:
Agent-based systems, decision making, finite-state machines.
Motion and Navigation:
Path planning, multiple-agent motion and crowds, pursuit-evasion.
Networking and Games:
TCP/IP, sockets programming, multiplayer gaming, latency hiding, distributed data consistency, security.
Other topics:
Physics (Newtonian dynamics, particle simulation, mass-spring models), physics engines, aural rendering (audio and HRTFs, audio acquisition and libraries, local and global aural rendering).

  Return to CMSC 425 Home