Difference between revisions of "Beginner C++ Game Programming Series"

From Chilipedia
Jump to: navigation, search
(Topics Covered)
 
(70 intermediate revisions by 2 users not shown)
Line 1: Line 1:
The beginner series is meant to teach fundamental C++ programming concepts. It also covers some basic graphics programming theory. Also: making shitty little games. It is suitable even for those with zero programming experience. If this ain't your first rodeo, you can use this here wiki to jump through the lessons, skipping any B.S. what you already know.
+
The beginner series is meant to teach fundamental C++ programming concepts. It also covers some basic graphics programming theory. Also: making shitty little games. It is suitable even for those with zero programming experience. If this ain't your first rodeo, you can use this page to jump through the lessons, skipping any B.S. you already know.
 +
 
 +
== Topics Covered ==
 +
=== C++ Language - Procedural Basics ===
 +
*Basic [[variable|variables]] (<code>int</code>,<code>bool</code>,<code>float</code>), <code>[[const]]</code> specifier, <code>auto</code>
 +
*Type casting (c-style (type) cast)
 +
*Basic arithmetic operations (<code>+</code>, <code>-</code>, <code>/</code>, <code>*</code>, <code>%</code>, precedence <code>()</code>, assignment <code>+=</code> etc.,<code>++</code>/<code>--</code> )
 +
*Conditionals ([[If_Statement|<code>if</code>...<code>else</code>]], <code>switch</code>...<code>case</code>)
 +
*Boolean logic operations (<code>||</code>, <code>&&</code>, <code>!</code>)
 +
*Comparisons (<code>></code>, <code><</code>, <code>==</code>, <code><=</code>, <code>>=</code>, <code>!=</code>)
 +
*Loops (<code>while</code>, <code>for</code>, <code>do</code>...<code>while</code>, range-based for)
 +
*Writing [[function|functions]] / function parameters / return values / overloading functions
 +
*References <code>&</code> / pass by reference-vs-pass by value
 +
*Arrays <code>[]</code>
 +
*<code>struct</code> (and its difference from <code>class</code>)
 +
*<code>enum class</code>
 +
*<code>namespace</code> / <code>using</code>
 +
*Forward declaration of classes to break circular <code>#include</code> cycles
 +
*Uniform initialization of classes / structs with <code>{}</code>
 +
 
 +
=== C++ Language - Object Oriented Basics ===
 +
*Creating objects, calling member functions
 +
*Creating <code>class</code>es, data members, and member functions
 +
*<code>public</code> / <code>private</code> member access / encapsulation and data hiding
 +
*<code>[[const]]</code>/non-mutating member functions
 +
*Writing constructors / initializing embedded objects
 +
*Default (automatic) constructor / <code>= default</code>;
 +
*Delegating constructors
 +
*<code>static</code> member variables / <code>static constexpr</code> member variables
 +
*Nested classes
 +
*Forward declaration to break circular dependencies
 +
*Implementing operators for classes
 +
 
 +
=== C++ Language - Standard Library ===
 +
*Rng <random> <code>std::mt19973</code> / uniform_distributions
 +
*Utility functions <code>std::min</code> / <code>std::max</code> / <code>std::swap</code>
 +
*Math functions <code>std::abs</code> / <code>std::sqrt</code>
 +
*Measuring time <code><chrono></code> <code>std::chrono::steady_clock</code> / duration
 +
*Assertions <code><assert.h></code>
 +
=== Chili Framework ===
 +
*Gfx: putpixel/screenwidth/height
 +
*Color: getting/setting RGB color components
 +
*Mouse/kbd: input (polled and event-driven)
 +
*Sound: loading and playing sounds
 +
=== Game Programming Concepts ===
 +
*Game loop / frame based animation
 +
*Grid coordinate systems and mappings
 +
*Variable (measured) time step and fixed time step
 +
*Basic rectangle collision detection and handling
 +
=== General Programming Techniques ===
 +
*Recursion
 +
*Managing a partially-filled array
 +
*Mapping a 2D array onto a 1D array
 +
=== Graphics Concepts ===
 +
*Compiled sprite
 +
*Drawing filled rectangles and filled circles
 +
*Drawing beveled graphics
 +
*Pulsating color animation effect
 +
=== Math / Physics Concepts ===
 +
*Position / velocity / acceleration
 +
*Rebounding off of a vertical/horizontal surface
 +
*Basic vector math (vector add/sub/scale/length/normalize)
 +
=== Other Skills ===
 +
*Basic visual studio IDE usage & navigation
 +
*Visual studio debugger
 +
*Git + MSVC
 +
*Basic understanding of compiler, linker, .h/.cpp files, .lib/.obj files
 +
*Using regex find/replace in visual studio
  
 
== History ==
 
== History ==
This series is a reboot of Chili's original beginner series launched back in 2012 (ah, the good old days). The way that Direct3D applications are built and the tools used have changed over the last 5 or so years, and the reboot updates the tutorials to reflect those changes. It also corrects some mistakes that were made, and is reworked to shorten the journey to learning hardware 3D graphics programming and introduce object-oriented programming at an earlier stage.
+
This series is a reboot of Chili's [http://forum.planetchili.net/viewtopic.php?f=3&t=1792 original beginner series] launched back in 2012 (ah, the good old days). The way that Direct3D applications are built and the tools used have changed over the last 5 or so years, and the reboot updates the tutorials to reflect those changes. It also corrects some mistakes that were made, and is reworked to shorten the journey to hardware 3D graphics programming and to introduce object-oriented programming at an earlier stage.
  
 
== List of Tutorials ==
 
== List of Tutorials ==
Line 8: Line 75:
 
|- style="border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;"
 
|- style="border:1px solid grey;background-color:#DDF;color:black;font-weight:bold;text-align:center;"
 
| style="width:10%;border:1px solid grey;"|Tutorial Number
 
| style="width:10%;border:1px solid grey;"|Tutorial Number
| style="width:50%;border:1px solid grey;"|Subtitle
+
| style="width:60%;border:1px solid grey;"|Title
| style="width:20%;border:1px solid grey;"|Release Date
+
| style="width:16%;border:1px solid grey;"|Release Date
| style="width:20%;border:1px solid grey;"|Runtime
+
| style="width:14%;border:1px solid grey;"|Runtime
 
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 
| style="border:1px solid grey;"|0
 
| style="border:1px solid grey;"|0
| style="border:1px solid grey;"|[Intro/Setup]
+
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 0|Beginner C++ Game Programming [Intro/Setup]]]
 
| style="border:1px solid grey;"|July 30, 2016
 
| style="border:1px solid grey;"|July 30, 2016
| style="border:1px solid grey;"|15:20
+
| style="border:1px solid grey;"|16:03
 
|- style="background-color:#333;color:#c1c1c1;"
 
|- style="background-color:#333;color:#c1c1c1;"
| style="border:1px solid grey;padding:5px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 0}}
+
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 0}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|1
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 1|Beginner C++ Game Programming [Function Calls/Syntax]]]
 +
| style="border:1px solid grey;"|August 1, 2016
 +
| style="border:1px solid grey;"|17:35
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 1}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|2
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 2|Beginner C++ Game Programming [Variables/Operators]]]
 +
| style="border:1px solid grey;"|August 5, 2016
 +
| style="border:1px solid grey;"|18:49
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 2}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|3
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 3|Beginner C++ Game Programming [if Statement/bool]]]
 +
| style="border:1px solid grey;"|August 9, 2016
 +
| style="border:1px solid grey;"|26:11
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 3}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|4
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 4|Beginner C++ Game Programming [Animation/Member Variables]]]
 +
| style="border:1px solid grey;"|August 14, 2016
 +
| style="border:1px solid grey;"|16:13
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 4}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|5
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 5|Beginner C++ Game Programming [Comparison/Logical Operators]]]
 +
| style="border:1px solid grey;"|August 20, 2016
 +
| style="border:1px solid grey;"|20:28
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 5}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|6
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 6|Beginner C++ Game Programming [Creating Functions]]]
 +
| style="border:1px solid grey;"|August 27, 2016
 +
| style="border:1px solid grey;"|19:14
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 6}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|7
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 7|Beginner C++ Game Programming [Debugging]]]
 +
| style="border:1px solid grey;"|September 2, 2016
 +
| style="border:1px solid grey;"|17:59
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 7}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|8
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 8|Beginner C++ Game Programming [Poo Game/RNG]]]
 +
| style="border:1px solid grey;"|September 10, 2016
 +
| style="border:1px solid grey;"|27:56
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 8}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|9
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 9|Beginner C++ Game Programming [Creating Classes/static constexpr]]]
 +
| style="border:1px solid grey;"|September 17, 2016
 +
| style="border:1px solid grey;"|20:11
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 9}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|10
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 10|Beginner C++ Game Programming [Loops]]]
 +
| style="border:1px solid grey;"|October 4, 2016
 +
| style="border:1px solid grey;"|20:55
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 10}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|11
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 11|Beginner C++ Game Programming [References/const Correctness]]]
 +
| style="border:1px solid grey;"|October 20, 2016
 +
| style="border:1px solid grey;"|35:39
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 11}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|12
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 12|Beginner C++ Game Programming [Constructors/Encapsulation]]]
 +
| style="border:1px solid grey;"|October 29, 2016
 +
| style="border:1px solid grey;"|30:55
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 12}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|13
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 13|Beginner C++ Game Programming [Arrays]]]
 +
| style="border:1px solid grey;"|November 11, 2016
 +
| style="border:1px solid grey;"|34:41
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 13}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|14
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 14|Beginner C++ Game Programming [Snake Game]]]
 +
| style="border:1px solid grey;"|November 26, 2016
 +
| style="border:1px solid grey;"|36:22+
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 14}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|15
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 15|Beginner C++ Game Programming [Git in Visual Studio]]]
 +
| style="border:1px solid grey;"|December 11, 2016
 +
| style="border:1px solid grey;"|37:25
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 15}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|16
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 16|Beginner C++ Game Programming [float/type casting]]]
 +
| style="border:1px solid grey;"|December 20, 2016
 +
| style="border:1px solid grey;"|30:30
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 16}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|17
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 17|Beginner C++ Game Programming [chrono timestep/using namespace]]]
 +
| style="border:1px solid grey;"|December 25, 2016
 +
| style="border:1px solid grey;"|29:11
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 17}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|18
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 18|Beginner C++ Game Programming [Compiler Confessions]]]
 +
| style="border:1px solid grey;"|January 8, 2017
 +
| style="border:1px solid grey;"|28:35
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 18}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|19
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 19|Beginner C++ Game Programming [2D Vectors]]]
 +
| style="border:1px solid grey;"|January 14, 2017
 +
| style="border:1px solid grey;"|36:09
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 19}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|20
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 20|Beginner C++ Game Programming [Fart-Annoyed]]]
 +
| style="border:1px solid grey;"|January 28, 2017
 +
| style="border:1px solid grey;"|28:18+
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 20}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|21
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 21|Beginner C++ Game Programming [2D Arrays/Circular Dependency]]]
 +
| style="border:1px solid grey;"|February 11, 2017
 +
| style="border:1px solid grey;"|27:22
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 21}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|22
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 22|Beginner C++ Game Programming [enum/switch/case]]]
 +
| style="border:1px solid grey;"|February 19, 2017
 +
| style="border:1px solid grey;"|21:42
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 22}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|23
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 23|Beginner C++ Game Programming [Memesweeper]]]
 +
| style="border:1px solid grey;"|February 26, 2017
 +
| style="border:1px solid grey;"|38:10+
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 23}}
 +
|- style="border:1px solid grey;background-color:#667;color:#c1c1c1;text-align:center;"
 +
| style="border:1px solid grey;"|24
 +
| style="border:1px solid grey;text-align:left;"|[[Beginner C++ Game Programming Tutorial 24|Beginner C++ Game Programming [Recursion]]]
 +
| style="border:1px solid grey;"|March 11, 2017
 +
| style="border:1px solid grey;"|26:54
 +
|- style="background-color:#333;color:#c1c1c1;"
 +
| style="border:1px solid grey;padding:8px;" colspan="4" | {{#lsth:Beginner C++ Game Programming Tutorial 24}}
 
|}
 
|}
 +
 +
== Other Series ==
 +
*[[Intermediate C++ Game Programming Series]]

Latest revision as of 22:55, 17 June 2018

The beginner series is meant to teach fundamental C++ programming concepts. It also covers some basic graphics programming theory. Also: making shitty little games. It is suitable even for those with zero programming experience. If this ain't your first rodeo, you can use this page to jump through the lessons, skipping any B.S. you already know.

Topics Covered

C++ Language - Procedural Basics

  • Basic variables (int,bool,float), const specifier, auto
  • Type casting (c-style (type) cast)
  • Basic arithmetic operations (+, -, /, *, %, precedence (), assignment += etc.,++/-- )
  • Conditionals (if...else, switch...case)
  • Boolean logic operations (||, &&, !)
  • Comparisons (>, <, ==, <=, >=, !=)
  • Loops (while, for, do...while, range-based for)
  • Writing functions / function parameters / return values / overloading functions
  • References & / pass by reference-vs-pass by value
  • Arrays []
  • struct (and its difference from class)
  • enum class
  • namespace / using
  • Forward declaration of classes to break circular #include cycles
  • Uniform initialization of classes / structs with {}

C++ Language - Object Oriented Basics

  • Creating objects, calling member functions
  • Creating classes, data members, and member functions
  • public / private member access / encapsulation and data hiding
  • const/non-mutating member functions
  • Writing constructors / initializing embedded objects
  • Default (automatic) constructor / = default;
  • Delegating constructors
  • static member variables / static constexpr member variables
  • Nested classes
  • Forward declaration to break circular dependencies
  • Implementing operators for classes

C++ Language - Standard Library

  • Rng <random> std::mt19973 / uniform_distributions
  • Utility functions std::min / std::max / std::swap
  • Math functions std::abs / std::sqrt
  • Measuring time <chrono> std::chrono::steady_clock / duration
  • Assertions <assert.h>

Chili Framework

  • Gfx: putpixel/screenwidth/height
  • Color: getting/setting RGB color components
  • Mouse/kbd: input (polled and event-driven)
  • Sound: loading and playing sounds

Game Programming Concepts

  • Game loop / frame based animation
  • Grid coordinate systems and mappings
  • Variable (measured) time step and fixed time step
  • Basic rectangle collision detection and handling

General Programming Techniques

  • Recursion
  • Managing a partially-filled array
  • Mapping a 2D array onto a 1D array

Graphics Concepts

  • Compiled sprite
  • Drawing filled rectangles and filled circles
  • Drawing beveled graphics
  • Pulsating color animation effect

Math / Physics Concepts

  • Position / velocity / acceleration
  • Rebounding off of a vertical/horizontal surface
  • Basic vector math (vector add/sub/scale/length/normalize)

Other Skills

  • Basic visual studio IDE usage & navigation
  • Visual studio debugger
  • Git + MSVC
  • Basic understanding of compiler, linker, .h/.cpp files, .lib/.obj files
  • Using regex find/replace in visual studio

History

This series is a reboot of Chili's original beginner series launched back in 2012 (ah, the good old days). The way that Direct3D applications are built and the tools used have changed over the last 5 or so years, and the reboot updates the tutorials to reflect those changes. It also corrects some mistakes that were made, and is reworked to shorten the journey to hardware 3D graphics programming and to introduce object-oriented programming at an earlier stage.

List of Tutorials

Tutorial Number Title Release Date Runtime
0 Beginner C++ Game Programming [Intro/Setup] July 30, 2016 16:03
This tutorial introduces the Beginner C++ Game Programming Series and walks you through the setup required to follow along with Chili. It also explains who the series is intended for, the goals and outline of the series, and tips on how to succeed, but you can skip all that bullshit if you have crippling ADD. For a detailed list of what is covered in Beginner, see this page.
1 Beginner C++ Game Programming [Function Calls/Syntax] August 1, 2016 17:35
This tutorial mainly deals with how to call a function in C++ and basic syntax rules. We also talk about pixels, intellisense and other dumb bullshit.
2 Beginner C++ Game Programming [Variables/Operators] August 5, 2016 18:49
This tutorial is all about making sweet ass boxes (variables) to jam your hot numbers into and using operators (addition and subtraction) to add and subtract shit.
3 Beginner C++ Game Programming [if Statement/bool] August 9, 2016 26:11
We learn how to control the flow of execution using if statements, we learn about a new variable type called bool, and we learn how to use the Chili Framework to get keyboard input. All this, plus the dankest memes from 2007.
4 Beginner C++ Game Programming [Animation/Member Variables] August 14, 2016 16:13
In this tutorial we explore the idea of animation in computer graphics and we make the reticle move freely around the screen. Along the way we learn about classes and objects, how to add member variables to objects/classes, about .h (header) and .cpp (source) files, and about the short harsh lives of local variables (scope).
5 Beginner C++ Game Programming [Comparison/Logical Operators] August 20, 2016 20:28
Comparison and Boolean logic operators. Operators galore! Make if statements great again! Let the int dick measuring contests begin! Also, collision detection between rectangles, which is useful for stuff.
6 Beginner C++ Game Programming [Creating Functions] August 27, 2016 19:14
How to make member functions. That is all.
7 Beginner C++ Game Programming [Debugging] September 2, 2016 17:59
Mr. DeBugger is a real sir.
8 Beginner C++ Game Programming [Poo Game/RNG] September 10, 2016 27:56
We make our first game. So goddamn sweet. Not shitty at all.
9 Beginner C++ Game Programming [Creating Classes/static constexpr] September 17, 2016 20:11
In this video we make our first class and Chili teaches us about the birds and the bees and the static constexpr.
10 Beginner C++ Game Programming [Loops] October 4, 2016 20:55
In this video we learn how to loop our shit. Fuckoff copy and paste. Die in a gasoline fire (just kidding, don't leave me baby!)
11 Beginner C++ Game Programming [References/const Correctness] October 20, 2016 35:39
References are sweet because they let us control our shit from far away. Remember the days when we had to actually get up to change the channel on the TV? Remember TV? Fuck that shit! Also, const correctness is for big dick gangstas that don't give any fucks.
12 Beginner C++ Game Programming [Constructors/Encapsulation] October 29, 2016 30:55
Here we learn about the concept of encapsulation (ask your mom where she keeps the Vicodin!), which is the main principle behind object oriented programming (so listen the fuck up eh?). We also learn how to construct shit, and how to make our shit private.
13 Beginner C++ Game Programming [Arrays] November 11, 2016 34:41
In this lesson we learn about the bomb-ass data structure known as the array, the granddaddy of them all. We also learn about boring shit like the automatically-generated default constructor (BOOOOORIIIIING! NEEEEEERRRD!).
14 Beginner C++ Game Programming [Snake Game] November 26, 2016 36:22+
This is a two-part tutorial in which we tackle a game with a little more substance--the Snake Game. Grids and arrays galore. Majestic.
15 Beginner C++ Game Programming [Git in Visual Studio] December 11, 2016 37:25
In this video we learn how to use Git source control so that we can suck less at programming.
16 Beginner C++ Game Programming [float/type casting] December 20, 2016 30:30
In this video we learn how to float our boat, and how to get type cast.
17 Beginner C++ Game Programming [chrono timestep/using namespace] December 25, 2016 29:11
In this video we do the timestep thing in the Poo game. That means we measure (with std::chrono::steady_clock) the time taken for each frame, and then step the game's simulation by that amount. We also learn about the using keyword.
18 Beginner C++ Game Programming [Compiler Confessions] January 8, 2017 28:35
In this video we dig down in the dirty, juicy secrets of the C++ toolchain (the preprocessor, compiler, and linker).
19 Beginner C++ Game Programming [2D Vectors] January 14, 2017 36:09
Welcome to the fantastic erotic world of mathematical vectors. Everything is different now. Every operator is overloaded.
20 Beginner C++ Game Programming [Fart-Annoyed] January 28, 2017 28:18+
This is a three-part tutorial in which we play with our balls. Or something. Anyways, we'll finally put all that vector bullshit to good work doing some physics-y type shit.
21 Beginner C++ Game Programming [2D Arrays/Circular Dependency] February 11, 2017 27:22
2D arrays are awesome because they fuckin' let us organize or data and shit. Board games like chess, strategy games like Civilization, roguelikes, RTS games, X-Com... it's all grids baby. Also, time to learn how to circular depend our shit with forward declaration (you should still avoid circ. dep. when possible tho).
22 Beginner C++ Game Programming [enum/switch/case] February 19, 2017 21:42
We learn how to use enum to get rid of all the magic number bullshit for representing a number of options or states, and we learn how to use switch/case as an alternative to long if ... else chains. I also give the sermon on the mount (c:).
23 Beginner C++ Game Programming [Memesweeper] February 26, 2017 38:10+
Remember that movie, Field of Dreams starring Kevin Costner? No? Well neither do I, but this is a lot like that, minus the baseball, the Kevin Costner, the corn, and a lot of other stuff. But it has memes, and they will kill you.
24 Beginner C++ Game Programming [Recursion] March 11, 2017 26:54
Don't fool around with this stuff. Last week a programmer was found dead in the shower here. Apparently the instructions on the shampoo bottle read: Lather. Rinse. Repeat.

Other Series