One of my favorite projects I worked on was a small RPG type game.
I can't remember it all, but I had classes that were derived from base classes.. these were the fighters. Elvaan, Hume, etc. And each class had different traits... (Elvaan might have attack +10%, Hume might have a +10% chance of blocking, something else might have a +5% chance of attacking twice, etc.). Each race had different starting attributes, attack, strength, magic attack, HP, etc.
Then I put them all into a main() file for the fighting simulation. Each round would start a battle between 2 races. Main() would call the battle() function, which would setup the possibilities and call a random() function multiple times to determine who would attack, how much they would attack for and if anyone had the chance of blocking how often, etc. This would continue to loop, requiring the user hit Enter between every round, until one of the creatures was defeated.
Of coarse it took multiple runs to figure out if I had made one race too powerful or one race not powerful enough, which I then went back and made adjustments to the attributes.
Needless to say, this was an extremely fun exercise. Allows for a ton of creativity.