"Such a Great Course! I didn't really grow up learning about computers, but I started by computer science degree a few years ago and became really interested in how things worked. This course has given me insight not just into how game engines are made, but how projects in general are done. It's such a good course if you like learning how thing work behind the scenes."
"Superb course! Thank you so much for creating this :) Since I love understanding things under the hood, such courses are indeed what I look forward to. Even C++ is new for me and I am learning a lot by this course."
"Great course for learning ECS for the first time. University-course level quality. Concepts are introduced incrementally and are expanded upon in a way that demonstrates the purpose and reasoning of the code design clearly."
"Well, I have reached the end of the course and I must say - it was brilliant and exactly what I was looking for. The course is great if you want to understand the fundamentals of how a game a engine is put together. It goes through all of the fundamentals Graphics API, Input, Game Loop, Delta Time, ECS, Event System, and Scripting. At the end I feel as if I have attended a university course. You can tell Gustavo has a passion for teaching (and is a professional lecturer). I approached it consistently by trying to do a few hours day, and really looked forward to and enjoyed my study time. I am now looking forward to using what I have learnt to understand the topics more deeply. Thanks Gustavo!"
"I really enjoyed the course. It has a good level of detail to understand the building blocks of a game engine. I had very much fun writing the code of the engine and especially the exercieses. Always getting my code up and running was not always straight forward, but I think that this helps learning. Integrating the scripting languange was an eye opener, since I did not do such a thing before. This opens many interesting possibilities. Thank you very much."
"Fantastic Introduction and Primer! Working my way through the course now, and I'm enjoying every bit of it (except for the clunkiness of C++ environment setup and prep which is never fun lol). His method of teaching and how he thoroughly explains everything as you go along is critical and something that a lot of courses lack. You build things from the ground up and improve on them as you go along while learning the important and necessary principles and components of game development that you will carry with you as you move forward with your game development journey in the future."
"The Introduction I have been desperately searching for!I just needed a simple foundation to help wrap my head around the basic architecture of a game engine. There's just nothing else out there: with many sources I've come across either focusing solely on creating a renderer or using some existing game framework. I feel like I finally have my start. Thank You Gustavo."
"Another great course from Gustavo, thoroughly enjoyed! First time really using C++ in any depth and though some of the modern feature syntax is a bit rough, everything is explained in detail and all fits together nicely."
Overall an amazing course. I highly recommend it. I like to code and debug along and this course was great.
- Environment set-up: So many courses or textbooks have hurdles around getting the environment set up properly, or decades-old dependencies not being available anymore. Gustavo does a great job there and over the whole course I don't think I was blocked more than 30 minutes. This might not sound like a big deal, but so often you sink a few hours into a course only to discover half-way through that you have to spend days trying to fix arcane issues with no documentation. None of that nonsense here.
- C++ content: Gustavo is an experienced C++ programmer and it shows. In this course you'll learn about templates, unique pointers, some classic C++ syntax (like avoiding for loops), and function callbacks. The syntax gets ugly, but Gustavo always makes it easy. In terms of prior experience, before this course I had followed Bjarne Stroustrup's Programming Principles book, and before that I have been programming in Python professionally for a few years. I think this course goes a bit fast if you're still learning the basic C++ syntax, but for me it worked great as a "first big project". It was especially helpful for all the industry wisdom Gustavo imparts throughout the course.
- Lua content: Mixing a scripting language with a compiled language is something I knew nothing about before this. Betweem C++, Lua, and the imgui library, I feel like I didn't just learn game design, but a lot of very useful skills for making simple applications in C++. In terms of prior experience, coming from Python Lua felt very familiar.
- ECS and game design patterns: I think because of C++'s syntax quirks, some of the ECS design gets hidden behind difficult to read boilerplate code. That being said, Gustavo does a great job of focusing your attention on the big picture and what really matters. I don't know of another course that teaches the concept so well. To be honest, by the end of the course I felt comfortable enough with C++ and the code base to watch the videos on higher speed.
- Instructor: Gustavo is likable and his personality shines through the whole course. He loves to teach and he empathizes with the students' issues a lot. Often I would think "oh that looks difficult" only for Gustavo to say that just a few seconds later and to focus precisely on the difficult part."
"Nice introduction to video game dev! This a great course that teaches game development from scratch. It helps to understand the inner of the game engine.
So this is a course for you if you want any of the following: - You want to understand how works the game engines. - You want to learn how to develop video games and have curiosity about how they are done in low-level detail. - You want to practice C++ focusing on game dev and/or graphics.
This might not be a course for you if: - You only want to create video games and get the stuff done without worrying about low-level details. - You already have lots of experience in C++ and videogame development."
I recommend this course to anyone looking to start learning about game development in C++, and the details behind a simple 2D game engine, also the integration of all the different libraries necessary to give a real functionality to your game engine and final game.
I have learnt more with this course about game engines, game programming, modern C++ programming, scripting integration, some design patterns related to game development, than any other course out there. The most important thing is that you find it all in one place, no need to be jumping from book to book or from one website to the other gathering information. You have it all in this course.
More importantly, Gustavo is a great teacher, and his explanations are very clear. 100% recommended!"
"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?
- 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.
"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!"
"If you were following @jonathan_blow or @cmuratori but you feel that the way they teach is not your thing, consider checking a @pikuma course called 'Creating a 2D Game Engine' where you'll learn about ECS, C++ DOD and many other things from a person that is good at teaching. The course is paid but you have nothing to loose, there is a free sample where you can check if the content of the course, the tools, the analogies and even the voice of the teacher match the way you learn. I'm enjoying the lectures a lot. I learned from books about Data Oriented Design, I made open source contributions in C, I even published a game on steam, but this lectures help me to put everything together and to upgrade my knowledge."
"I'm a senior software engineer on business side, and I'm interested in game development and game engine in spare time. Gustavo presents this course clearly and interesting. I like ECS, Lua and ImGUI parts. I used Lua, but this course presented it easier to integrate into engine. Also I heard the other two technologies, but I understand these parts easier."
"Good But very long... The coarse was amazing with its videos and everything but it got long a bit boring after a way. Still amazing and I learned a lot. Best coarse I've every done 10/10. Maybe try shortening the videos more next time."
"Great course! Having most familiarity with C, and very little of C++, this was a good insight into how game engines work, how to program for contiguous memory access, and how Lua can be used to add game flexibility to a larger 'non programmer' audience. I didn't completely understand all the C++ STL concepts in detail, but I was able to grasp most of it and I will run through this course again to develop a deeper understanding."
The instructor moves at a good pace, explains everything in clear detail, and builds each piece upon the previous one not leaving anything out or doing any magic handwaving.
I am a C# programmer, and did a brief intro course on C++ before and this course was great to help me get more used to C++ syntax and idioms. I want to learn the Godot or Unity engine for 2d games and hope the instructor makes a course on one of these pre-made engines one day.
"Worth every penny!Gustavo was very informative at every step of the way and now that the course is over I feel pretty confident I can build on this project further to really create something unique with what I've learned."
There's a little 2d game, I don't remember the name of it exactly, but there is a character dropping things from the top of the screen and your little character has to run along the ground and catch what's being dropped in a little bucket. This is what I feel this course is like, so much knowledge is dropped throughout the course it's quite incredible. And the excitement watching things fall into place piece by piece as we go along is oddly a more thrilling feeling than any AAA game can give me.
Excellent stuff Gustavo, thanks so much! Valeu amigo :)"
"Learn a million things while building a small 2D Game Engine.
I don't think there's any other resource that guides you step by step into building a Game Engine. Gustavo does a fantastic job teaching many concepts and technologies while guiding you through going from zero to a small configurable engine. His teaching style is dynamic, and while he doesn't go too in-depth into any particular topic, he'll give you hints to discover more. The limit will be your curiosity.
I encourage you to give this course a try. It is a small investment compared to the vast knowledge you'll get, even if you are not planning on building your engine.
Some highlights: - ECS implementation! - Modern C++ concepts. - Lua integration for scripting."
It's impressive just how much information there is in this course while staying relatively short and approachable. Gustavo goes over everything always maintaining a delicate balance of giving enough detail while avoiding overloading the student. Critically, he also drinks the superior hot infusion ;)
"Finally! I've always wanted to make games, but figuring out where and how to start has been so intimidating. There is a ton of mediocre content online about gamedev and most of it focuses only on the very basics. Gustavo's content is empowering.
It's a nice mix of understanding the different moving parts that go into building a game and also the problems we try and solve in development. The course is a skillfully mixes coding, theory, design, and figuring out problems. It's rewarding. You take a step back after each lesson and see how what you learned made a real difference toward what you're building, you begin to see more of the big picture.
After finishing this course I can honestly say that it's given me the confidence I've needed to start seriously building the project I had only been dreaming about making. I cannot recommend this course enough."
"Great course for learning basics of game engine from scratch. Of all the books, courses and tutorials I have encountered, this is by far the best for learning how it all fits together into a small working game engine. This course takes you from the very first step, compiling "hello world", all the way to a working game engine with resource management, event system and scripting. After this course, I now feel inspired and ready to go ahead and learn more about engine design and making some fun games along the way. pros: cross platform (especially the focus on linux), minimal dependencies, working code all the way, teaching some modern c++. cons: liberal use of "auto" makes code a bit hard to read/understand when learning many new concepts."
"Amazing content and teaching style. The instructor has deep expertise in the subject matter and organizes course materials in a very approachable way. Exercises are well designed to complement learning."
"It really amazes me how complete the course is. This course is amazing because Gustavo does not leave anything and anyone behind.
I already had knowledge of C++ when I enrolled in this course and I initially thought to skip over all the lectures which dealt with topics that I already was familiar with. Let me tell you that I'm glad I didn't skip anything. All the lectures are incredibly well laid out and you might still learn something even on already known topics. This course taught me how a game loop works which before was just pure black magic to me. I couldn't understand how you could serialize a process of updating and displaying things when by a gamer perspective everything seems to be happening at the same time.
I also enjoyed to learn the core mechanics of the SDL2 library and last but not least to learn about the ECS system which prior this course I didn't even know it existed.
I can say that I'm leaving with a better knowledge on the subject and that I have enriched my experience bag with useful information that will become handy in the future."
"Great course! I've really enjoyed it. It helped me understand how a game engine can be architectured, even though i don't plan on using modern C++ features on my projects. I just wish it went more in depth into alternatives for ECS, it seems great for a complex and generic game engine, but seems a bit overkill for small games, which is what i plan on making. Besides that, i do not regret the time i spent taking this course, and will likely try other courses from Pikuma later on!"
"Gustavo brings an Awesome course, made by heart and with an open mind, I cant recommend this course enough!
It is awesome from the beginning, you will learn key concepts that will keep in your brain how to think and design an game engine. If you want to learn c++ and how to endure in this amazing world of patterns: just get this course, there isnt any course better than this in my humble opinion."
"Just do it. Amazing course, I've read a lot of books about make c++ engines using libraries to try to start learning, but this course makes everything simpler for your journey, i would recommend do this course and the continue your studies."
I bought it with the aim of building a DialogueBoxSystem, a la Final Fantasy. While that particular Component/System combo was never created, the course provided enough examples that building one from scratch won't be a problem. Another bonus? This course upgraded my game coding skillset from the 90s-era "No framework for you, tiny Shareware dev" to the modern ECS style. I'm definitely a happy customer."
Clear & Concise. I absolutely loved this course and I only wish there was a part two for refactoring and perhaps showing how to build a game GUI with state transitions. I know the course has some older versions of Lua and Sol but overall I used all new SDL2 components and have the game running on Windows & Mac (M1).
If you want to understand C++ ECS Systems with component templates then this is the course for you!"
"One of the most invaluable courses for new people interested into game programming!
Gustavo Pezzi is one of the best online teachers I've come across. He explains some of the most important concepts when getting deeper into programming and his teaching style really made things I struggled with on my own (Components/Systems/Adding Lua) a complete breeze.
I have all of Gustavo's courses and I've enjoyed every single one of them and have always came out a better programmer because of them. If you are new you will eventually come to an obsession about design patterns and components and it can really throw you for a loop. Something about having something all sync together nicely is very rewarding. He explains a great ECS design and provides reason why he went the route he did. Components, Systems, Animations, Data Oriented Design, and even gives you the keys to learning how to incorporate Lua. He also drops in a little bit of Dear ImGui a popular GUI library used a lot of the time for debugging (you see it everywhere).
Complaint: I'd love to see an efficient scene/state machine, quad trees, and some pathfinding, but it's impossible to dock any points based on all the content stuffed in this course. My really only complaint, and it's a petty one, is I wish there were even more exercises to really challenge the concepts learned in the chapters. This is something anyone can do themselves, but it's nice having someone as great and experienced as Gustavo providing the challenge so you could be sure to stay on topic and perhaps not adventure to far off of the point. With that said he does challenge you to create a map editor at the very end. I personally rather read Tiled Editor maps exported to the Lua format. Thanks Gustavo! Looking forwards to any future courses, I'll be first in line. ;)"
"Nice Intro to 2D Game Engine. I really enjoy the pace and how the instructor explains everything but I have some gripes with the architecture of the engine and how object oriented it is. I get that C++ is part of the industry culture and most studios use OOP but in this course in particular I feel as though the instructor falls to OOP through rote mechanisms and doesn't really give a sense of why OOP helps or why some of the structures need to be so fleshed out before it sees any use. The development feels as if it is prioritizing the fleshing out of pre-known structures first and does not seem to be informed by immediate needs and for a lot of the times I'm relying on faith that these structures will make sense later. Another point I would like to bring up is the use of modern C++ "features" such as templates and generics in a course that claims to be data oriented. I love that the course has a section on data oriented design and speaks about memory and encourages the learner to think about how things are laid out in memory but at the same time, the use of templates and smart pointers - while it helps the programmer sometimes, they also betray memory contiguous-ness and introduces pointer redirection and overhead - all hidden from novice programmer. And lastly, the use of so many libraries in a course that claims to be "from scratch". I get that these libraries help and don't really affect the game-play much v/s a hand-rolled one, but the course is hardly from scratch anymore so why make that claim. I know I pointed out a lot of my frustrations with the course but now that that has been said, I am thoroughly enjoying the course and am learning a lot despite my frustrations. I am following along in C and not using any libraries - mostly using the course as a guide rather than a complete follow along and I am learning a lot and I am glad that this course exists."
"The best teacher I ever had and the best courses I have ever seen!
I took many video tutorials and read many teaching books for the last 20 years, but I have never had a teacher as good as Gustavo! His teaching style and tutorials are so interesting, fun and easy to follow that I watch them in the evening instead of Netflix or a movie.
I wish I had teacher like that 20 years ago when I first tried to learn programming but gave up because books and tutorials were too boring and not easy to follow. Also in the end they left you with knowledge that is not really useful or enough to do anything that is close to the finished product. Another great thing with Gustavo is that in the end you really make something. Almost a whole game.
I never wanted to learn databases, I find them too boring, but if Gustavo makes database course I will learn them too! He is that great of a teacher! Even database course would be fun and interesting."
"This is one of the most thorough and best courses I've ever done on game development, and I've done quite a few. The information is easily digestible and useful. The structure of both the course and engine are beautifully organized. There are also plenty of opportunities to implement what you're learning through exercises. This is a must-have course for anyone looking to build their own 2D game engine. I can't recommend it enough."
"I've been looking for a long time for a course like this, where things are explained step by step, without magic tricks or black boxes. I really appreciated how this course provides a detailed birds-eye view of the fundamental aspects of a small but functional game engine. Being a gamedev and an engineer, I like to build things from the ground up, and understand what I am doing in the process. This course gives you the basic building blocks upon which you can create and expand, strong in the knowledge of what is the right approach to pursue."
"This is an brilliant course. Teaching great, methodical and easy to follow. Content great, well organised and covers the subject areas well. Pacing of the course was really good, always moving forward but not too fast. Instructor was easy to understand and responsive to questions and issues. If you are interested in this course, even just a little, I would definitely recommend you enrol. My experience with this course has been so good that I will definitely be going on to the other courses available on this website. 5 stars, easily earned."
"I recently finished Gustavo's Assembly language course for the 6502 CPU, and I was impressed with the content and how easy it was to build a full Atari game. This course is equally impressive and easy to understand, and I came into it with a small amount of C++ experience. I am still early in the course, but I am so excited and happy with this course that I want everyone to know Gustavo is an outstanding teacher! The skills he has taught me will serve me well as I pursue a software engineering career this year in Silicon Valley. Thank you so much Gustavo, for being the best teacher I have encountered for computer programming. I shall not forget where I started and how much you have helped me :-)"
"This Course Great "C++ 2D Game Engine Development" was a great course. For many years, I wanted to create a game from scratch without using any popular game engines. I was curious about how a lot of games worked under the hood. His teaching style and pace were very good. Also, the exercises helped very much to reenforce the learning. I am so happy that I now know the fundamentals of creating a game engine. This felt like I have been well educated on the fundamentals of the subject matter. I am so glad that I took this course."
"This was a wonderful course and provided great insight of how to start a game engine. There is still plenty to do and to continue my education of game engine programming, I will take what I learned from this course and try to build an editor from some the the concepts. I recommend this course to anyone that is interested in game engines and c++ as a wonderful introduction. Thank you Gustavo, I look forward to taking some more of your courses in the future."
This was one of the best online courses I've done in a *long* time.
The progression of topics is extremely smooth and well-thought-out. The depth that each topic covered is just right so as not to overwhelm you, but also not leave you in confusion as to what exactly you are doing. You finish the course with a sense of skill, empowerment, and inspiration, rather than feeling like you only have the know-how to implement *exactly* what was covered in this course and no more. It's the mark of truly good educational materials.
I already had a fair amount of coding experience in languages such as C#, Python, and Lua, but almost zero experience with C++. This course was perfectly pitched to my level of experience. It didn't try to go through extremely tedious explanations of basic programming concepts, but rather it respected my time and existing knowledge and gave me the information I needed to understand what we were doing in C++. There were also plenty of times where fundamental C++ concepts were repeated so as to really drill them in for people inexperienced with C++, and I really appreciated that.
Another thing I loved was that the instructor is writing all the code alongside you from scratch. Every file starts out blank and is filled character by character, line by line, as you build up the code. Sometimes intentional directions are taken that have to be back-tracked and changed or fixed, but it's not because of incompetence or bad planning in the course, but rather to give you a further understanding of *why* you are doing something, not just blindly following along with what's being typed. And to top it off, all the code is being written in a visually bare-bones text editor (vim), which means that the focus is on the *code*, not a fancy IDE and all its bells and whistles being a distraction. This is more important than it sounds. (This doesn't mean *you* have to use vim, of course, but having the code written this way by the instructor is very powerful for keeping the focus on the code you are writing.) Only a couple times toward the very end of the course is there code for a lesson already written, but by that point it's appreciated and it's actually a respect of your time.
Lastly, the number of powerful concepts packed into this course is just gold. I mean it. It's astonishing that this one course delivers all that in a streamlined, easy-to-understand, easy-to-follow set of steps. You could easily have an entire course on just using SDL, or just how the Entity-Component-System architecture works, or how to embed Lua into your C++ program. On top of that, it would have been so easy for this course to be just a messy jumble of those concepts all crammed in together, with no real separation of ideas. Instead, this is laid out in such a way that each topic is approached smoothly and in a way where you feel like you have a solid grasp of it before moving on to the next topic. I am an educator myself and have written my own coding courses for all ages and experience levels. I recognize the monumental amount of work that has gone into making this course what it is.
Trust me, you don't want to pass this one over. It is well worth the money.
Thank you very much for creating this course! My head is bursting with ideas for so many new projects directly as a result of what I got out of this course."
"Excellent introduction. It gives a basic but useful idea of how to start and how are the basic cogs inside a game engine. You can grasp the introductory concepts and start building from there into more complex topics afterwards."
"A really good introductory guide to SDL! Before this course I had only seen some guides around the web about the SDL library, I can confirm that this course provides a broader view of the approach to use to develop a well-made 2D game, and above all, Gustavo is really good at making you immerse yourself in the logic of game engines and make you understand the mechanism behind a clear and clean programming. After this course I feel perfectly capable of developing a 2D game that I had been thinking of doing for a while!"
"Very informative! 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!"