CMPUT 350 Advanced Games Programming

Due to COVID-19 lectures and labs will be held remotely via Google-meet, and the exact quiz/lab/exam formats still have to be worked out. To cover all bases, we expect students enrolled in this course to have access to a reliable internet connection during lecture and lab hours that supports video conferencing (camera, microphone, and speakers) for interactive sessions such as oral exams

Check often. If you have clarification questions send a message to the eClass forum (link below). Also, please note that some due dates listed below will NOT appear in your eClass calendar

Fall 2020, Instructor: Michael Buro
Lectures: TR 11:00 - 12:20 remote+synchronous (starting Sep-1)
Labs: T 14:00-16:50 remote+synchronous (starting Sep-1)
MB office hours (remote): TBA, or by appointment (send email to mburo@... [UofA account] after contacting a TA first)
TA office hours: send email to TA to arrange a remote meeting
TAs: Christopher Solinas (solinas@...), Jake Tuero (tuero@...) [UofA accounts]



                  Labs          Lecture     Assign.  Lecture
                                (AI)                 (C++/Gfx)
  Week of     Tuesdays (+1)      Tues.(+1)  Wed.(+2) Thurs.(+3)
  (Monday)    14:00 - 16:50   |  11:00      22:00    11:00
 1. Aug.31        B-1         |   L1                  L2       R01
 2. Sep.07        B0          |   L3                 +L4       R02
 3. Sep.14        B1          |  +L5        A1r      +L6       R03
 4. Sep.21        B2          |  +L7                 +L8       R04
 5. Sep.28        B3          |  +L9     TS/A1d/A2r  +L10      R05
 6. Oct.05        B4          |  +L11                +L12      R06
 7. Oct.12        B5          |  +L13    PP/A2d/A3r  +L14      R07
 8. Oct.19        B6          |  +L15                +L16      R08
 9. Oct.26        B7          |  +L17       A3d      +L18      R09
10. Nov.02        B8          |  +L19       PPR1     +L20      R10
11  Nov.09  %(Reading Week) 
12. Nov.16        B9          |  +L21       PPR2     +L22      R11
13. Nov.23        B10         |  +L23                +L24      R12 
14. Nov.30  P remote 2-5pm    |  +L25                +L26      REX
15. Dec.07  PR (Monday)
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 (Sep 30, 22:00)
        PP         : project proposals due (Oct. 14, 22:00)
        PPRi       : project progress report i due (Nov. 4/18, 22:00)
        P          : project presentations
        PR         : Project report and software due (Dec. 7, 22:00)
        Final Exam : tentative date: Dec-17-2020, 2-5pm; 
        deferred final exam date: Monday, Jan-4-2021, 8:45-11:45





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, object oriented programming, templates, STL
  2. AI for video games:
  3. RTS game engine internals: map representations, game simulation 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 basics will be interleaved. Each week the lab session and the Thursday lecture will be devoted to C++ and OpenGL programming, and the Tuesday lectures 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


Quizzes at the beginning of 6 randomly selected lectures test whether you have done your weekly reading assignment. The quiz format is "closed book", meaning you can't use help or resources of any kind to solve the problems. 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. Lab problems are to be solved only with the help of course material published on this web page. Web searches or any other outside help are not permitted. Missed lab exercises are worth 0 marks, but in the end we only consider the best 8 out of 10 lab exercises.

During the prep and exercise lab phases we demand that all students are present in their private Google-Meet rooms with their cameras, microphones, and speakers switched on, sharing their entire screen, being visible at all times, and communicating with visiting TAs (i.e., not listening to loud headphone music). We will randomly visit students during the labs, monitoring progress and answering questions they may have. If we find that we repeatedly can't contact students this way, course mark deductions will be imposed based on the following policy: 3 no-show incidents are free. For each subsequent incident, 2% will be deducted from the final course work total. A now-show incident is one in which a student submitted lab exercise solutions but during the prep or exercise lab phase we failed to contact the student in their room twice, where failing includes: camera off, student not visible, student not responding, or full screen not shared.

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 composed of AI-related questions and medium-sized programming tasks. All used sources have to be listed. 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 (ideal) or 3 (the exception) 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, BelShirVestigeLE, and ProximaStationLE maps 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

When selecting teams you have to make sure that there is at least one 1h time slot each week in which all team members can attend an online group meeting

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 selfies showing 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 having access. Our github ids are solinas and tuero

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. 7, 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 3h 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/lab/quiz questions *before* looking up solutions. Forming study groups is highly recommended

The final exam will be held synchronously and possibly feature a brief oral exam

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)

All forms of dishonesty are unacceptable at the University. Any offence will be reported to the Associate Dean of Science who will determine the disciplinary action to be taken. Cheating, plagiarism and misrepresentation of facts are serious offences. Anyone who engages in these practices will receive a grade of zero for the work in question and no opportunity will be given to replace the grade or redistribute the weights. As well, in the Faculty of Science, the sanction for cheating on any examination will include a disciplinary failing grade (NO EXCEPTIONS) and senior students should expect a period of suspension or expulsion from the University of Alberta.

Students are expected to familiarize themselves with the Academic Integrity resources (covering the topics of cheating, collaboration, plagiarism, and substantial assistance) on the website of the Office of the Dean of Students.

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 instructors 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 Jul/17/2020