This course includes

  • 10 hours of on-demand video

  • Downloadable resources and exercises

  • Full lifetime access

  • Access on mobile and desktop

  • 14-day money back guarantee

  • Secure checkout through PayPal

Watch Intro Video

Motivations & Learning Outcomes


Before taking this course, you must have:

  • A basic understanding of programming fundamentals, such as variables, conditionals, loops, and functions.

  • An idea of what a C-style programming language looks like (for example: C++, Java, C#, JavaScript, or Swift).

  • Some experience with either Linux, Windows, or MacOS.

Is this course for you?

If you know already the basics of programming and always wanted to understand how game engines work under the hood, then this course is for you! We will use C++, SDL, and Lua, using GCC and Make to create our project. To make the most out of this course you should have a basic understanding of how to code and some knowledge of what object-oriented programming is.
Buy $12.99
Is this course for you?

What you'll learn

Course overview and structure

This course will expose you to the fundamental ideas behind game engines. You will use C++ and SDL to create a basic game engine that uses Entity-Component methodology to load objects, maps, input, and rendering. You will also learn how to embed Lua scripting to C++ applications, allowing levels to be designed separately from your core C++ application.
Buy $12.99
What you'll learn
  • Lifetime access

    Join our community and get lifetime access to the course content

  • Access to discussion forum

    Discuss course topics and engage with other students using the discussion board

  • Money back guarantee

    We offer a 14-day money back guarantee for all our courses. No questions asked.


by Nahuel Cirocco


by Nahuel Cirocco

I've been looking for a good 2D game tutorial in C++ and SDL for a while now, and I have to say that I am addicted to Gustavo's courses. His way to explain is super clear and I feel like I'm really learning, not just copying code. I like the approach of starting from scratch to be able to grasp all the basic concepts that engines like Unity hide. Highly recommended!
by Maikel Van Musteren


by Maikel Van Musteren

I am reviewing this course as a Software Engineer that studied game technology/tooling as a major. I was interested in the Lua integration and it did not disappoint. The result is a working engine that is actually quite extendable and modular, that can easily be build upon. Currently I am heavily extending/modding the engine to suit my needs more. Also I have embedded the engine in QT to create a toolset/game editor. This works flawlessly. I can really recommend this course If you want a good starting point on the subject from which you can go your own direction afterwards.
by Simone Zambonardi


by Simone Zambonardi

Finally the course I was looking for! For a long time I wanted to create a small graphics engine (for educational reasons) in this way. I'm also learning C ++ (which I studied for a short time) some concepts are a bit complex for me but listening to the lesson and documenting them I understood them. The teacher is really good at explaining and available for any clarification. I hope for more courses. :)
by Mark Ud


by Mark Ud

Amazing course. If you want to build games, its must have for you. It will be challenging but it's worth it if you want to know how games are working.
by Sam Gooday


by Sam Gooday

As someone who dabbles in programming, I found it very easy to follow. Gustavo presents the material in a friendly and thoughtful way and explains concepts such as creating an Entity-Component System and integrating with Lua in accessible terms. I would highly recommend this course to anyone who wishes to gain the experience and confidence needed to write their own simple 2D engine. Thank you for making this, five stars!
by Claude Müller


by Claude Müller

Excellent course! :)
by Darrell Waldron


by Darrell Waldron

I had some issues with the setup early on and the teacher was very responsive and the issue was corrected. The instructions and explanations are clear. I typed in the code with him, as he was explaining each lesson. It was a bit of a challenge getting some of my syntax errors fixed, but the accompanying code really helped. I enjoyed this class. If you want to know the nuts and bolts of how a game engine works, then this is the class for you.
by Σπύρος Μιλτιάδους


by Σπύρος Μιλτιάδους

An amazing course by an amazing teacher Thanks for carefully designing the course its one of the best resources out there.

Course Content

  • 1
    About the Course
  • 3
    Dependencies and Folder Structure
    • Project Dependencies
    • Note for Windows Users
    • Files and Folder Structure
    • Project Initial Folder (Download)
    • Picking a Code Editor
    • Makefile
    • Quick Makefile Notes
    • Windows MinGW Installation
    • Windows MinGW Issue with std::to_string
    • Activity: Building the Project
  • 4
    Game Loop
    • The Game Loop
    • Source Code (Download)
    • Fixing our Time Step
    • Working with the GLM library
    • Source Code (Download)
    • SDL Rendering and Double Buffering
  • 5
    Entity-Component Design
    • Entity-Component Fundamentals
    • Entity and Component Prototypes
    • Entity and Component Implementation
    • Working with C++ Generics
    • Just a Generic Cup
    • The Transform Component
    • Source Code (Download)
    • Activity: List All Entities
  • 6
    Sprites and Animations
    • Sprites
    • Managing Game Assets
    • The Sprite Component
    • Source Code (Download)
    • Activity: Function HasComponent
    • Animated Sprites
    • Source Code (Download)
    • Animation with Multiple Frames
  • 7
    Keyboard Input
    • The Keyboard Control Component
    • Activity: Keeping the Player in the Window
  • 8
    Maps and Tiles
    • Working with a Tilemap
    • The Tile Component
  • 9
    Layers and Camera Movement
    • Layers
    • Camera Movement
    • Source Code (Download)
  • 10
    • Identifying Collisions
    • Activity: Rendering Collision Bounding-Boxes
    • Improving the Collision Check
    • Source Code (Download)
  • 11
    Labels and Fonts
    • The Label Component
    • Source Code (Download)
  • 12
    • The Projectile Emitter Component
    • Source Code (Download)
    • Activity: Improving the Code for Destroying Entities
  • 13
    Using Lua
    • Embedding Lua in our C++ Application
    • Loading Assets from our Lua File
    • Source Code (Download)
    • Entities and Components in Lua
    • Activity: Loading Entities and Components from Lua
    • Loading Entities and Components from Lua
    • Source Code (Download)
    • Using Date & Time in Lua
    • Activity: Using Date & Time in Lua
    • Source Code (Download)
  • 14
    Next Steps
    • Next Steps
    • Source Code (Download)
  • 15
    Bonus: The Map Editor
    • Activity: Creating a Tilemap Editor
    • Tilemap Editor Source Code (Download)
  • 16
    Bonus: IDE Configuration Tips
    • Visual Studio Code Build Task
    • CLion IDE Configuration
  • 17
    Moving Forward
    • Similar Courses


  • Gustavo Pezzi

    Senior Lecturer

    Gustavo Pezzi

    Gustavo teaches computer science and mathematics at BPP University, London. He studies how teaching game programming can help enhance awareness and understanding of basic mathematics and physics. He is also a professional software engineer with more than 10 years of experience, with an industry background in 3D systems, games, systems, databases, and data analysis. His academic path includes institutions such as Pittsburg State University, City University of London, and University of Oxford.