Creating monsters
Imagine your game has a wide and varied array of enemy monsters it can throw at your players – trolls, zombies, dragons, accountants – anything that wants to do damage. You could approach this the OOP way by creating a base monster class and adding new subclasses to the hierarchy for every type of monster. But you’ll quickly realize that adding a new monster subclass every time a designer decides that demonic squirrels aren’t challenging enough is time consuming (demonic rabbits are in fact necessary) and can have ramifications up and down the monster class hierarchy.
Another way to come at this problem is to think about what properties every monster has, rather than what each monster subclass is (we’ll be using this solution in our example code). This approach ends up showing us what categories of monsters we have and what they all have in common. When we start thinking of demonic squirrels and demonic rabbits as the same...