Pacman image

Introduction

This course provides an introduction to the principles and practice of computer game programming and design. This includes an introduction to game hardware and systems, the principals of game design, object and terrain modeling, game physics, AI for games, networking for games, rendering and animation, and aural rendering.


Text

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


Prerequisites

CMSC 420 or CMSC 427. 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.

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 (maybe 2-3), short programming assignments (maybe 1-3), 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.

There will be two exams: a midterm and a comprehensive final. Weights: Homeworks and programming projects 35%, final project 20%, midterm 15%, final exam 30%. (Note that these weights are tentative and may vary.) The final exam will be TBA.

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. Although you may develop your program on whatever system you like, for final grading your program must execute on a platform that the TA can access. In the past, I have had good success with laptops running Windows, Linux, or Mac OS. If you develop your program on some other platform, it is your responsibility to see that it can be compiled and executed on one of these machines. Excessive delays due to system incompatibilities will result in point penalties.

More about the Final Project: The final project will be a game of your own design. There are no set requirements—it may be 2-dimensional or 3-dimensional, interactive or turn-based, and of whatever genre you like. It may be implemented with the aid of a game development system such as Unity or simply as a stand-alone program. Grading will be based on the particular elements that you bring to the project. 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.


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.


Topics

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.

Introduction:
History and evolution of games, basic elements of the design of games and game engines.
Game Engines:
The organization, structure, and overall features of a typical game engine.
Object Modeling:
Shape representations and meshes, level of detail, terrain modeling, articulated models and skinning, animation, procedural and texture modeling, geometry synthesis.
AI and Algorithms for Games:
Agent-based systems, finite-state machines, path planning, flocking and steering.
Physics and Games:
Newtonian dynamics, particle simulation, mass-spring models, collision detection and response, physics engines.
Networking and Games:
TCP/IP, sockets programming, multiplayer gaming, latency hiding, distributed data consistency.
Security:
Common methods of cheating in online games and approaches for detecting and counteracting them.
Audio and Games:
2D and 3D audio and HRTFs, audio acquisition and libraries, local and global aural rendering.

  Return to CMSC 425 Home

Web Accessibility