Super Mario Bros 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 (with a B or better) or CMSC 427. I will assume knowledge of C or C++ programming, but your programming assignments can be done in any programming language, provided that you make arrangements with the grader in advance 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 2-3), and one final programming project, due at the end of the semester, where you (ideally, working with a partner) will implement a complete game of your own design.

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 30%, final project 20%, midterm 20%, final exam 30%. (Note that these weights are tentative and may vary.) Due to my travel schedule, rather than having a single midterm, I may instead have two in-class quizzes, whose total weight will be 20%. The final exam will be Monday, May 13, 8:00-10:00am.

As a courtesy to the grader, 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 grader 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. Given the size of the class and the complexity of the undertaking, my preference would be for people to work in groups of two. If you want to work in a larger group, please check with me. (My main concern with larger groups is that it is difficult to balance the workload and meet regularly.) The grader and I will meet intermittently with groups to check on each team's progress.

At the end of the semester, each group will give a short (5 minute) presentation of the game to the rest of the class. For archival purposes, part of the final deliverable will include a screen-shot of the game and a short video showing the game in action.


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

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.
Real-time Computer Graphics:
Overview of OpenGL and GLUT, I/O and event-driven programming, geometric and projective transformations, illumination, texturing, programmable shaders, realism and performance issues.
Object Modeling:
Shape representations and meshes, level of detail, terrain modeling, articulated models and skinning, 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.
Audio and Games:
2D and 3D audio and HRTFs, audio acquisition and libraries, local and global aural rendering.

-   CMSC 425 Home  -

Web Accessibility