Learn C++ the Hard Way
An introduction to C++ for anyone who wants to make games. This course will assume you know nothing about programming and build your skills to where you can make a few simple terrible games. It's then on you to make many terrible games until you start making great games. Or art. Whichever you fancy.
This course is free to read and the videos are priced to cover the cost of hosting them on my server. This course is also in pre-order status which means videos are not yet ready, but will come shortly after the content is written and working well.
Course Contents
This course contains the following modules and lessons. Every course offers free samples of the first 10 lessons so you can decide if you want to take the course, and excerpts from all lessons after that.
Module The Basics
You'll setup your computer for programming and learn the very basics of programming with C++.
- 00: IntroductionIntroduction
- 01: Gearing UpGearing Up
- 02: A Simple First ProgramA Simple First Program
- 03: Building with MesonBuilding with Meson
- 04: The Names of Funny CharactersThe Names of Funny Characters
- 05: Printing to the ScreenPrinting to the Screen
- 06: Variables and Simple TypesVariables and Simple Types
- 07: Comments and Debug PrintingComments and Debug Printing
- 08: StringsStrings
- 09: Using the `fmt` LibraryUsing the
fmtLibrary - 10: Math ExpressionsMath Expressions
- 11: Boolean TestsBoolean Tests
- 12: if-statementsif-statements
- 13: switch-statementsswitch-statements
- 14: while-loopswhile-loops
- 15: Basic FunctionsBasic Functions
- 16: Basic ContainersBasic Containers
- 17: Classic for-loopsClassic for-loops
- 18: Range for-loopsRange for-loops
- 19: Input From a UserInput From a User
- 20: Input From a FileInput From a File
- 21: Writing to a FileWriting to a File
- 22: Pass by Value, Pass by ReferenceLearn about value and references in function calls.
- 23: A Simple Adventure GameA Simple Adventure Game
Module C++ Projects
Use what you know so far to create simple CLI projects to study.
- 24: The CLI ProjectsTake what you've learned so far and create many small command line utilities.
- 25: Auto keywordLearn how use
autoto make your code easier to write. - 26: The Way of the PrintLearn about print debugging, the greatest way to debug code and that's not up for debate.
- 27: Using a DebuggerUsing a Debugger
- 28: nlProject nl
- 29: catProject cat
- 30: catProject wc
- 31: basename/dirnameProject basename/dirname
- 32: headProject head
- 33: tailProject tail
- 34: lsProject ls
- 35: cpProject cp
- 37: expandProject expand
- 38: unexpandProject unexpand
- 39: sleepProject sleep
- 40: echoProject echo
- 41: sleepProject sleep
- 42: uniqProject uniq
- 43: Additional ProjectsGoing farther by implementing even more projects.
Module Intermediate C++
Continue your study with intermediate topics in C++.
- 44: Basic structBasic struct
- 45: Pointers and `new`Pointers and
new - 46: Memory ManagementMemory Management
- 47: Constructors and DestructorsConstructors and Destructors
- 48: Advanced ContainersAdvanced Containers
- 49: Iterators && More ContainersIterators
- 50: An Alternative Iterator StyleIterators
- 51: Advanced FunctionsLearn about std::functional and function overloading.
- 52: LambdasLambdas
- 53: Advanced Memory ManagementAdvanced Memory Management
- 54: Exception AlternativesWhy people avoid exceptions and ways to avoid them, e.g. std::optional.
- 55: Review Namespaces and StructsReview Namespaces and Structs
- 56: Implement a Basic Object SystemImplement a Basic Object System
- 57: Introducing classesIntroducing classes
- 58: Structs with FunctionsStructs with Functions
- 59: The Constructor ProblemThe Constructor Problem
- 60: Advanced ConversionsAdvanced Conversions
- 61: Simple TemplatesSimple Templates
- 62: Runtime Type InferenceRuntime Type Inference
- 63: Entity Component SystemEntity Component Systems
- 64: Advanced TemplatesAdvanced Templates
Module Beginning Game C++
You now start to use what you know to create a simple game called Rogue.
- 65: The 100 Terrible Games TheoryThe 100 Terrible Games Theory
- 66: Using gitUsing git
- 67: Defensive Programming TacticsDefensive Programming Tactics
- 68: Performance MeasurementPerformance Measurement
- 69: Using a LinterUsing a Linter
- 70: Using Valgrind or other memory sanitizerUsing Valgrind or other memory sanitizer
- 71: Rogue Game Placeholder 1Rogue Game Placeholder 1
- 72: Rogue Game Placeholder 2Rogue Game Placeholder 2
- 73: Rogue Game Placeholder 3Rogue Game Placeholder 3
- 74: Rogue Game Placeholder 4Rogue Game Placeholder 4
- 75: Rogue Game Placeholder 5Rogue Game Placeholder 5
- 76: Rogue Game Placeholder 6Rogue Game Placeholder 6
- 77: Rogue Game Placeholder 7Rogue Game Placeholder 7