I separate it as DATA Classes and FUNCTION Classes.
Anything that is a physically represented object is gonna hold DATA Members like....
Code:
class ENTITY {
public:
float x,y,z; //3D vector points
float az; //for azimuth
int state; //state of the entity, helps with Frame animation reference
int AIState; //state of the entity ai frame, what's it's current thought process.
bool AIisON; //Whether we've turned on the AI or not
bool isAlive; //Is this bot alive
...........
};
NOW FUNCTION CLASS that manipulates the ENTITY DATA members
class FXN_ENTITY{
public:
bool checkAlive(ENTITY ent); //Check whether an Entity is alive
........
};
For instance, you know that A RENDER applies to many or even all of your objects why rewrite the code umpteen times or worry about whether you have duplicated a function for similar objects.
I would create a RENDER FUNCTION CLASS that holds nothing but functions to draw objects. In that RENDER class I would have several different functions according to the object I want drawn. Certain objects require a set number of DATA points so I would create a SQUARE DATA CLASS with just data members in it and then I would create a function within the RENDER to accept my SQUARE DATA POINTS (OBJ) and draw it accordingly.
EDIT: For simple shapes that are supported by DirectX or OpenGL like the Square, triangle, etc. I wouldn't create a CLASS for them but rather a TOKEN or FLAG that I can pass to a generic Render function that would draw them.