- 30 hours on-demand video content
- Lifetime access
- Downloadable resources and exercises
- Certificate on completion
- Access on mobile and desktop
- Secure checkout via Credit Card or PayPal
- 14-day money back guarantee
- Last updated January 2022
$49.99
ENROLL NOW FREE PREVIEWThis course is a gentle and comprehensive introduction to the fundamentals of 2D game engine architecture. We'll discuss several of the most popular programming patterns used in game development and try to put all the theory we learn into context by coding a small 2D game engine using modern C++, SDL, and Lua.
We will write, together, a small ECS framework from scratch to manage our entities, components, and systems. We will discuss how engine programmers design their code and how we should think of organizing game objects in memory with performance in mind.
We'll try to write most of our engine code from scratch. All these libraries and tools are cross-platform, so you'll be able to code along with either Windows, macOS, or Linux!
The target audience for this course are beginner programmers that wish to learn more about how C++ works in the context of game development. Therefore, students must already know how to code and be familiar with basic concepts of programming and logic. You should be able to write if-else statements, loops, functions, and classes using simple OOP.
You do not need to know C++ before enrolling; many successful students have a background in web, mobile, and game development, working with languages like Java, Python, Ruby, Go, Swift, JavaScript, Ada, Zig, Kotlin, and many others.
This course is not just a simple tutorial on how to create a game with C++. This is the opportunity for you to think about the abstraction of what a "game" really is and all the pieces that need to interact to make them happen. More than that, this course allows you to write from scratch the code of a small C++ engine that can be used to create many types of games.
We will also touch other important topics like ECS, data-oriented design, STL containers, C++ templates, game loop, SDL rendering, event systems, asset management, memory management, and performance. And finally, we'll also learn how to embed the Lua language into our native C++ code to add scripting power to our engine.
While there are other resources about game engine development out there, they are either too theoretical or overwhelmingly long. If you are looking for a gentle introduction to the world of game engine programming and want to learn how games really work under the hood, then you should definitely take this course!
Gustavo Pezzi is a university lecturer in London, UK. He has won multiple education awards as a teacher and is also the founder of pikuma.com.
Gustavo teaches fundamentals of computer science and mathematics; his academic path includes institutions such as Pittsburg State University, City University of London, and University of Oxford.
"Fantastic course! Incredible lectures packed with amazing nits and bits about game development and high-performance software development. Can't wait for the next one :) Would easily recommend this to anyone that is passionate about Computer Science and "how things work". Thanks, Gustavo!"
"Well understandable introduction to game engine programing. This course was very understandbale, even with all the C++ shenanigans and all lead to a good starting point for further personal development. So I definitely recommend this course for all C++ users!"
"Okay as first introduction to game engines. I like that Gustavo keeps things simple to teach the fundamentals of how game engines are architected. It explains in depth hims code and the course is very well structured. I recommend it if you want a gentle introduction.
However, I want to give a small improvement feedback. I think that a lot of effort is being made on teaching c++. The course would be more interesting reducing the number of videos explaining the c++ lenguage. Learning c++ is a big topic and try to fit teaching c++ is a waste of resources that could be spend into more game engine related topics like creating an editor. It would be better if people only take this course knowing at least the very basics of c++. Also the way c++ is used in this course should not be taken as an example. The use of shared pointers are totally unnecesary, they seem to be there only to teach people about their existence (again a c++ topic). There are too many memory allocations and copies being performed. I would agree the main point of the course is not performance. And I like the course is in c++ because it is what game engines at the core use. But if we don't need performance, why would we use c++ in the first place?
Improvement points:
- The type of components that exist is are known so we can save allocations using a plain array.When we run the game the engine already know all the types of components that exists. This only changes during development. We could use a simple enum to keep track of this and resize the array at compile time. This way you don't need to allocate which is expensive.
- The number of types of systems are known as well. This only changes in code during development so not need of vector usage here.
- Reduce the use of shared pointers. Most of the time we only need to modify an object in the registry. We can return a reference to the underlying object to change it.
- The Pool class is just a wrapper to a vector we could just typedef vector.
- The maximum number of components is known, in this case 32. We can use an array of 32 lenght on the stack for each pool.
- We can replace the Pool class for a more advance data structure like a free list to manage adding entities.
- We do not need to remove systems at all."
"A really great course with a fantastic teacher! This is the best online course I have ever attended. I have learned a lot and enjoied programming with Gustavo. I have already started the Game Physics Engine Programming course and after that I will also take the 3D Computer Graphic Programming course. Really good stuff!"