I am trying to write a platform shooter in C++ with a really good class structure for robustness. The game itself is secondary; it is the learning process of writing it that is primary.
I am implementing an inheritance tree for all of the objects in my game, but I find myself unsure on some decisions.
One specific issue that it bugging me is this:
I have an
Actor that is simply defined as anything in the game world. Under
Character. Both of these classes are abstract.
Character is the
Philosopher, who is the main character that the user commands. Also under
NPC, which uses an AI module with stock routines for friendly, enemy and (maybe) neutral alignments.
NPC I want to have three subclasses:
NeutralNPC. These classes are not abstract, and will often be subclassed in order to make different types of NPC's, like
Scientist and the most evil
Still, if I want to implement a generic NPC named Kevin, it would nice to be able to put him in without making a new class for him. I could just instantiate a
FriendlyNPC and pass some values for the AI machine and for the dialogue; that would be ideal.
But what if Kevin is the one benevolent
Programmer in the whole world? Now we must make a class for him (but what should it be called?). Now we have a character that should inherit from
Programmer (as Kevin has all the same abilities but just uses the friendly AI functions) but also should inherit from
FriendlyNPC branched away from each other on the inheritance tree, so inheriting from both of them would have conflicts, because some of the same functions have been implemented in different ways on the two of them.
1) Is there a better way to order these classes to avoid these conflicts? Having three subclasses;
Neutral; from each type of NPC;
Programmer; would amount to a huge number of classes.
I would share specific implementation details, but I am writing the game slowly, piece by piece, and so I haven't implemented past
2) Is there a place where I can learn these programming paradigms? I am already trying to take advantage of some good design patterns, like MVC architecture and Mediator objects. The whole point of this project is to write something in good style.
It is difficult to tell what should become a subclass and what should become a state (i.e. Friendly boolean v. Friendly class). Having many states slows down code with
if statements and makes classes long and unwieldy. On the other hand, having a class for everything isn't practical. 3) Are there good rules of thumb or resources to learn more about this?
4) Finally, where does templating come in to this? How should I coordinate templates into my class structure? I have never actually taken advantage of templating honestly, but I hear that it increases modularity, which means good code.