CMPUT 350 Advanced Game 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. In particular, due dates will NOT appear in your eClass calendar!

Fall 2016, Instructor: Michael Buro
Lectures: TR 11:00 - 12:20 SAB 331 (starting Sep. 1)
Labs: M 14:00-16:50 CSC 153 and 159 (starting Sep. 12)
Office hours MB: M 13:00-13:30, T 12:30-13:00 (Ath 337) or by appointment
Office hours: Nicolas (TBA)

eClass Forum Post general course related questions there.

TAs (email addresses end with
< Nicolas (barriga@)
< Marius (astanesc@)





Important: registration is open to anyone who has passed CMPUT 201 or CMPUT 274/275 or CMPUT 296/297. If you haven't, but think you have equivalent knowledge in C programming - covering pointers, dynamic memory allocation, bit operations, input/output, makefiles, and debugging, please schedule an appointment with me to discuss your case. Students without prerequisites will be withdrawn from the course without notice. Also helpful is basic linear algebra knowledge (vectors, matrices, matrix multiplication, cross product, etc) and fundamental algorithms and data structures (~ CMPUT 204).

Tentative Schedule

                  Labs          Lecture    Assign.  Lecture
                                (AI/Gfx)             (C++)
  Week of     Mondays (+0)      Tues.(+1)  Wed.(+2) Thurs.(+3)
  (Monday)   14:00 | 15:30    |  11:00      22:00    11:00
 1. Aug.29  %                 |   %                   L1       R1
 2. Sep.05  %(Labour Day)     |  +L2                 +L3       R2
 3. Sep.12        B0          |  +L4                 +L5       R3
 4. Sep.19        B1          |  +L6        A1r      +L7       R4
 5. Sep.26        B2          |  +L8        IN       +L9       R5
 6. Oct.03        B3          |  +L10       A1d/A2r  +L11      R6
 7. Oct.10  %(Thanksgiving)   |  +L12       TS       +L13      R7
 8. Oct.17        B4          |  +L14       A2d/A3r  +L15      R8
 9. Oct.24        B5          |  +L16       PP       +L17      R9
10. Oct.31        B6          |  +L18       A3d      +L19      R10
11. Nov.07  %(Reading Week)
12. Nov.14        B7          |  +L20       PPR      +L21      R11
13. Nov.21   B8 (Proj.Help)   |  +L22                +L23      R12
14. Nov.28        B9          |  +L24                +L25
15. Dec.05  P CSC 333 2-5pm   |   L26       PR        %     Dec.11: V
Legend: Li         : lecture i (T: AI/Gfx, R: C++)
        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
        +          : 12 randomized in-class quizzes (reading assignments)
        IN         : StarCraft software installation due (Sep. 28, 22:00)
        TS         : project team selection (Oct. 12, 22:00)
        PP         : project proposals due (Oct. 26, 22:00)
        PPR        : project progress report due (Nov. 16, 22:00)
        P          : project presentations
        PR         : Project report and software due (Dec. 7, 22:00)
        V          : Video compilation due (Dec. 11, 21:00)
        Final Exam : Mon Dec 12 9-11:00 PAVILION Row 21
    Prize Ceremony : Mon Dec 12:00, CSC 333


This course is aimed at undergraduate students interested in learning C++, state-of-the-art AI and graphics programming for video games. The course has five parts:

  1. C++ programming
  2. RTS game engine internals
  3. AI for video games
  4. 3D graphics primer
  5. Team Project
C++ is the language of choice for implementing commercial video game engines. We will give a concise introduction with emphasis on efficiency, safety, and the Standard Template Library (STL). In the second part we give an overview of the components of our realtime strategy (RTS) game engine ORTS, its server/client architecture, and fast collision detection. In the AI section, students will learn about efficient pathfinding algorithms, heuristic search, game theory, and scripting game AI systems in the context of RTS games. In the last lecture section we will cover OpenGL - the free software 3d graphics library.

This year, all students will work in teams of 3-4 on StarCraft Broodwar bots, augmenting our own UAlbertaBot which recently won the AIIDE StarCraft AI competition. At the end of the course, all bots will be entered in a big round-robin style tournament.

Building smarter AI systems 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++ programming, and the Tuesday lectures first to game AI and then to OpenGL. 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 new approach, 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:

Benefits: Expected time investment per week: ~8h

Course Work

There will be 3 assignments, 12 quizzes, 9 lab exercises, a project, and a final exam.


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:
≥ 95% A+   ≥ 90% A    ≥ 85% A-
≥ 80% B+   ≥ 75% B    ≥ 70% B-
≥ 65% C+   ≥ 60% C    ≥ 55% C-
≥ 50% D+   ≥ 45% D    < 45% F
subject to this important condition: if the result of the final exam is less than 40%, the final course grade can't be better than D+.


Quizzes at the beginning of 12 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 10 quizzes out of 12.

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 Thursday lecture. Missed lab exercises are worth 0 marks, but in the end we only consider the best 8 out of 9 lab exercises.


Assignments are medium-sized programming tasks. Solutions have to be handed in by 22:00 on the due dates electronically using the astep system. 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 you the marked assignments have been returned. Later inquiries will be ignored.

StarCraft Software Installation

By the IN deadline above each student needs to submit a zipped UAlbertaBot dll which prints the students name and id as welcome message.

To create the dll install StarCraft Broodwar (~$20 via BattleNet - sorry we didn't receive keys from Blizzard for the course), then install BWAPI and UAlbertaBot by following the steps described here to the iota, and finally change the UAlbertaBot code by adding

  BWAPI::Broodwar->printf("<your-name> <your-student-id>");

--- with the <...> strings replaced by your data --- at the beginning of the UAlbertaBotModule onFrame() function.

Then test whether your code works and if so, create zip file that contains UAlbertaBot.dll, send it to a lab computer using scp, and then submit it like this:

  astep -c c350 -p install1


Project groups will preferably consist of 4 students. Eeach team works on a StarCraft Broodwar bot using the UAlbertaBot code base, which supports all three StarCraft races. Each team then Our lab environment (CSC 153 and 159) uses Linux. So, for your project you need to install StarCraft Broodwar and BWAPI (free) on your personal computer. If you don't use Windows I suggest to install a virtual machine. As a student you can get Windows and Visual C++ for free.

Team Selection

Pick your team mates and send me an email (subject: [350] TS) containing your bot name, a list of team members, and your StarCraft race preference (Zerg, Terran, Protoss, or Random) by the TS deadline above. Only one email per team, please. On Dec. 8-10. we will run a round robin tournament.

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 font, pdf. You need to outline the project details such as what you think you can improve and how to show that your changes actually improve the playing strength.

Project Progress Report

Each team has to submit a project progress report to me (see PPR deadline above) (subject [350] Progress). The format is 1-page, 12pt proportional font, pdf. You need to describe your project progress (≥ 1/3 of the proposed work), obstacles you ran into, how to overcome them, possible revisions of your project goal, and a breakdown of work already done by whom.

Project Presentation

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

Project Submission

Project file is due Dec. 7, 22:00. Late submissions will not be accepted and will result in 0 marks for software functionality and report.

Submit via: astep -c c350 -p pro

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

Content 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.

At the end of the report each team member needs to describe his or her contributions to the project in fewer than 200 words, and indicate whether he or she agrees with the other team members' descriptions with a short explanation if this is not the case.

Format (n = number of team members):


  n times {
  Team member name:

    describe own contributions

    n-1 times {
      [ other team member name : AGREE ]  or
      [ other team member name : DON'T AGREE, because ... ]

In case of disagreements EACH TEAM MEMBER needs to submit the project zip file via astep as described above. If all members agree, only ONE SUBMISSION is required.

If you don't want to show your disagreement in front of your team, you can email the TA ( directly to tell him if you disagree with the stated contributions of any of your teammates.

Merging General Project Contributions

If you fixed bugs in UAlbertaBot or implemented useful generic AI components please follow these instructions.

Tournament and Video Submission

The tournament will be run on Dec. 8-10. We encourage you to make use of the learning facility (i.e., writing/reading information about past encounters to/from a file) to adjust to opponents.

On Dec. 9 we will send out replays and ask each team to compile a 1 minute highlight video (in mp4, avi, or mkv format) of their bot which will be presented during the award ceremony (being worth 1% of the course marks). Please send me a download link by Dec. 11 21:00 at the latest - subject [350-video].

Prizes will be awarded right after the final exam in CSC 333. Please attend to celebrate your accomplishments! We will also show tournament highlight videos.

Final Exam

Deferred final exam (if needed) date: Wednesday, Jan. 11, 2017, 10am to 12pm (ATH 332).

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.

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 July/15/2016