This course provides an introduction to video game programming.
The course material will cover game programming techniques and technologies, including rendering, input, memory management, real-time software development for games; start-to-finish simple video game design and implementation; project management; teamwork and team management.
Students will learn to plan, manage and implement from scratch a video game over the course term. They will learn to apply theoretical knowledge in a practical, real-life setting and acquire hands-on problem solving skills.
You should be able to take the course if you satisfy the following pre-reqs: One of MATH 200, MATH 253 and one of MATH 152, MATH 221, MATH 223 and either (a) CPSC 221 or (b) all of CPSC 260, EECE 320. Please see the official UBC course description for the prerequisite specifics.
Instructor: Alla Sheffer.
Office Hour: Friday 1-2 X651
Contact: We will use Piazza for all the announcements and questions.
This is a hands-on, project-based, course. As such the grading is 100% homework based with most of the grade based on your contribution to a team video game project.
Mark distribution: Intro Individual Assignment (5%), Individual project progress reports (4%), Game Pitch (3%), Team Video Game Project (88%). Project grade split: 63% project milestones (including proposal), 25% final assessment. The project grade will reflect both the team effort and the individual contribution of each team member.
For more details see the course policies
Why? Video games and game development represent a billion dollar industry, and there is a high demand for programmers at all levels with experience in this area. Vancouver is a major game industry hub with both major studios (Electronic Arts; Activision; Microsoft Research) and smaller groups (Blackbird Interactive; Capcom Vancouver; East Side Games).
In addition to being a relatable and exciting software domain, game implementation can provide valuable portfolio pieces for new students seeking jobs. Game development combines programming problems from areas such as artificial intelligence and computer graphics with the opportunity for creative and imaginative endeavors.
It is simply FUN!!
What? An opportunity for students to gain experience developing a video game from start to finish, and to acquire basic knowledge on core elements of video game development.
How? During the span of the course, students will work in teams of approximately 6 people to create a complete small to medium-sized (2D or 3D) video game (prior experience with computer graphics is a plus but is not required). The games will be implemented from scratch: you will be provided with a minimalist starting template and will be expected to write most/all the rest of the code yourself; you will be able to add externall libraries for "bells and whistles" as long as these do not replace coding of key milestones. We will not rely on any game engines in the development of the key features to allow students to implement those themselves and better understand core game components.
Students completing the course will learn about and implement basic methodologies across areas of computer science that are involved in the programming of a video game - computer graphics, artificial intelligence, path planning, audio programming, and software design. Theiy will become familiar with software development elements such as memory management, "bare metal" hardware programming, and real-time algorithm implementation.
Students will also be familiarized with standard software engineering tools such as debuggers, profilers, and multi-user revision control.
The final project for this course will be a completed video
game that students can take home and exhibit to friends, family, and potential employers.
Objective/Learning Goals
- to expose students to the fundamental technologies, tools, methods and algorithms used in commercial video game development;
- to provide students with additional hands-on experience working on a complete software project, start to finish, from design to implementation;
- to immerse students in a typical team project environment, and demonstrate best communication and collaboration practices.
- to enable students to experience first-hand the pitfalls and challenges of working on a real-time software platform using C++ as a programming language;
- to provide students with a unique, creative portfolio piece that can be shown to potential employers.
Lectures are scheduled on Monday 15:00-16:00 and Friday 15:00-17:00 in DMP 301.
Tutorial location/time will be split/rotated between Monday 16:00-17:00 in DMP 301 and Wednesday 16:00-17:00 in MacLeod 242.
Lecture time will include both regular lectures, class status review meetings, and team meetings when necessary. Tutorials will be largely dedicated to team meetings with instructor or TA.
We will have more lectures early in the term (up to three hours), with meetings gradually taking over toward the end.
Lecture materials will appear here as we proceed, with no guarantee we'll post everything. So do come to the lectures!
Once teams are set, we will have bi-weekly agile status review meetings (one hour) with a rep from each team reporting on bi-weekly/milestone progress (~3min per team).
Teams will also meet weekly with the TA and Bi-weekly with instructor to discuss progress.
Topic | Old Links(Spring 2018) | New Links (Spring 2019) | |
---|---|---|---|
01 - Intro | [PDF] | ||
02 - Rendering Pipeline, Part I | [PDF] | ||
03 - Shaders and OpenGL | [PDF], [tutorial-PDF] | ||
04 - Rendering Pipeline, Part II | [PDF] | ||
05 - Transformations | [PDF] | ||
06 - 2D Geometry: Curves | [PDF] | ||
07 - Gameplay: Basics | [PDF] | ||
08 - Gameplay: Strategy | [PDF] | ||
09 - User Interface Design 101 | [PDF] | ||
10 - Physics Based Animation 101 | [PDF] (no writing) | ||
11 - Collisions | [PDF] | ||
12 - Programming 101 | [PDF] | ||
13 - Advanced GLSL | [PDF] | ||
14 - Game programming (Craig Peters, EA) | [PDF] | ||
15 - Animation++ (Yggy King, BlackBirdInteractive) | [PDF] | ||
16 - Game UX (Ben Humphreys) | [PDF] | >||
17 - Software optimization (Gijs Kaerts and Russell Gillette, SkyBox Labs) | [PDF1][PDF2] |
Relevant documents: milestones document, example technical content criteria for game project
# | Date Released (tentative) | Date due | Links |
---|---|---|---|
Hello World Intro to Video Games | Jan 1st | Jan 18 | Assignment template is here (individual assignment) |
Team Project | Jan 1st | Apr 19 | Project milestone breakdown (milestones document) |
Project Pitch | Jan 14 | ||
Full Proposal | Jan 21 | Template (word) Template (pdf) | |
Skeletal game | Feb 1 | ||
Minimally playable game | Feb 22 (end of midterm break) | ||
Playable game | Mar 8 | ||
Robust playable game | Mar 29 | ||
!!!Grand Finale!!! | Apr 19 |
TAs: Shayan Hoshyari, Chenxi Liu, Eduardo Dominici
Please contact them via Piazza.
TAs will be able to answer your questions regarding the assignment/projects during regular meeting times and will schedule additional office hours as necessary.
To submit your programming assignment/milestone code, please follow instructions in the milestone document.
Each milestone is due 23:59:59 pm on the day specified. No late submissions accepted, except for the grace days:
Grace days: Each team may use up to 3 grace days per term for the group game milestones (grace days cannot be used for the individual "hello world" assignments). We will keep track of your grace days. Use these as you wish to help manage your time, but use them wisely. You can use all three on one milestone, or one day for each of three milestones. Grace days are counted as integers, i.e., if you are one hour late, that counts as one grace day. Weekends (Sat/Sun) do not count (so submitting a milestone on Monday instead of Friday counts as one day). Once your grace days are all used, late submissons will receive a grade of zero.
Grading: We will use "face-to-face" grading. A description of the process and expected prep is detailed here. ALL team members are expected to attend each grading sessions and should be able to pinpoint their contributions for each individual marked milestone. You will be required to demonstrate that you understand why your program works. You must be able to explain every single line you wrote!
Plagiarism: Shortly: don't cheat. What's considered cheating in CPSC 436D: here. What department does with cheaters: here.
Missed work: Policy here.
Dropping: Because of the high demand for this course, the drop deadlines will be strictly enforced. No drop forms will be signed by the instructor after the first drop deadline. After that date, you will not be given permission to drop, and you will either have to complete the course or receive an "F" for the course at the end of the term. This policy has been adopted to encourage students to make a serious commitment to the course or to drop it early so that other students waiting to get into the course can register for it.