Department of Computer Science
CSc 196O – Computer Game Design and Implementation
Fall 2004 – John Clevenger
Concepts and techniques for design and implementation of computer games and virtual reality simulations. Topics include: game design principles and game engine architecture; geometric models; algorithms and data structures for spatial partitioning, occlusion, and collision detection; real-time interactive 3D graphics and animation techniques; behavioral control for autonomous characters; simulation of physical phenomena; sound and music in games; optimization techniques; multi-player games and networking; and game development environments. Substantial programming and project work. Prerequisites: CSc 130, 133; Math 30; Physics 11A.
Dr. John Clevenger Office: RVR 5018 Office Hours: M10-11, W2-3, Th6-7
Math 30 – Calculus I; and Physics 11A – Mechanics.
You must have already completed CSc 130, CSc 133, Math 30, and Physics 11A (or their equivalents at another school), each with a grade of C- or better, in order to take CSc 196O. In addition you must have also completed all the courses listed as prerequisites to those courses (or completed their respective equivalents at another school), each with a grade of C- or better. Completion of all prerequisites will be verified by transcript (see below).
Prerequisites by Topic:
Thorough understanding of:
Object-oriented programming in a language such as Java or C++, evidenced by at least four semesters programming experience.
Inheritance and polymorphism in an object-oriented programming language
Implementation of linear lists including stacks and queues, and binary trees.
Implementation of graphical user interfaces (GUIs) using an application framework (Java Swing or MFC), including event-driven programming.
2D graphics including coordinate systems and interactive operations using keyboard and mouse.
Application of affine transformations to graphical objects.
Use of timers for simple 2D animation
Pre-calculus math including trigonometric functions, Cartesian coordinates, points, lines and planes in space, coordinate transformations, conics, algebraic relations and functions, polynomial equations, inequalities, matrix operations.
Basic understanding of:
Use of recursion in a program.
Big ‘O’ notation and order of complexity of algorithms.
Graph theory and graph traversal algorithms
Representation and rendering of cubic Bezier curves.
Newtonian mechanics including force, mass, velocity, and acceleration.
Derivatives and integrals and their relationship to slope and to mechanics.
RGB color model and display properties.
Software Design Patterns
Collision detection in 2D interactive graphics
Department policy specifies that all students must provide verification of completion of all prerequisite courses to the instructor. To do this you must submit to the instructor a copy of the CasperWeb Academic Information report entitled “Transfer and CSUS Credit Summary”. This must be done within the first two weeks of classes. Any student who does not provide such verification will be dropped from the class. Any student who has completed one or more prerequisites at another school must provide similar verification to the instructor. NOTE: be sure to provide the report specifically titled “Transfer and CSUS Credit Summary”. Other CasperWeb forms (such as the “Academic Record” form) will not be accepted.
Department policy specifies that students may not repeat a Computer Science course more than once. Any student who wishes to repeat a course more than once (that is, take a course for a third time) must submit a petition requesting permission to do so. Student records will be reviewed to determine whether a student is taking this course for a third (or subsequent) time. Any such student must return an approved petition to the instructor within the first two weeks of class. Any student who does not submit an approved petition will be dropped from the class. Petitions are available in the Department office (RVR 3018) and require the signature of both the Instructor and the Dept. Chair.
Course Goals and Structure:
The goals of this course are to give students a thorough understanding of the architecture, algorithms, data structures, and optimization techniques used in game implementations; to show how geometric models are used in game systems and how the 3D graphics pipeline relates to computer games; to demonstrate the use of physics and behavioral simulation components, as well as the use of sound and music, in game implementations; and to develop an understanding of the use of networking techniques and of the factors which affect real-time interactive control of games and virtual reality simulations. After completing the course students should be capable of developing their own interactive 3D computer game using established software engineering techniques and the application of appropriate algorithms and data structures.
Courses numbered CSc 196 are by definition “Experimental Courses”, so we will be “experimenting” with a variety of techniques for learning about Computer Game Design and Implementation. There will be numerous programming assignments during the semester, each structured to help students learn about various facets of the design and implementation of games. Some programming projects may be assigned as team projects, while others will be assigned as individual work. There will also non-programming assignments; for example, projects to research and report on various commercial games, development tools, and/or industry developments.
By the end of the semester each student or student team should have a working version of an original game utilizing the techniques covered during the semester. At the end of the semester we will schedule a “Game Party” – an evening in a school laboratory where everybody’s game is installed on a machine (or set of machines) and everyone in the class gets to play (and evaluate) all the games.
Texts and References:
The following text is required for the course unless you are already an expert at OpenGL; it is available in the Hornet Bookstore as well as via local bookstores and numerous on-line booksellers:
OpenGL, A Primer, 2nd Ed., by Edward Angel; Addison-Wesley; ISBN 0-321-23762-5
In addition some students may find the following references helpful:
“3D Game Engine Design – A Practical Approach to Real-time Computer Graphics”, David Eberly, Academic Press, ISBN 1-55860-593-2
"3D Games Volume 1 - Real-time Rendering and Software Technology", Watt and Policarpo, Addison-Wesley, 0-201-61921-0
"3D Games Volume 2 - Animation and Advanced Real-time Rendering", Watt and Policarpo, Addison-Wesley, 0-201-78706-7
"Software Engineering and Computer Games", Rudy Rucker, Addison-Wesley, 0-201-76791-0
Since the prerequisite course sequence at CSUS uses the Java programming language, this course will be taught using Java, and assignments must be submitted in Java. Students not already familiar with Java need to be aware that they will be at a substantial disadvantage in the course. A separate bibliography of popular Java texts, as well as a bibliography on “Java for C++ Programmers” topics, will be handed out in class to assist such students. However, it will be the responsibility of each student to be proficient in using Java. If you are not already familiar with Java it is strongly recommended that you use the handout bibliographies to make yourself so as rapidly as possible.
Since this is an experimental course being taught for the first time, the format for grading may vary as the semester progresses. However, the starting point will be as follows:
Game Development Programming Assignments ~ 35%
Reports and Presentations ~ 15%
Midterm Exam ~ 25%
Final Exam ~ 25%
Overall course grades will be computed based on a weighted average as shown above. Grading is done on a curve. “Programming Assignments” comprises a number of separate assignments which are not necessarily weighted equally. Makeup exams are not given except under the most extreme (and documented) circumstances, in which case every effort should be made to contact the instructor in advance. Late assignments will be accepted (in general I’d rather have you do the work late than not at all), but a penalty of 4% per day will be applied to all late work, up to a maximum late penalty of 60% (thus you can always receive some credit for even very late submitted work). Additional substantial late penalty may be applied for failure to deliver a working game in time for the end of the semester Game Party. Weekends and holidays are not counted in computing lateness of assignments. Students should keep all returned (graded) work until after final grades are posted.
NOTE: in addition to grades being computed as described above, one further constraint applies: in order to achieve a passing grade for the course, it is a requirement that you achieve a passing grade for BOTH (1) the sum of all assignments; and for (2) the average of the exams (Midterm and Final).
Computers & Communication:
There are several computer options available for doing class assignments. Students may work on any school machine onto which Java, OpenGL, and JOGL (the Java/OpenGL interface) has been installed (this includes both Unix and Windows-PC’s), or on their own machine at home provided they download and install the necessary software (which is free). Procedures for this will be discussed in class.
Regardless of which computer option you choose for doing class assignments, you are expected to be familiar with and use electronic mail (email). It is a requirement of the class that you register with the class email list (see below) and that you read your email regularly. It is assumed that email notices sent to the class list are received and read by you. (If you do not have an email address, see the Lab Assistant in ECS 2011 to obtain an ECS network account.)
The class email list is an automated discussion list (also called a listproc or listserv) set up for the class. The name of the discussion list is “csc196o” (note the lower-case letter “o” at the end). To add yourself to the list, you should send an email message to the address “firstname.lastname@example.org”. In the body of the message, put a line saying
This will add your email address (the one from which you send the message) to the csc196o discussion list. Subsequently you can send questions or discussion items regarding topics in CSc 196o to everyone on the list. To do this, just send an email message to the address “email@example.com”. This is a good way to ask your fellow students for clarifications about assignments, lecture topics, etc. Keep in mind that each such mail message gets sent to everyone on the csc196o list (including the instructor). If you need to communicate privately with the Instructor, use the Instructor’s individual email address as given above.
Note that signing up on the class mailing list (as described above) is both required and anonymous; you need only put your email address on the list, not your real name. However, since there are occasions where I may need to communicate with you directly, I need to know your individual email address. Therefore, it is also a course requirement that you send a separate email message to my email address (firstname.lastname@example.org) stating (1) your name, and (2) your email address. You do not need to send this information to the class mailing list (in fact, you shouldn’t).
Except at the beginning of the semester when enrollment is an issue, attendance is not normally taken. However, students are responsible for all material discussed or handed out. Please inform yourself of the Department, College, and University policies on dropping courses. Incompletes are not given except in unusual circumstances documented to be beyond the student’s control.
When a student submits work to the instructor, it constitutes a contractual agreement that the work is solely that of the student, or in the case of team projects, solely that of the team members. Further, submitted work carries with it an implicit agreement that the instructor may quiz the student in detail about the work.
If a student attempts to raise their grade through unethical means, it is in essence causing a lowering of the grades of other students in the class, since the class is graded on a curve. Further, any student who gives such help is equally guilty of unethical behavior for the same reasons. Therefore, all students are hereby notified that this course is being taught by an instructor who will pursue attempts at cheating, since those students who are cheating are cheating on you.
The minimum penalty for even a single incident of cheating in this course is automaticfailure of the course; additional more severe penalties may also be applied. Note that, as stated in the University policy manual: cheating is grounds for dismissal from the University.
Please refer to the separate handout, “Ethics in Computer Science Classes”, and to the Computer Science Dept. document entitled “Policy on Academic Integrity” (available online via the CSc Dept. home page) for additional information. It is the responsibility of each student to be familiar with, and to comply with, the policies stated in these documents.