Tuesday, October 13, 2015

How My Son Taught Himself Object Inheritance With Minecraft

Like every elementary school boy on planet Earth, my son has an unhealthy obsession with Minecraft.  Long ago he grew tired of building stuff and has been reviewing mods, creating texture packs, and figuring out the boundaries of the sandbox.

With the addition of command blocks and the expansion of the command language in recent releases he has been challenging himself to create new and exciting game play.

So what does this have to do with with the foundation topic of object oriented programming, Object Inheritance? Well, let me tell you a story...

My son wanted to make a friend that would follow him around and carry stuff for him in the game.  (Geek Benefit #3: We can make our own friends if we can't make friends.)  He started by creating a command block that cloned a mini armor stand and named it Timmy.  Timmy unfortunately was a rather boring friend because it just stood in one place and did nothing.

What to do? Well, there is a thing in the game that does follow a player around.  So my son decided to clone a dog.  He updated the command block to make Timmy always be where the dog was.  That looked weird so he made the dog invisible.  Cool!  Just like that Timmy has inherited the dog's AI.

But that was not enough.  Timmy needed to follow him around AND carry stuff. Minecraft Riddle: "What's mobile and carries a chest?"  Minecraft Answer: "A donkey."  So next he cloned an invisible mule and made it stick to Timmy too.

And poof, we now have a mini armor stand named Timmy that has the AI of a dog and the carrying capacity of a mule!

So instead of the boring "pet shop" inheritance example in the first C++ book I read decades years ago, he used the rather exciting example of Minecraft mobs to build his custom class, Timmy!  The armor stand has now inherited the class properties of the dog and the donkey. Okay, I know, it's not a pure example, but it was a very small step illustrate the concept.  And he figured it out for himself out as part of his fun. The best type of learning.