
In this video (objectives)…
We welcome you to this section and talk briefly about how to get the most of out the first concepts.
In this video (objectives)…
We need to download and install Visual Studio Code so we can make C++ projects!
We need to download raylib so we can make awesome raylib games
We need to download the project files from Gitlab so everything works
In this video (objectives)…
We follow the install process for Visual Studio Code and Raylib on a Mac using Homebrew.
In this video (objectives)…
How to setup your Linux machine to take the course.
In this video (objectives)…
Understand the main function and other aspects of using functions in C++ programming.
In this video (objectives)…
Include the cstdio library header and use the printf function to print text to VS Code's terminal.
In this video (objectives)…
Learn the role of the compiler and how it ignores white space and comments
In this video (objectives)…
Lucy invites you to join us in our various community support forums in order to ask questions, connect with other students and share your progress.
In this video (objectives)…
Any time we change our project during a lecture we will commit that change to a public source control repository for students to access. In this video we show you how to access that content.
In this video (objectives)…
Use raylib function InitWindow to create and initialize a popup window.
In this video (objectives)…
Create a new variable of the integer data type and initialize it with a value.
In this video (objectives)…
The student learns about floating point data types as well as the bool, and creates and initializes these in the program.
In this video (objectives)…
The student places a breakpoint and observes the values of variables, learning about uninitialized variables and garbage data.
In this video (objectives)…
The student uses each of the basic comparison operators to compare the values 4 and 9 and sees those values in local variables by using a breakpoint in debug mode.
In this video (objectives)…
A while loop is used to keep the raylib popup window open.
In this video (objectives)…
ClearBackground is used to clear the background of a raylib window to a specific color.
In this video (objectives)…
The WindowShouldClose function is used in the while loop condition to detect when X or ESCAPE has been pressed and close the window.
In this video (objectives)…
Use the DrawCircle function in raylib and check to see if a key is pressed with if statements
In this video (objectives)…
Students use the IsKeyDown raylib function to see if A and D keys are pressed, moving the circle left and right in the raylib window.
In this video (objectives)…
Use the logical AND operator to create left and right boundaries in the window for the moving circle.
In this video (objectives)…
Draw a rectangle to the screen and make it move down along the Y-axis.
In this video (objectives)…
Use the logical OR operator to make the raylib rectangle reverse its direction once it reaches the edge of the window.
In this video (objectives)…
We discuss 2D box collision detection and plan the variables for the edges of collision boxes
In this video (objectives)…
The else statement is added to create a Game Over screen that displays when a boolean is false
In this video (objectives)…
We update the collision edges and perform collision detection each frame to finish the Axe Game, adding a "Game Over" state
In this video (objectives)…
The student sets up the runner project and creates a workspace with 2D assets.
In this video (objectives)…
The dasher.cpp file is set up to draw a raylib window, and the program is now const correct. The negation operator is now used in the while loop condition.
In this video (objectives)…
The student learns about velocity and implements jumping without gravity.
In this video (objectives)…
Gravity is applied and the student is challenged to implement ground detection.
In this video (objectives)…
Theory about sprite sheets and how to use them, as well as drawing from sprite sheets by designating a rectangle.
In this video (objectives)…
The student learns about sprites and sprite sheets and sets up raylib's Texture2D, Rectangle, and Vector2 types for the DrawTextureRec function.
In this video (objectives)…
DrawTextureRec is called to draw a section from the sprite sheet, using Texture2D, Rectangle, and Vector2 input parameters.
In this video (objectives)…
GetFrameTime is used to get the time between frames. Velocity is scaled by the delta time to keep movement frame rate independent.
In this video (objectives)…
Scarfy is animated by selecting different frames from the sprite sheet, incorporating delta time to make animation updates frame rate independent.
In this video (objectives)…
Using LoadTexture to load a hazard texture from an 8x8 sprite sheet.
In this video (objectives)…
Variables are created for the nebula hazard and braced initialization is used to initialize them using an initializer list.
In this video (objectives)…
The student creates animation variables to animate the nebula sprite.
In this video (objectives)…
The student creates a second nebula hazard and demonstrates how copying code is tedious and requires a better solution.
In this video (objectives)…
A struct called AnimData is created to store values for each sprite.
In this video (objectives)…
New AnimData structs are created and initialized in different ways.
In this video (objectives)…
The AnimData struct variables are used to replace the old variables created for each sprite.
In this video (objectives)…
Arrays are introduced and the student creates an array for the window dimensions.
In this video (objectives)…
The hazards are now stored in an array and accessed with the array index operator.
In this video (objectives)…
A for loop is created and used to initialize variables in the nebulae array and eliminate copied code.
In this video (objectives)…
For loops are used to update each AnimData.
In this video (objectives)…
For loops are used to automatically generate and update nebulae when the array size is changed.
In this video (objectives)…
Theory on creating functions with and without return and input parameters.
In this video (objectives)…
Code for the ground check is refactored into a function returning a Boolean value.
In this video (objectives)…
Animation updating is refactored and reused for both scarfy and the nebulae.
In this video (objectives)…
DrawTextureEx is used to draw textures with extra parameters including a scale parameter.
In this video (objectives)…
The background is duplicated to give the illusion of an infinite scrolling background
In this video (objectives)…
Multiple backgrounds are drawn and scrolled at different speeds to create a parallax effect.
In this video (objectives)…
A finish line variable is added to the program to create a win condition
In this video (objectives)…
A range-based for loop is used to check collision with scarfy against each nebula in the nebulae array.
In this video (objectives)…
An if/else if/else statement is used to create win and lose conditions, and to draw the textures when neither winning nor losing has occurred yet.
In this video (objectives)…
New 2D assets are chosen by the student and a map is created using the free map creator Tiled.
In this video (objectives)…
A new project is started, and a raylib window is opened with the new map drawn to the screen.
In this video (objectives)…
Vector mathematics are discussed, along with raymath, raylib's math library.
In this video (objectives)…
A direction vector is updated with key presses, and the map is moved in the opposite direction with the use of vector operations from raymath.
In this video (objectives)…
DrawTexturePro is used to draw from a sprite sheet with extra parameters such as scaling. Literals are designated to be floats with the f suffix, and other values are converted to floats with C style casts.
In this video (objectives)…
A variable is used to flip the sprite sheet based on movement, and the character is animated and can switch between sprite sheets based on moving/idle status.
In this video (objectives)…
Classes are described and a new class, Character, is created with a public and a private section.
In this video (objectives)…
Members are added to the Character class, as well as a getter for the world position and a setter for the screen position.
In this video (objectives)…
Several types of scope are discussed including statement, function, class, and global scope.
In this video (objectives)…
The Character class creates a setWorldPos function as well as a Tick function that takes deltaTime.
In this video (objectives)…
An instance of the Character class is created and its tick function is called in the while loop.
In this video (objectives)…
The Character class is moved into its own header and source file, and a constructor is added to it.
In this video (objectives)…
The bounds of the map are checked and the Character gets a new function for undoing movement in the event of a bounds hit.
In this video (objectives)…
Two integer inputs are added to the Character constructor, and screenPos is calculated in the constructor. The C-style cast is now replaced with a call to static_cast, a more safe version of type casting.
In this video (objectives)…
The Prop class is created, then input parameters are added to the constructor and used to initialize texture and worldPos members.
In this video (objectives)…
A Prop instance is created and rendered with a new Render function.
In this video (objectives)…
An array is created for props, and functions for returning collision rectangles are created to check for prop collision with the character.
In this video (objectives)…
The Enemy class is created, using code from the Character class.
In this video (objectives)…
A BaseCharacter class is created, and Character and Enemy are now set to inherit from that base class.
In this video (objectives)…
Members and methods common to Enemy and Character are moved into BaseCharacter.
In this video (objectives)…
The tick function is overridden in both the Character and the Enemy classes.
In this video (objectives)…
A pointer to type Character is added to the Enemy class and set in the main function.
In this video (objectives)…
We use the knight's worldPos vector to set the correct value of the enemy's screenPos vector each frame.
In this video (objectives)…
The Enemy get direction vector to the Character and moves toward it each frame at its own speed.
In this video (objectives)…
The sprite sheet for idle and run animations is now selected in BaseCharacter, as well as setting the leftRight float value.
In this video (objectives)…
The sword is drawn to the screen and the player can now click to swing it.
In this video (objectives)…
Attack mechanics are implemented, and now the Character can attack and destroy the Enemy.
In this video (objectives)…
The Character now has a health variable, and the Enemy has damage, causing damage to the Character when overlapping.
In this video (objectives)…
The Character's health is displayed to the screen using the std::string type and string manipulation functions.
In this video (objectives)…
Multiple enemies are created and their addresses are stored in an array. Operations are performed on each element in the array.
Learning to program can be dull, and learning C++ is hard enough without having to learn a game engine as well.
In this course we teach you coding the fun way, by making games! And we'll be using a library so you can focus on learning pure C++ and good programming practice.
You'll start by compiling your first program in C++, using Visual Studio Code as your text editor.
Then create your first axe dodging game using the Raylib library. This project introduces the basic concepts of programming: variables, loops and if-statements.
You expand on this in Dapper Dasher, by building a side-scrolling running game. In addition to covering essential programming concepts such as structs and functions, you'll learn to animate 2D characters and make your game pretty.
In Classy Clash we introduce Object Oriented Programming. You'll learn how this simplifies programming for games and how inheritance can avoid code duplication.
Whether you're a total beginner to programming and want to learn pure C++, or an intermediate Unreal student who wants to explore making games in pure C++, this is the course for you!
There are no course prerequisites, though it'll help if you're comfortable installing new software and excited to learn programming!
All students have access to the Q&A forums where our Instructors, Teaching Assistants and Community are ready to help answer your questions and cheer on your success.