SDL Resources

This page brings all our SDL content together. Easily browse through structured courses or standalone lessons.

Complete Courses

We've created complete courses for focused learning. Explore the list below to find the right one for you.

Course One

Intro to C++ Programming
Become a software engineer with C++. Starting from the basics, we guide you step by step along the way
Progress0 of 60 Completed
Updated
View

First Lesson

No upcoming lessons available.

Get Started

Course Two

Game Development with SDL2
Learn C++ and SDL development by creating hands on, practical projects inspired by classic retro games
Progress0 of 129 Completed
Updated
View

First Lesson

No upcoming lessons available.

Get Started

Course Three

Professional C++
Comprehensive course covering advanced concepts, and how to use them on large-scale projects.
Progress0 of 128 Completed
Updated
View

First Lesson

No upcoming lessons available.

Get Started

Full Lesson List

Here's a full list of all our lessons. New content is added often and we make regular improvements and updates to existing lessons.

This Week

Content added or updated in the last 7 days

Intro to C++ Programming

Automatic Type Deduction using auto

This lesson covers how we can ask the compiler to infer what types we are using through the auto keyword

• Updated
View
Game Development with SDL2

The SDL Library and Cross-Platform Development

An introduction to the SDL library, the problem it solves, and why we're using it to learn C++

• New
View
Professional C++

Errors as Values and std::expected

Learn how to handle errors as values in C++23 using the std::expected type

• New
View
Professional C++

Removal Algorithms

An overview of the key C++ standard library algorithms for removing objects from containers. We cover remove(), remove_if(), remove_copy(), and remove_copy_if().

• Updated
View
Professional C++

Using std::erase() and std::erase_if()

A guide to the C++20 std::erase() and std::erase_if() functions, which simplify the remove-erase idiom for standard library containers

• New
View

This Month

Content added or updated in the last 30 days

Intro to C++ Programming

Setting up a C++ Development Environment

Getting our computer set up so we can create and build C++ programs. Then, creating our very first application

• Updated
View
Intro to C++ Programming

Creating Variables

Creating variables to store and update the data that describes our objects. We also introduce comments, allowing us to describe our code in plain language.

• Updated
View
Intro to C++ Programming

Numbers

An introduction to the different types of numbers in C++, and how we can do basic math operations on them.

• Updated
View
Intro to C++ Programming

Booleans - true and false values

An overview of the fundamental true or false data type, how we can create them, and how we can combine them.

• Updated
View
Intro to C++ Programming

Switch Statements

Learn an alternative way to write conditionals, which is often used when we want to take different paths based on a specific value

• Updated
View
Intro to C++ Programming

Encapsulation and Access Specifiers

A guide to encapsulation, class invariants, and controlling data access with public and private specifiers.

• Updated
View
Intro to C++ Programming

Working with Inherited Members

This lesson provides an in-depth exploration of using inherited methods and variables in C++, covering constructor calls, variable modification, and function shadowing

• Updated
View
Intro to C++ Programming

Function return Statements

Allow our functions to communicate with their caller by returning values when they complete

• Updated
View
Intro to C++ Programming

Dynamic Arrays using std::vector

Explore the fundamentals of dynamic arrays with an introduction to std::vector

• Updated
View
Intro to C++ Programming

Memory Ownership and Smart Pointers

Learn how to manage dynamic memory using unique pointers and the concept of memory ownership

• Updated
View
Intro to C++ Programming

Managing Memory Manually

Learn the techniques and pitfalls of manual memory management in C++

• Updated
View
Game Development with SDL2

Snake Movement and Navigation

Learn how to implement core snake game mechanics including movement, controls, and state management

• Updated
View
Intro to C++ Programming

Namespaces

Learn the essentials of using namespaces to organize your code and handle large projects with ease

• Updated
View
Game Development with SDL2

Introduction to SDL_Image

Learn to load, manipulate, and save various image formats using SDL_Image.

• Updated
View
Game Development with SDL2

SDL2 Timers and Callbacks

Learn how to use callbacks with SDL_AddTimer() to provide functions that are executed on time-based intervals

• Updated
View
Professional C++

Type Aliases

Learn how to use type aliases and utilities to simplify working with complex types.

• Updated
View
Professional C++

Type Deduction Using decltype and declval

Learn to use decltype and std::declval to determine the type of an expression at compile time.

• Updated
View
Professional C++

Friend Classes and Functions

An introduction to the friend keyword, which allows classes to give other objects and functions enhanced access to its members

• Updated
View
Intro to C++ Programming

Implicit Conversions and Narrowing Casts

Going into more depth on what is happening when a variable is used as a different type

• Updated
View
Intro to C++ Programming

Function Arguments and Parameters

Making our functions more useful and dynamic by providing them with additional values to use in their execution

• Updated
View
Intro to C++ Programming

Abstraction and Classes

Learn how to define, instantiate, and utilize classes, understanding how they form the backbone of object-oriented programming.

• Updated
View
Intro to C++ Programming

Constructors and Destructors

Learn about special functions we can add to our classes, control how our objects get created and destroyed.

• Updated
View
Intro to C++ Programming

Attributes

Explore the fundamentals of attributes, including [[nodiscard]], [[likely]], and [[deprecated]]

• Updated
View
Game Development with SDL2

Creating SDL2 Buttons

Learn to create interactive buttons in SDL2 and manage communication between different UI components.

• Updated
View
Game Development with SDL2

Creating Custom Events

Learn how to create and manage your own game-specific events using SDL's event system.

• Updated
View
Game Development with SDL2

Ending and Restarting Games

Implement win/loss detection and add a restart feature to complete the game loop

• Updated
View
Game Development with SDL2

Placing Flags

Implement flag placement and tracking to complete your Minesweeper project.

• Updated
View
Game Development with SDL2

Multiple Windows and Utility Windows

Learn how to manage multiple windows, and practical examples using utility windows.

• Updated
View
Game Development with SDL2

Positioning and Rendering Entities

Updating our TransformComponent and ImageComponent to support positioning and rendering

• Updated
View
Game Development with SDL2

Creating a Physics Component

Integrate basic physics simulation into entities using a dedicated component

• Updated
View
Game Development with SDL2

Creating a Collision Component

Enable entities to detect collisions using bounding boxes managed by a dedicated component.

• Updated
View
Game Development with SDL2

Collision Response

Make entities react realistically to collisions, stopping, bouncing, and interacting based on type.

• Updated
View
Game Development with SDL2

Breakout: Project Setup

Begin building a Breakout clone by integrating our level editor and engine into a new game project.

• New
View
Game Development with SDL2

Breakout: The Ball

This lesson focuses on creating the Ball class, customizing our physics engine, and launching the ball.

• New
View
Game Development with SDL2

Breakout: Walls and Collision

We'll add invisible walls around the play area and write the collision response code to make the ball bounce.

• New
View
Game Development with SDL2

Breakout: The Player Paddle

We'll build the player's paddle, hook it up to keyboard controls, and keep it from moving off-screen.

• New
View
Game Development with SDL2

Breakout: Improving Paddle Physics

We'll add detailed collision logic to the paddle, giving the player control over the ball's trajectory.

• New
View
Game Development with SDL2

Breakout: Loading Levels

Add breakable bricks to the game by loading and parsing level files saved from our level editor.

• New
View
Game Development with SDL2

Breakout: Game Progression

Implement the core gameplay loop of destroying blocks and advancing through levels using SDL events.

• New
View
Game Development with SDL2

Breakout: Final Touches

Learn to manage game states for winning, losing, and pausing, and prepare the final game for distribution.

• New
View
Professional C++

Class Templates

Learn how templates can be used to create multiple classes from a single blueprint

• Updated
View
Professional C++

Compile-Time Evaluation

Learn how to implement functionality at compile-time using constexpr and consteval

• Updated
View
Professional C++

Iterator and Range-Based Algorithms

An introduction to iterator and range-based algorithms, using examples from the standard library

• Updated
View

This Year

Content added or updated in the last 12 months

Intro to C++ Programming

Operator Overloading

This lesson introduces operator overloading, a fundamental concept to create more intuitive and readable code by customizing operators for user-defined types

• Updated
View
Intro to C++ Programming

References

This lesson demystifies references, explaining how they work, their benefits, and their role in performance and data manipulation

• Updated
View
Intro to C++ Programming

Pointers

This lesson provides a thorough introduction to pointers in C++, covering their definition, usage, and the distinction between pointers and references

• Updated
View
Intro to C++ Programming

The this Pointer

Learn about the this pointer in C++ programming, focusing on its application in identifying callers, chaining functions, and overloading operators.

• Updated
View
Game Development with SDL2

Type Objects

Learn to create flexible game entities using the Type Object pattern for data-driven design.

• Updated
View
Game Development with SDL2

Types From Data Files

Learn to load game object types and instances from external text files

• Updated
View
Professional C++

Copy Semantics and Return Value Optimization

Learn how to control exactly how our objects get copied, and take advantage of copy elision and return value optimization (RVO)

• Updated
View
Intro to C++ Programming

Inheritance

In this lesson, we explore C++ inheritance, guiding you through creating and managing class hierarchies to streamline your code

• Updated
View
Intro to C++ Programming

Enums

Learn about Enums and how they offer an efficient way to handle predefined values in your code

• Updated
View
Intro to C++ Programming

Copy Constructors and Operators

Explore advanced techniques for managing object copying and resource allocation

• Updated
View
Intro to C++ Programming

Constants and const-Correctness

Learn the intricacies of using const and how to apply it in different contexts

• Updated
View
Intro to C++ Programming

Effective Comments and Javadoc

This lesson provides an overview of effective commenting strategies, including Javadoc style commenting for automated documentation

• Updated
View
Game Development with SDL2

Installing vcpkg on Windows

An introduction to C++ package managers, and a step-by-step guide to installing vcpkg on Windows and Visual Studio.

• Updated
View
Professional C++

Shared Pointers using std::shared_ptr

An introduction to shared memory ownership using std::shared_ptr

• Updated
View
Game Development with SDL2

Level Editor Starting Point

Establish the core structure for our level editor, including window, scene, and asset management.

• New
View
Game Development with SDL2

Building the Actor Menu

This lesson focuses on creating the UI panel for Actors and adding the first concrete Actor type.

• New
View
Game Development with SDL2

Click and Drag Actors

Implement clicking and dragging actors from the menu, showing a tooltip that follows the mouse cursor.

• New
View
Game Development with SDL2

Placing Actors in the Level

Build the level container, add logic for placing actors via drag-and-drop, including visual hints.

• New
View
Game Development with SDL2

Moving, Selecting, and Deleting Actors

Add core interactions: drag actors to reposition them, click to select, and press delete to remove them.

• New
View
Game Development with SDL2

Grid-Based Placement

Convert the freeform placement to a grid-based system with snapping and single-actor cell limits

• New
View
Game Development with SDL2

Saving Your Editor Levels

Implement footer buttons and binary serialization to save and load your custom game levels to disk.

• New
View
Game Development with SDL2

Loading Saved Levels

Complete the save/load cycle by implementing level deserialization using SDL_RWops and actor factories.

• New
View
Game Development with SDL2

Implementing a Component System

Create the C++ framework for adding, retrieving, and removing components from game entities.

• Updated
View
Intro to C++ Programming

Dates, Times and Durations

Learn the basics of the chrono library and discover how to effectively manage durations, clocks, and time points

• Updated
View
Game Development with SDL2

Mouse Input Basics

Discover how to process mouse input, including position tracking and button presses

• Updated
View
Game Development with SDL2

Rectangles and SDL_Rect

Learn to create, render, and interact with basic rectangles using the SDL_Rect and SDL_Color types.

• New
View
Game Development with SDL2

Structuring SDL Programs

Discover how to organize SDL components using manager classes, inheritance, and polymorphism for cleaner code.

• Updated
View
Professional C++

Weak Pointers with std::weak_ptr

A full guide to weak pointers, using std::weak_ptr. Learn what they're for, and how we can use them with practical examples

• Updated
View
Professional C++

Move Semantics

Learn how we can improve the performance of our types using move constructors, move assignment operators and std::move()

• Updated
View
Professional C++

Value Categories (L-Values and R-Values)

A straightforward guide to l-values and r-values, aimed at helping you understand the fundamentals

• Updated
View
Intro to C++ Programming

Types and Literals

Explore how C++ programs store and manage numbers in computer memory, including integer and floating-point types, memory allocation, and overflow handling.

• Updated
View
Game Development with SDL2

Setting up SDL2 in Windows (Visual Studio)

A step-by-step tutorial on configuring SDL2, SDL_image and SDL_ttf in a Visual Studio C++ project on Windows

• Updated
View
Game Development with SDL2

Setting up SDL2 in macOS (Xcode or CMake)

This step-by-step guide shows you how to set up SDL2 in an Xcode or CMake project on macOS

• Updated
View
Game Development with SDL2

Building SDL2 from a Subdirectory (CMake)

A step-by-step guide on setting up SDL2 and useful extensions in a project that uses CMake as its build system

• Updated
View
Game Development with SDL2

Building SDL2 from Source (GCC and Make)

This guide walks you through the process of compiling SDL2, SDL_image, and SDL_ttf libraries from source

• Updated
View
Game Development with SDL2

Creating a Window

Learn how to create and customize windows, covering initialization, window management, and rendering

• Updated
View
Game Development with SDL2

SDL Surfaces and Colors

Explore SDL surfaces, the canvases for drawing, understand pixel formats, colors, and set your window's background.

• New
View
Game Development with SDL2

Detecting and Managing Errors

Discover techniques for detecting and responding to SDL runtime errors

• Updated
View
Game Development with SDL2

Implementing an Application Loop

Step-by-step guide on creating the SDL2 application and event loops for interactive games

• Updated
View
Game Development with SDL2

Double Buffering

Learn the essentials of double buffering in C++ with practical examples and SDL2 specifics to improve your graphics projects

• Updated
View
Game Development with SDL2

Understanding Screen & World Space

Learn to implement coordinate space conversions in C++ to position game objects correctly on screen.

• Updated
View
Game Development with SDL2

Discrete and Continuous Values

Learn how to handle floating point precision issues when programming game physics and transformations between coordinate spaces.

• Updated
View
Game Development with SDL2

Cameras and View Space

Create camera systems that follow characters, respond to player input, and properly frame your game scenes.

• Updated
View
Game Development with SDL2

Creating an Input Component

Implement player controls and AI actions cleanly using the Command pattern

• Updated
View
Professional C++

Smart Pointers and std::unique_ptr

An introduction to memory ownership using smart pointers and std::unique_ptr in C++

• Updated
View
Game Development with SDL2

Building with Components

Learn how composition helps build complex objects by combining smaller components

• Updated
View
Game Development with SDL2

Entity and Component Interaction

Explore component communication, dependency management, and specialized entity types within your ECS

• Updated
View
Game Development with SDL2

Creating an Image Component

Display graphics by creating an ImageComponent that loads files and renders them via SDL_image.

• Updated
View
Game Development with SDL2

Asset Management

Optimize image loading using shared pointers and an asset manager for better memory use and simpler code.

• New
View
Game Development with SDL2

Image and Entity Scaling

Add width, height, and scaling modes to our entities and images

• Updated
View
Intro to C++ Programming

Preprocessor Definitions

Explore the essential concepts of C++ preprocessing, from understanding directives to implementing macros

• Updated
View
Game Development with SDL2

Bounding Boxes

Discover bounding boxes: what they are, why we use them, and how to create them

• New
View
Game Development with SDL2

Intersections and Relevancy Tests

Optimize games by checking object intersections with functions like SDL_HasIntersection().

• New
View
Game Development with SDL2

Handling Object Collisions

Implement bounding box collision detection and response between game objects

• New
View
Professional C++

Dynamic Memory and the Free Store

Learn about dynamic memory in C++, and how to allocate objects to it using new and delete

• Updated
View
Intro to C++ Programming

Objects, Variables and Types

An introduction to the building blocks of our software - objects, and the variables that can be associated with them.

• Updated
View
Game Development with SDL2

Introduction to Functions

Learn the basics of writing and using functions in C++, including syntax, parameters, return types, and scope rules.

• Updated
View
Game Development with SDL2

Namespaces, Includes, and the Standard Library

A quick introduction to namespaces in C++, alongside the standard library and how we can access it

• Updated
View
Game Development with SDL2

Conditionals and Loops

Learn the fundamentals of controlling program flow in C++ using if statements, for loops, while loops, continue, and break

• Updated
View
Game Development with SDL2

Classes, Structs and Enums

A crash tour on how we can create custom types in C++ using classes, structs and enums

• Updated
View
Game Development with SDL2

Preprocessor Directives and the Build Process

Learn the fundamentals of the C++ build process, including the roles of the preprocessor, compiler, and linker.

• Updated
View
Game Development with SDL2

Understanding Reference and Pointer Types

Learn the fundamentals of references, pointers, and the const keyword in C++ programming.

• Updated
View
Game Development with SDL2

Operator Overloading

Discover operator overloading, allowing us to define custom behavior for operators when used with our custom types

• Updated
View
Game Development with SDL2

Run-time Polymorphism

Learn how to write flexible and extensible C++ code using polymorphism, virtual functions, and dynamic casting

• Updated
View
Game Development with SDL2

Odds and Ends: 10 Useful Techniques

A quick tour of ten useful techniques in C++, covering dates, randomness, attributes and more

• Updated
View
Game Development with SDL2

Building a 2D Vector Type

Learn the foundations of vector math to work with positions and movements, and create a custom type to apply these concepts

• Updated
View
Game Development with SDL2

Physical Motion

Create realistic object movement by applying fundamental physics concepts

• New
View
Game Development with SDL2

Force, Drag, and Friction

Learn how to implement realistic forces like gravity, friction, and drag in our physics simulations

• New
View
Game Development with SDL2

Momentum and Impulse Forces

Add explosions and jumping to your game by mastering momentum-based impulse forces

• New
View
Intro to C++ Programming

Introduction to Debugging

Creating a tiny program using numbers and booleans, then adding some breakpoints so we can step through our code in a debugger.

• Updated
View
Intro to C++ Programming

Creating and Calling Functions

An introduction to functions - reusable blocks of code that we can use to break our application into smaller pieces.

• Updated
View
Intro to C++ Programming

Scope

Learn more about how and when we can access variables, by understanding the importance of the scope in which they exist.

• Updated
View
Intro to C++ Programming

Forward Declarations

Understand what function prototypes are, and learn how we can use them to let us order our code any way we want.

• Updated
View
Intro to C++ Programming

Loops

Learn how we can use loops to iterate over a block of code, executing it as many times as needed.

• Updated
View
Intro to C++ Programming

The Modulus Operator (%)

Learn how we can use the modulus operator to get the remainder of integer division, and some common use cases.

• Updated
View
Intro to C++ Programming

Structured Binding

This lesson introduces Structured Binding, a handy tool for unpacking simple data structures

• Updated
View
Intro to C++ Programming

The #include Directive

Discover how the #include directive helps us include library features and split our project across multiple files.

• Updated
View
Intro to C++ Programming

Header Files

Explore how header files and linkers streamline C++ programming, learning to organize and link our code effectively

• Updated
View
Intro to C++ Programming

The using Keyword

This lesson introduces the using keyword in C++, focusing on namespaces, enums, and type aliasing

• Updated
View
Game Development with SDL2

Variables, Types and Operators

Learn the fundamentals of C++ programming: declaring variables, using built-in data types, and performing operations with operators

• Updated
View
Game Development with SDL2

Brightness and Gamma

Learn how to control display brightness and gamma correction using SDL's window management functions

• Updated
View
Game Development with SDL2

Scene Rendering

Create a scene management system that converts world space coordinates to screen space for 2D games.

• New
View
Professional C++

Memory Management and the Stack

Learn about stack allocation, limitations, and transitioning to the Free Store

• Updated
View
Professional C++

Algorithm Analysis and Big O Notation

An introduction to algorithms - the foundations of computer science. Learn how to design, analyze, and compare them.

• Updated
View
Game Development with SDL2

Moving Objects with Vectors

Explore how to use vectors for representing positions, directions, and implementing speed-limited movement in games.

• Updated
View
Intro to C++ Programming

The Call Stack and Debugging Functions

An introduction to how our function calls create a call stack, and how we can navigate it in a debugger.

• Updated
View
Intro to C++ Programming

Conditional Logic

Use booleans and if statements to make our functions and programs more dynamic, choosing different execution paths.

• Updated
View
Intro to C++ Programming

Function Overloading

This lesson provides an in-depth look at function overloading in C++, covering its importance, implementation, and best practices

• Updated
View
Intro to C++ Programming

Static Casting

Explore the concept of static casting in C++, including examples and best practices for converting data types at compile time

• Updated
View
Intro to C++ Programming

Virtual Functions and Overrides

This lesson provides an introduction to virtual functions and overrides, focusing on their role in enabling runtime polymorphism

• Updated
View
Intro to C++ Programming

Downcasting

Get to grips with downcasting in C++, including static and dynamic casts. This lesson provides clear explanations and practical examples for beginners

• Updated
View
Game Development with SDL2

Numeric and Binary Data

Learn how C++ represents numbers and data in memory using binary, decimal, and hexadecimal systems.

• Updated
View
Game Development with SDL2

Exponents and cmath

Understand the math foundations needed for game programming in C++, including power and root functions.

• Updated
View
Game Development with SDL2

Spaces, Vectors and Coordinates

Learn the fundamentals of coordinate systems and vectors to create spatial representations

• Updated
View
Game Development with SDL2

Angles and Distance

Learn key geometry concepts like angles, triangles, and vectors to implement distance calculations.

• Updated
View
Professional C++

Using std::terminate() and the noexcept Specifier

This lesson explores the std::terminate() function and noexcept specifier, with particular focus on their interactions with move semantics.

• Updated
View
Game Development with SDL2

Snake Game Core Components

Introducing the foundational components for our game and setting up the project

• New
View
Game Development with SDL2

Building the Snake Grid

Build the foundational grid structure that will power our Snake game's movement and collision systems.

• New
View
Game Development with SDL2

Snake Growth

Allowing our snake to eat apples, and grow longer each time it does

• New
View
Game Development with SDL2

Pausing and Restarting

Giving our Snake game the ability to pause itself, and adding a clickable button for restarting the game

• New
View
Game Development with SDL2

Win/Loss Logic for Snake

Add game-ending logic to our Snake game with custom events, state management, and visual cues for player feedback.

• New
View
Game Development with SDL2

Building the Score Display

Build a dynamic score counter that tracks the player's progress and displays it with custom graphics and text.

• New
View
Game Development with SDL2

Animating Snake Movement

Learn to animate the snake's movement across cells for a smooth, dynamic visual effect.

• New
View
Game Development with SDL2

Customising Mouse Cursors

Learn how to control cursor visibility, switch between default system cursors, and create custom cursors

• New
View
Game Development with SDL2

Parsing Data using std::string

Learn how to read, parse, and use config files in your game using std::string and SDL_RWops

• New
View
Game Development with SDL2

Writing Data to Files

Learn to write and append data to files using SDL2's I/O functions.

• Updated
View
Game Development with SDL2

Read/Write Offsets and Seeking

Learn how to manipulate the read/write offset of an SDL_RWops object to control stream interactions.

• New
View
Game Development with SDL2

Mouse Capture and Global Mouse State

Learn how to track mouse movements and button states across your entire application, even when the mouse leaves your window.

• Updated
View
Game Development with SDL2

Working with Data

Learn techniques for managing game data, including save systems, configuration, and networked multiplayer.

• New
View
Game Development with SDL2

Byte Order and Endianness

Learn how to handle byte order in using SDL's endianness functions

• New
View
Game Development with SDL2

Padding and Alignment

Learn how memory alignment affects data serialization and how to handle it safely

• New
View
Game Development with SDL2

Fullscreen Windows

Learn how to create and manage fullscreen windows in SDL, including desktop and exclusive fullscreen modes.

• New
View
Game Development with SDL2

Display Modes

Learn how to manage screen resolutions and refresh rates in SDL games using display modes.

• New
View
Game Development with SDL2

Pixel Density and High-DPI Displays

Learn how to create SDL applications that look great on modern displays across different platforms

• New
View
Game Development with SDL2

Window Decorations and Borders

An introduction to managing SDL2 window decorations, borders, and client areas.

• Updated
View
Game Development with SDL2

Window Titles

Learn how to set, get, and update window titles dynamically

• Updated
View
Game Development with SDL2

Window Opacity

Discover how to use SDL2 functions for controlling and retrieving window transparency settings.

• Updated
View
Game Development with SDL2

Video Displays

Learn how to handle multiple monitors in SDL, including creating windows on specific displays.

• New
View
Game Development with SDL2

Window Configuration

Explore window creation, configuration, and event handling using SDL's windowing system

• Updated
View
Game Development with SDL2

Window Events and Window IDs

Discover how to monitor and respond to window state changes in SDL applications

• Updated
View
Game Development with SDL2

Managing Window Position

Learn how to control and monitor the position of SDL windows on screen

• Updated
View
Game Development with SDL2

Window Sizing

Learn how to resize, constrain, and manage SDL2 windows

• Updated
View
Game Development with SDL2

Window Visibility

Learn how to control the visibility of SDL2 windows, including showing, hiding, minimizing, and more

• Updated
View
Game Development with SDL2

Mouse Input Constraints

Implement mouse constraints in SDL2 to control cursor movement using window grabs and rectangular bounds

• Updated
View
Game Development with SDL2

Relative Mouse Mode

Learn how to restrict cursor movement to a window whilst capturing mouse motion continuously.

• Updated
View
Game Development with SDL2

Handling Keyboard Input

Learn how to detect and respond to keyboard input events in your SDL-based applications. This lesson covers key events, key codes, and modifier keys.

• Updated
View
Game Development with SDL2

Managing Window Input Focus

Learn how to manage and control window input focus in SDL applications, including how to create, detect, and manipulate window focus states.

• Updated
View
Game Development with SDL2

Understanding Keyboard State

Learn how to detect and handle keyboard input in SDL2 using both event-driven and polling methods. This lesson covers obtaining and interpreting the keyboard state array.

• Updated
View
Game Development with SDL2

Handling Mouse Scrolling

Learn how to detect and handle mouse scroll wheel events in SDL2, including vertical and horizontal scrolling, as well as scroll wheel button events.

• Updated
View
Game Development with SDL2

Managing Mouse Focus with SDL2

Learn how to track and respond to mouse focus events in SDL2, including handling multiple windows and customizing focus-related click behavior.

• Updated
View
Game Development with SDL2

Mouse State

Learn how to monitor mouse position and button states in real-time using SDL's state query functions

• Updated
View
Game Development with SDL2

Delegates and the Observer Pattern

An overview of the options we have for building flexible notification systems between game components

• New
View
Professional C++

Pointers to Members

Learn how to create pointers to class functions and data members, and how to use them

• New
View
Professional C++

Function Binding and Partial Application

This lesson covers function binding and partial application using std::bind(), std::bind_front(), std::bind_back() and std::placeholders.

• Updated
View
Professional C++

Fold Expression

An introduction to C++17 fold expressions, which allow us to work more efficiently with parameter packs

• Updated
View
Intro to C++ Programming

Fizz Buzz

Put everything we've learned in this chapter to the test by creating a C++ version of the Fizz Buzz game.

• Updated
View
Game Development with SDL2

Tick Rate and Time Deltas

Learn how to create smooth, time-aware game loops that behave consistently across different hardware configurations

• New
View
Game Development with SDL2

High-Resolution Timers

Learn to measure time intervals with high accuracy in your games

• New
View
Game Development with SDL2

Callbacks and Function Pointers

Learn to create flexible and modular code with function pointers

• New
View
Game Development with SDL2

Member Function Pointers and Binding

Explore advanced techniques for working with class member functions

• New
View
Game Development with SDL2

Ticking

Using Tick() functions to update game objects independently of events

• New
View
Game Development with SDL2

Reading Data from Files

Learn how to read and parse game data stored in external files using SDL_RWops

• New
View
Game Development with SDL2

Engine Overview

An introduction to the generic engine classes we'll use to create the game

• Updated
View
Intro to C++ Programming

Dangling Pointers and References

Learn about an important consideration when returning pointers and references from functions

• Updated
View
Game Development with SDL2

Loading and Displaying Images

Learn how to load, display, and optimize image rendering in your applications

• Updated
View
Game Development with SDL2

Cropping and Positioning Images

Learn to precisely control image display using source and destination rectangles.

• Updated
View
Game Development with SDL2

Image Scaling and Aspect Ratios

Learn techniques for scaling images and working with aspect ratios

• Updated
View
Game Development with SDL2

Rendering Text with SDL_ttf

Learn to render and manipulate text in SDL2 applications using the official SDL_ttf extension

• Updated
View
Game Development with SDL2

Text Performance, Fitting and Wrapping

Explore advanced techniques for optimizing and controlling text rendering when using SDL_ttf

• Updated
View
Game Development with SDL2

Creating the Grid

Building a two-dimensional grid of interactive minesweeper cells

• New
View
Game Development with SDL2

Adding Bombs to the Grid

Updating the game to to place bombs randomly in the grid and render them when cells are cleared.

• New
View
Game Development with SDL2

Adjacent Cells and Bomb Counting

Implement the techniques for detecting nearby bombs and clearing empty cells automatically.

• New
View
Intro to C++ Programming

User Input in the Terminal

This lesson introduces the fundamentals of capturing user input, using std::cin and std::getline()

• Updated
View
Professional C++

Output Streams

A detailed overview of C++ Output Streams, from basics and key functions to error handling and custom types.

• Updated
View
Professional C++

String Streams

A detailed guide to C++ String Streams using std::stringstream. Covers basic use cases, stream position seeking, and open modes.

• Updated
View
Professional C++

Input Streams

A detailed introduction to C++ Input Streams using std::cin and std::istringstream. Starting from the basics and progressing up to advanced use cases including creating collections of custom objects from our streams.

• Updated
View
Professional C++

Regular Expressions

An introduction to regular expressions, and how to use them in C++ with std::regex, std::regex_match, and std::regex_search

• Updated
View
Professional C++

Regex Capture Groups

An introduction to regular expression capture groups, and how to use them in C++ with regex_search, regex_replace, regex_iterator, and regex_token_iterator

• Updated
View
Professional C++

String Views

A practical introduction to string views, and why they should be the main way we pass strings to functions

• Updated
View
Professional C++

Working with String Views

An in-depth guide to std::string_view, including their methods, operators, and how to use them with standard library algorithms

• Updated
View

Older

Content added or updated in previous years

Professional C++

Characters, Unicode and Encoding

An introduction to C++ character types, the Unicode standard, character encoding, and C-style strings

• Updated
View
Professional C++

Working with C-Style Strings

A guide to working with and manipulating C-style strings, using the <cstring> library

• Updated
View
Professional C++

A Deeper Look at the std::string Class

A detailed guide to std::string, covering the most essential methods and operators

• Updated
View
Professional C++

Manipulating std::string Objects

A practical guide covering the most useful methods and operators for working with std::string objects and their memory

• Updated
View
Professional C++

Templates and Header Files

Learn how to separate class templates into declarations and definitions while avoiding common linker errors

• Updated
View
Professional C++

Run Time Type Information (RTTI) and typeid()

Learn to identify and react to object types at runtime using RTTI, dynamic casting and the typeid() operator

• Updated
View
Professional C++

The Spaceship Operator and Expression Rewriting

A guide to simplifying our comparison operators using C++20 features

• Updated
View
Professional C++

C++20 Modules

A detailed overview of C++20 modules - the modern alternative to #include directives. We cover import and export statements, partitions, submodules, how to integrate modules with legacy code, and more.

• Updated
View
Professional C++

List, Aggregate, and Designated Initialization

A quick guide to creating objects using lists, including std::initializer_list, aggregate and designated initialization

• Updated
View
Professional C++

User Defined Conversions

Learn how to add conversion functions to our classes, so our custom objects can be converted to other types.

• Updated
View
Professional C++

User Defined Literals

A practical guide to user-defined literals in C++, which allow us to write more descriptive and expressive values

• Updated
View
Professional C++

Mutable Class Members

An introduction to the mutable keyword, which gives us more flexibility when working with const objects.

• Updated
View
Professional C++

Multiple Inheritance and Virtual Base Classes

A guide to multiple inheritance in C++, including its common problems and how to solve them

• Updated
View
Professional C++

Pure Virtual Functions

Learn how to create interfaces and abstract classes using pure virtual functions

• Updated
View
Professional C++

Internal and External Linkage

A deeper look at the C++ linker and how it interacts with our variables and functions. We also cover how we can change those interactions, using the extern and inline keywords

• Updated
View
Professional C++

Static Class Variables and Functions

A guide to sharing values between objects using static class variables and functions

• Updated
View
Professional C++

Comparison Algorithms

An introduction to the eight main comparison algorithms in the C++ Standard Library

• Updated
View
Professional C++

The Reduce and Accumulate Algorithms

A detailed guide to generating a single object from collections using the std::reduce() and std::accumulate() algorithms

• Updated
View
Professional C++

C++23 Fold Algorithms

An introduction to the 6 new folding algorithms added in C++23, providing alternatives to std::reduce and std::accumulate

• Updated
View
Professional C++

Working with the File System

Create, delete, move, and navigate through directories and files using the std::filesystem library.

• Updated
View
Professional C++

File System Paths

A guide to effectively working with file system paths, using the std::filesystem::path type.

• Updated
View
Professional C++

Directory Iterators

An introduction to iterating through the file system, using directory_iterator and recursive_directory_iterator.

• Updated
View
Professional C++

File Streams

A detailed guide to reading and writing files in C++ using the standard library's fstream type

• Updated
View
Professional C++

Replacement Algorithms

An overview of the key C++ standard library algorithms for replacing objects in our containers. We cover replace(), replace_if(), replace_copy(), and replace_copy_if().

• Updated
View
Professional C++

Partition Algorithms

An introduction to partitions, and the C++ standard library algorithms that create them

• Updated
View
Professional C++

Set Algorithms

An introduction to set algorithms, and how to implement them using the C++ standard library

• Updated
View
Professional C++

Minimum and Maximum Algorithms

An introduction to the seven minimum and maximum algorithms in the C++ standard library: clamp(), min(), min_element(), max(), max_element(), minmax(), and minmax_element().

• Updated
View
Professional C++

Movement Algorithms

An introduction to the seven movement algorithms in the C++ standard library: move(), move_backward(), rotate(), reverse(), shuffle(), shift_left(), and shift_right().

• Updated
View
Professional C++

Copying Algorithms

An introduction to the 7 copying algorithms in the C++ standard library: copy(), copy_n(), copy_if(), copy_backward(), reverse_copy(), rotate_copy(), and unique_copy().

• Updated
View
Professional C++

Search Algorithms

An introduction to the 8 main searching algorithms in the C++ standard library, including find(), find_if(), find_if_not(), find_first_of(), adjacent_find(), search_n(), search(), and find_end().

• Updated
View
Professional C++

Binary Search in C++

An introduction to the advantages of binary search, and how to use it with the C++ standard library algorithms binary_search(), lower_bound(), upper_bound(), and equal_range()

• Updated
View
Professional C++

Counting Algorithms

An introduction to the 5 main counting algorithms in the C++ standard library: count(), count_if(), any_of(), none_of(), and all_of()

• Updated
View
Professional C++

Standard Library Views

Learn how to create and use views in C++ using examples from std::views

• Updated
View
Professional C++

Creating Views using std::ranges::subrange

This lesson introduces std::ranges::subrange, allowing us to create non-owning ranges that view some underlying container

• Updated
View
Professional C++

8 Key Standard Library Algorithms

An introduction to 8 more useful algorithms from the standard library, and how we can use them alongside views, projections, and other techniques

• Updated
View
Professional C++

Parallel Algorithm Execution

Multithreading in C++ standard library algorithms using execution policies

• Updated
View
Professional C++

Creating Custom Iterators using C++20 Concepts

A detailed guide to implementing a custom iterator type from scratch, using modern recommended techniques

• Updated
View
Professional C++

Projection Functions

Learn how to use projection functions to apply range-based algorithms on derived data

• Updated
View
Professional C++

Iterators and Ranges

This lesson offers an in-depth look at iterators and ranges, emphasizing their roles in container traversal

• Updated
View
Professional C++

Implementing Ranges for Custom Types

Learn to implement iterators in custom types, and make them compatible with range-based techniques.

• Updated
View
Professional C++

Defining Ranges using Sentinels

An alternative way of defining ranges, and why we sometimes need to use them

• Updated
View
Professional C++

Variadic Functions

An introduction to variadic functions, which allow us to pass a variable quantity of arguments

• Updated
View
Professional C++

Perfect Forwarding and std::forward

An introduction to problems that can arise when our functions forward their parameters to other functions, and how we can solve those problems with std::forward

• Updated
View
Professional C++

Trailing Return Types

An alternative syntax for defining function templates, which allows the return type to be based on their parameter types

• Updated
View
Professional C++

Recursion and Memoization

An introduction to recursive functions, their use cases, and how to optimize their performance

• Updated
View
Professional C++

Lambdas

An introduction to lambda expressions - a concise way of defining simple, ad-hoc functions

• Updated
View
Professional C++

Standard Library Function Helpers

A comprehensive overview of function helpers in the standard library, including std::invocable, std::predicate and std::function.

• Updated
View
Professional C++

First Class Functions

Learn about first-class functions in C++: a feature that lets you store functions in variables, pass them to other functions, and return them, opening up new design possibilities

• Updated
View
Professional C++

Function Pointers

Learn about function pointers: what they are, how to declare them, and their use in making our code more flexible

• Updated
View
Professional C++

Function Objects (Functors)

This lesson introduces function objects, or functors. This concept allows us to create objects that can be used as functions, including state management and parameter handling.

• Updated
View
Professional C++

Hashing and std::hash

This lesson provides an in-depth look at hashing in C++, including std::hash, collision strategies, and usage in hash-based containers.

• Updated
View
Professional C++

Hash Sets using std::unordered_set

This lesson provides a thorough understanding of std::unordered_set, from basic initialization to handling custom types and collisions

• Updated
View
Professional C++

Using std::pair

Master the use of std::pair with this comprehensive guide, encompassing everything from simple pair manipulation to template-based applications

• Updated
View
Professional C++

Hash Maps using std::unordered_map

Creating hash maps using the standard library's std::unordered_map container

• Updated
View
Professional C++

Iterators

This lesson provides an in-depth look at iterators in C++, covering different types like forward, bidirectional, and random access iterators, and their practical uses.

• Updated
View
Professional C++

Linked Lists using std::forward_list

This lesson provides an in-depth exploration of std::forward_list, covering creation, management, and advanced list operations

• Updated
View
Professional C++

Multidimensional Arrays and std::mdspan

A guide to std::mdspan, allowing us to interact with arrays as if they have multiple dimensions

• Updated
View
Professional C++

Data Structures and Algorithms

This lesson introduces the concept of data structures beyond arrays, and why we may want to use alternatives.

• Updated
View
Professional C++

Static Arrays using std::array

An introduction to static arrays using std::array - an object that can store a collection of other objects

• Updated
View
Professional C++

C-Style Arrays

A detailed guide to working with classic C-style arrays within C++, and why we should avoid them where possible

• Updated
View
Professional C++

Array Spans and std::span

A detailed guide to creating a "view" of an array using std::span, and why we would want to

• Updated
View
Professional C++

Storing and Rethrowing Exceptions

This lesson offers a comprehensive guide to storing and rethrowing exceptions

• Updated
View
Professional C++

Nested Exceptions

Learn about nested exceptions in C++: from basic concepts to advanced handling techniques

• Updated
View
Professional C++

Function Try Blocks

Learn about Function Try Blocks, and their importance in managing exceptions in constructors

• Updated
View
Professional C++

Errors and Assertions

Learn how we can ensure that our application is in a valid state using compile-time and run-time assertions.

• Updated
View
Professional C++

Exceptions: throw, try and catch

This lesson provides an introduction to exceptions, detailing the use of throw, try, and catch.

• Updated
View
Professional C++

Exception Types

Gain a thorough understanding of exception types, including how to throw and catch both standard library and custom exceptions in your code

• Updated
View
Professional C++

Double-Ended Queues using std::deque

A guide to double-ended queues - a structure that behaves like a vector, specialised for manipulating objects at the edges of the collection

• Updated
View
Professional C++

Using JSON in Modern C++

A practical guide to working with the JSON data format in C++ using the popular nlohmann::json library.

• Updated
View
Professional C++

Using HTTP in Modern C++

A detailed and practical tutorial for working with HTTP in modern C++ using the cpr library.

• Updated
View
Professional C++

Binary Serialization using Cereal

A detailed and practical tutorial for binary serialization in modern C++ using the cereal library.

• Updated
View
Professional C++

Priority Queues using std::priority_queue

Learn how to access objects based on their importance, and how to customise how that priority is determined

• Updated
View
Professional C++

Introduction to Stacks using std::stack

An introduction to the stack data structure, and the standard library implementation - std::stack

• Updated
View
Professional C++

Tuples and std::tuple

A guide to tuples and the std::tuple container, allowing us to store objects of different types.

• Updated
View
Professional C++

Introduction to Queues and std::queue

Learn the fundamentals and applications of queues with the std::queue container.

• Updated
View
Professional C++

Nullable Values, std::optional and Monadic Operations

A comprehensive guide to using std::optional to represent values that may or may not be present.

• Updated
View
Professional C++

Constrained Dynamic Types using Unions and std::variant

Learn how to store dynamic data types in C++ using unions and the type-safe std::variant

• Updated
View
Professional C++

Unconstrained Dynamic Types using Void Pointers and std::any

Learn how to use void pointers and std::any to implement unconstrained dynamic types, and understand when they should be used

• Updated
View
Professional C++

Type Traits: Compile-Time Type Analysis

Learn how to use type traits to perform compile-time type analysis, enable conditional compilation, and enforce type requirements in templates.

• Updated
View
Professional C++

Concepts in C++20

Learn how to use C++20 concepts to constrain template parameters, improve error messages, and enhance code readability.

• Updated
View
Professional C++

Creating Custom Concepts

Learn how to create your own C++20 concepts to define precise requirements for types, using boolean expressions and requires statements.

• New
View
Professional C++

Using Concepts with Classes

Learn how to use concepts to express constraints on classes, ensuring they have particular members, methods, and operators.

• New
View
Professional C++

Understanding Overload Resolution

Learn how the compiler decides which function to call based on the arguments we provide.

• New
View
Professional C++

Using SFINAE to Control Overload Resolution

Learn how SFINAE allows templates to remove themselves from overload resolution based on their arguments, and apply it in practical examples.

• New
View
Professional C++

Member Function Templates

Learn how to create and use member function templates in classes and structs, including syntax, instantiation, and advanced techniques

• New
View
Professional C++

Template Specialization

A practical guide to template specialization in C++ covering full and partial specialization, and the scenarios where they're useful

• Updated
View
Professional C++

Variable Templates

An introduction to variable templates, allowing us to create variables at compile time.

• Updated
View
Professional C++

Function Templates

Understand the fundamentals of C++ function templates and harness generics for more modular, adaptable code.

• Updated
View
Intro to C++ Programming

Overloading the << Operator

Learn how to overload the << operator, so our custom types can stream information directly to the console using std::cout

• Updated
View
Intro to C++ Programming

System Calls and Terminal Management

This lesson introduces system calls, and how to use them to clear the terminal

• New
View
Intro to C++ Programming

Bitwise Operators and Bit Flags

Unravel the fundamentals of bitwise operators and bit flags in this practical lesson

• Updated
View
Intro to C++ Programming

Random Number Generation

This lesson covers the basics of using randomness, with practical applications

• Updated
View
Intro to C++ Programming

String Interpolation

A detailed guide to string formatting using C++20's std::format(), and C++23's std::print()

• Updated
View
Intro to C++ Programming

Style Guides and Automatic Code Formatting

This lesson introduces the concept of Style Guides and ClangFormat, focusing on how to achieve consistency in our code

• Updated
View
Intro to C++ Programming

Static Analysis

An introduction to static analysis tools, and how they can help beginners learn faster and improve code quality

• Updated
View
Intro to C++ Programming

Protected Class Members

Learn about protected class members in C++, including how and when to use them in your code, especially in the context of inheritance and class design

• Updated
View
Intro to C++ Programming

Member Initializer Lists

This lesson introduces Member Initializer Lists, focusing on their advantages for performance and readability, and how to use them effectively

• Updated
View
Intro to C++ Programming

Structs and Aggregate Initialization

Discover the role of structs, how they differ from classes, and how to initialize them without requiring a constructor.

• Updated
View