Image from the classic arcade game Space Invaders


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. Materials will be posted online.


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. We assume students have the capacity for designing and implementing medium to large programming projects, and have a knowledge of college math (differential calculus, basic linear algebra, and geometry). If you find that you are unfamiliar with any topics that are discussed, please check with the instructor.

Course Work

Course work will consist of a combination of written homework assignments (2-6), short programming assignments (2-4), 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).

It is expected that written homeworks will be submitted electronically, typically through ELMS. (Instructions will be forthcoming.) Late penalty: Up to 6 hours late: 5% of the total; up to 24 hours late: 10%, and then 20% for each additional 24 hours.

To help reinforce material, I am planning on having a number of short in-class problem-solving sessions, where you can work in pairs. Each will involve turning in a short write-up, which may be graded.

We plan to have two exams during the semester but no final exam. The tentative exam dates: Thu, Oct 25 and Thu, Nov 29. (This provides people a bit more time to work on their final projects and demos.) Tentative Weights: Written homework assignments, in-class problem-solving, and short programming assignments - 40%, Final project - 20%, Exams - 20% each. (These are subject to change.)

Homework assignments are to be written up neatly and clearly, and programming assignments must be clear and well-documented. Grading will be based not only on correctness, but also on clarity, simplicity, and adherence to good programming practice. Programming assignments will be done in Unity. Final projects can be implemented in the system of your choice.

For many assignments, additional work can be done. This may be in the form of enhancements to your programming assignments or special challenge problems on the written homework assignments. These count for extra-credit points. Extra credit points are recorded separately, and can only positively affect your final grade. At the end of the semester, grades are computed using the standard scores and grade cutoffs are set. If your final score is close to a grade cutoff and you have done a sufficient amount of extra-credit work, your final grade can be adjusted upwards (e.g., B+ to A-).

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 a number of factors reflecting the effort and creativity that the various team members bring to the work. Some of these elements include novelty of the concept, quality of the game-play, sophistication of modeling and rendering, algorithmic innovations, artistic quality. We prefer that people work either individually or in groups of size two or three, but larger groups are allowed with permission from the instructor. (The main concern with larger groups is difficulty of distributing the workload evenly among the group members.) We plan on scheduling meetings periodically during the semester to assess progress.

At the end of the semester, each group/individual will be expected to give a short (5-10 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 view 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:
Review of geometry and linear algebra and their applications to game programming. Linear and affine transformations and 3-dimensional rotation. Bounding volumes and efficient collision detection.
Modelling, and Animation:
Shape representations and meshes, articulated models and skinning, animation, procedural generation (fractals, L-systems, and Perlin noise), solid modeling.
Motion and Navigation:
Path planning and search algorithms, navigation meshes, multiple-agent motion and crowd motion, pursuit-evasion.
AI for Games:
Agent-based systems, finite-state machines, decision making and planning.
Networking and Games:
TCP/IP, sockets programming, multiplayer gaming, latency hiding, distributed data consistency, security.
Other possible 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

  Web Accessibility