CMPUT 350 Advanced Games Programming

Check often. If you have clarification questions, send an email to the instructor or one of the TAs, or come to the office hour

Fall 2023
Instructor: Michael Buro (mburo@... [UofA account])
Lectures: TR 11:00-12:20 CAB 273 (face-to-face, starting Sep-5)
Labs: T 14:00-16:50 CSC 153/159 (face-to-face, starting Sep-12)
Office hours: Thursdays 12:30-13:45 Ath 337 (or send email to instructor or TA)
TAs: Jake Tuero (tuero@...), Curtis Kennedy (ckennedy@...) [UofA accounts]



                  Labs          Lecture     Assign.  Lecture
                                 (AI)               (C++/Gfx/AI)
  Week of     Tuesdays (+1)      Tues.(+1)  Wed.(+2) Thurs.(+3)
  (Monday)    14:00 - 16:50   |  11:00      22:00    11:00
 1. Sep.04        %           |   L1                  L2       R01
 2. Sep.11        B0          |   L3                  L4       R02
 3. Sep.18        B1          |   L5        A1r       L6       R03
 4. Sep.25        B2          |   L7                  L8       R04
 5. Oct.02        B3          |   L9     TS/A1d/A2r   L10      R05
 6. Oct.09        B4          |   L11                 L12      R06
 7. Oct.16        B5          |   L13    P1/A2d/A3r   L14      R07
 8. Oct.23        B6          |   L15                 L16      R08
 9. Oct.30        B7          |   L17       A3d       L18      R09
10. Nov.06        B8          |   L19       P2        L20      R10
11  Nov.13  %(Reading Week) 
12. Nov.20        B9          |   L21                 L22      R11
13. Nov.27        B10         |   L23                 L24      ---
14. Dec.04  P3 CSC 333 2-5pm  |   L25       P4        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
        TS         : project team selection (Oct. 4, 22:00)
        P1         : project proposal (Oct. 18, 22:00)
        P2         : project progress report (Nov. 8, 22:00)
        P3         : project presentations (Dec. 5, 14:00)
        P4         : poject report and software (Dec. 6, 22:00)
        Final Exam : Dec-20-2023, 14:00-17:00, ED GYM ROWS 18,20; CLOSED BOOK FORMAT
        Deferred final exam date: Monday, Jan. 8, 2024, 09:45-12: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. AI for video games:
  2. RTS game engine internals: map representations, game simulation cycle, fast collision tests
  3. 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)
  4. C++ programming: from C to C++, classes, object oriented programming, templates, STL
  5. Team Project (write a video game bot in 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, 10 marked lab exercises, a team project, and a final exam

Average weekly time investment (averaged over 13 weeks) estimate: ~10.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

Lab Exercises

Each lab session starts with a prep period (1:30h) and ends with a graded lab exercise (1:20h) in which students using a lab computer in CSC 153 or 159 solve C++ programming problems that relate to the previous week's reading assignment and the previous Thursday lecture, and the prep session. Lab problems are to be solved only with the help of course material published on this web page including C/C++ references. 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 results. This rule allows students to miss a small number of labs due to exceptional circumstances (illness, conference presentations, sport events, etc.) without losing marks. We won't ask for details

Tips for the labs: study the reading assignment and the respective 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 (e.g., if the mark total is 57, 17.1 marks will be deducted, capped at 0). 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.

As the weight of missed assignments is not moved to other course components, we recommend to start working on assignments right away to minimize the chance of getting 0 marks in case of an unforeseen event


Project groups consisting of 4 (ideal) or 3 (the exception) students who will work together on a video game AI project. Teams will write a StarCraft 2 bot based on the C++ game API Blizzard provides. At the end of the course we will use the CactusValleyLE, BelShirVestigeLE, and ProximaStationLE maps to run a tournament between all StarCrat 2 bots. Around 10% 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 a 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 a group meeting (possibly online)

Team Selection (TS)

Pick your teammates and submit text file ts.txt containing a list of team members, your bot name, and a one line (tentative) project description by the TS deadline above. Also, submit a screenshot of the sample bot in action which your team built following the SC2 tutorial mentioned above. In the text file also explain what we are supposed to see in the screenshot

Only one eClass submission per team, please

Project Proposal (P1)

Each team has to submit project proposal pdf file prop.pdf on eClass (see P1 deadline above). The format is 1-page, 12pt proportional font, ≤ 2.5cm margins. The document must motivate your project, describe its goals and how to achieve them. Like for TS, please only submit one pdf file per team

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

Project Progress Report (P2)

Via eClass by the P2 deadline, each team has to submit once a report (prep.pdf) that describes your project progress (1/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 (P3)

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

Project Submission (P4)

Each team has to submit project report and software archive on eClass (see P4 deadline above). 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 30 MB (in particular, it shouldn't contain executables)

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. It should have at least the following sections:

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 final exam question format will be similar to reading, lab, and programming assignment questions, but focus more on concepts. Also, 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 questions *before* looking up solutions. Also make sure that you understand the discussed algorithms work and what properties they have. 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)

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

Also, using generative AI tools such as chatGPT or github-copilot constitutes plagiarism in this course - as the main objectives of the course are for students to learn to write C++ code and solve problems independently


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) or ask for a software demonstration 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/31/2023