CMPUT 350 Advanced Games Programming

Check often. If you have clarification questions send a message to the forum (link below). I am not using eClass in this course, except for the forum and assignment submissions. In particular, due dates will NOT appear in your eClass calendar!

Fall 2019, Instructor: Michael Buro
Lectures: TR 11:00 - 12:20 CAB 273 (starting Sep. 3)
Labs: T 14:00-16:50 CSC 153 and 159 (starting Sep. 10)
MB office hours (ATH 337): T12:30-13:00, or by appointment (send email)
TA office hours: send email to TA to arrange a meeting
TAs: Christopher Solinas (solinas@...), Arta Seify (seify@) [UAlberta accounts]



Important: starting F2019 CMPUT 204 (or 304) will be a prerequisite for CMPUT 350. The reason is that in passed iterations of the course students without adequate algorithm/data structure background struggled and it became clear that CMPUT 204 should have been a prerequisite all along. In preparation for the course please study the "toolbox" material and CMPUT 204 refresher we provide below prior to the first lecture as we only have little time during the term to discuss fundamental algorithms and data structures.

(CMPUT 201 or 275) and (CMPUT 204 or 304) are firm prerequisites which will be enforced




                  Labs          Lecture     Assign.  Lecture
                                (AI/Gfx)             (C++)
  Week of     Tuesdays (+1)      Tues.(+1)  Wed.(+2) Thurs.(+3)
  (Monday)    14:00 - 16:50   |  11:00      22:00    11:00
 1. Sep.02        %           |   L1                  L2       R01
 2. Sep.09        B0          |   L3                 +L4       R02
 3. Sep.16        B1          |  +L5        A1r      +L6       R03
 4. Sep.23        B2          |  +L7                 +L8       R04
 5. Sep.30        B3          |  +L9     TS/A1d/A2r  +L10      R05
 6. Oct.07        B4          |  +L11                +L12      R06
 7. Oct.14        B5          |  +L13    PP/A2d/A3r  +L14      R07
 8. Oct.21        B6          |  +L15                +L16      R08
 9. Oct.28        B7          |  +L17       A3d      +L18      R09
10. Nov.04        B8          |  +L19       PPR1     +L20      R10
11  Nov.11  %(Reading Week) 
12. Nov.18        B9          |  +L21       PPR2     +L22      R11 
13. Nov.25        B10         |  +L23                +L24      R12 
14. Dec.02  P CSC 333 2-5pm   |  +L25       PR       +L26      REX
Legend: Li         : lecture i
        Bj         : lab j
        Rl         : reading assignment l
        Ajr/Ajd    : assignment j released / due (Wednesdays 22:00)
        Ajq/Ajs    : assignment j questions / solutions
        %          : no class / lab / reading assignment
        +          : 6 randomized in-class quizzes (about reading assignments)
        TS         : project team selection (Oct. 2, 22:00)
        PP         : project proposals due (Oct. 16, 22:00)
        PPRi       : project progress report i due (Nov. 6/20, 22:00)
        P          : project presentations
        PR         : Project report and software due (Dec. 4, 22:00)
        Final Exam : (Tentative) M Dec-16-2019, 14:00-16:00, Main Gymnasium Row 11, CLOSED BOOK FORMAT
        Deferred final exam date: Monday, Jan. 6, 2020, 09:45-11:45 (CSC 249)


This course is aimed at undergraduate students interested in learning C++, AI, algorithmic game theory fundamentals, and graphics programming for video games. The course has five parts:

  1. C++ programming: from C to C++, classes, OO programming, templates, STL
  2. AI for video games:
  3. RTS game engine internals: map representations, game frame cycle, fast collision tests
  4. 3D graphics primer: OpenGL intro, fundamental gfx primitives and functions, from geometry to pixels on the screen (some basic linear algebra and geometry needed: 4d vectors, matrix multiplication, 3d rotations)
  5. Team Project (improve video game AI using C++)

Building fast game engines and smarter AI systems for video games is challenging and fun. This course will give students hands-on experience which can open the door to the video games industry!

Course Structure

Teaching C++, game AI, and OpenGL will be interleaved. Each week the lab session and the Thursday lecture will be devoted to C++ and OpenGL programming, and the Tuesday lectures first to game AI. This allows us to implement AI algorithms in C++ earlier in the course.

Also, instead of the established lecture-lab-assignment-exam routine, in this course we will try something different: the inverted class room. The goal of this teaching philosophy, which has been experimented with extensively in recent years, is to teach students to become independent learners and problem solvers more effectively. The main idea is to replace lecture time that used to be filled with instructors' monologues by more valuable interactive problem solving sessions.

In this course we will invert 50% of the lectures:


Course Work

There will be 3 assignments, 6 quizzes, 10 lab exercises, a team project, and a final exam

Expected time investment per week: ~8.5h


Please visit this page to learn about our interpretation of letter grades In this course grades will not be curved, they are absolute - closely following these cut points:
≥ 90% A+   ≥ 85% A    ≥ 80% A-
≥ 76% B+   ≥ 73% B    ≥ 70% B-
≥ 66% C+   ≥ 63% C    ≥ 60% C-
≥ 55% D+   ≥ 50% D    < 50% F
subject to this important condition: if the result of the final exam is less than 40%, the final course grade will not be better than D+.


Quizzes at the beginning of 6 randomly selected lectures test whether you have done your weekly reading assignment. Missed quizzes are worth 0 marks, but in the end we only consider the best 5 quizzes out of 6

Lab Exercises

Each lab session is concluded by a graded lab exercise in which students solve C++ programming problems that relate to the previous week's reading assignment and related Thursday lecture. Missed lab exercises are worth 0 marks, but in the end we only consider the best 8 out of 10 lab exercises.

Tips for the labs: study the reading assignment and the respective quiz and lecture material. Try to solve the lecture problems again on your computer. During the lab exercise bring up the notes and lecture material. Design your code top-down, driven by test code which you may want to write first. Write your code in small pieces you can easily test. Only proceed when your written code compiles to avoid getting swamped by pages of error messages later.


Assignments are medium-sized programming tasks. Solutions have to be handed in by 22:00 on the due dates electronically via eClass.
Each student will be allowed AT MOST ONE assignment submission that is late by at most 24 hours. For such late assignments 30% of the achievable marks will be deducted. Any subsequent late submission will receive 0 marks - as will submissions that are late by more than 24 hours. Assignment marking related questions will be addressed by the TAs. You need to contact them within 2 days after the marked assignments have been returned. Later inquiries will be ignored.


Project groups consisting of 4 (or 3) students who will work together on a video game AI project. This year we will concentrate on StarCraft 2 AI. All projects will create a full-game StarCraft 2 bot based on the C++ game API Blizzard provides (rather than Python or Command-Center (a modular C++ SC2 bot). At the end of the course we will use the CactusValleyLE map to run a tournament between all StarCrat 2 bots. A fraction of the project marks will depend on how well bots do in the tournament.

To get started have a look at Tutorials 1-3 here. This helps you build a rudimentary bot that does some resource gathering and Marine building.

To prepare your bot to work with our tournament software clone this git repository and follow the instructions

Each team needs to setup a (private) github/bitbucket repository for the project and give the TAs access, implement and test modules, gather performance statistics, and describe their work in a project report and an in-class presentation.

Team Selection

Pick your teammates and send me an email (subject: [350] TS) containing a list of team members, your bot name, and a one line (tentative) project description by the TS deadline above. New: Also, attach a selfie showing all team members and a screen on which we see a sample bot in action which your team built following the SC2 tutorial mentioned above. In the email explain what we are supposed to see in the screenshot. Only one email per team, please.

Project Proposals

Each team has to submit a project proposal to me (see PP deadline above) (subject [350] Proposal). The format is 1-page, 12pt proportional font, ≤ 2.5cm margins, pdf. The document must motivate your project, describe its goals, and how to achieve them.

Project Progress Report 1

Via eClass, each team has to submit once

Also, all private team github repositories need to be in place, with the TAs and I having access. Our github ids are solinas and mburo

Project Progress Report 2

Via eClass each team has to submit a report that describes your project progress (2/3 of the proposed work done), obstacles you ran into, how to overcome them, possible revisions of your project goals, and a breakdown of work already done by whom. The format is 1-page pdf, 12pt proportional font, ≤ 2.5cm margins.

Project Presentation

Teams that don't present their work will receive 0 marks for the presentation.

Project Submission

Project file needs to be submitted via eClass by Dec. 4, 22:00. Late submissions will not be accepted and will result in 0 marks for software functionality and the report.

Only submit once per team. The file must not be bigger than 30MB.

Contents of :

Make sure your code compiles without warnings and does not crash. Lots of marks will be deducted if this is not the case!

The project report is a more in-depth document which you would use to convey any information about your project including motivation, description of your approach and software modules, evaluation, and future work.

Both the presentation and the report are primarily means by which you can communicate your results. As such, you should focus on whatever you feel is significant that we should know about.

Project Evaluation

If there is evidence of lopsided project work distributions early on, bring it to the instructors attention!

Final Exam

The final 2h exam will cover all course material: The exam question format will be similar to that of the quizzes, mainly focusing on concepts, but at times going beyond simple recall questions. Questions on the AI lecture parts will have higher probability (see the "final" reading assignment).

To prepare for the exam, read the lecture material and then try to answer all reading/assignment/quiz questions *before* looking up solutions. Forming study groups is highly recommended.

Academic Integrity

The University of Alberta is committed to the highest standards of academic integrity and honesty. Students are expected to be familiar with these standards regarding academic honesty and to uphold the policies of the University in this respect. Students are particularly urged to familiarize themselves with the provisions of the Code of Student Behaviour and avoid any behaviour which could potentially result in suspicions of cheating, plagiarism, misrepresentation of facts and/or participation in an offence. Academic dishonesty is a serious offence and can result in suspension or expulsion from the University. (GFC 29 SEP 2003)

Copying and cheating on assignments will be penalized with a mark of 0 (see the standard handouts for academic dishonesty and copying and cheating), and Section 30.3.2 Inappropriate Academic Behaviour.

If you want to use a git repository for storing your course work (not related your project) make sure it is private. You also must not share your repository with fellow students. Keep in mind that it is easy to find code similarities with automated tools ...

Course Policies

Unless otherwise noted, the CS Department Policies are in effect.


In this course we use the "Consultation" model: students are encouraged to discuss and solve problem sets in small groups to speed up learning and stimulate idea exchange. In the end, however, students must write down their own solutions and be able to solve similar problems independently.

Regardless of the collaboration method allowed, you must always properly acknowledge the sources you used and people you worked with. Failure to give proper credit is considered plagiarism. In general, academic dishonesty is a serious offence and can result in suspension or expulsion from the University.

Your professors reserve the right to give you an exam (oral, written, or both) to determine the degree that you participated in the making of the deliverable, and how well you understand what was submitted. For example, you may be asked to explain any code that was submitted and why you choose to write it that way. This may impact the mark that you receive for the deliverable.

Note that this potential additional questioning about your deliverable is part of the assessment process, both summative (for marks) and formative (for feedback to you and us). It is intended to give us additional information about what you have learned. So, whenever you submit a deliverable, especially if you collaborate, you should be prepared for an individual inspection/walkthrough in which you explain what every line of your code, assignment, design, documentation etc. does and why you chose to write it that way.

last modified on  ; you are visitor # since Aug/29/2019