| 
	
		
		
		
		 
		  
			
			This is basically just building off of what you wrote.. 
 
 
Windows Stuff 
It's good to have a class that just creates and destroys the window for you. 
 
DirectX 
Graphics, input, and sounds really should be split up.  They're all basically independent of each other, so there's no reason they should be together. 
 
Graphics 
Initialization and global state changes. 
 
Input 
Initialization.  Getting input and knowing where to hand it off to. 
 
Sound 
Initialization of sound stuff.  Also possibly manages music and sound effects. 
 
Sound effects 
Loads and plays sound effects. 
 
Music 
Loads and plays music. 
 
Tileset 
Loads tilesets, and manages drawing tiles (or at least handing out tiles for drawing).  Probably will also hold collision data for the tiles. 
 
Sprites 
Loads and draws a single sprite. 
 
Particle 
Just one particle in a particle system 
 
Particle System 
Generates one set of particles 
 
Particle Manager 
Handles all the particle systems 
 
Physics 
Hmm this is hard to put anywhere.  It'll probably be the physical object in the object hierarchy. 
 
Objects 
There'll probably be a whole hierarchy of these things. 
 
Level 
For the actual level information. 
 
Game 
For game logic stuff.  Might also be used to hold everything else, like the level, tileset, managers, etc. 
 
Program 
Basically holds the game, and uses the windows stuff.  It should be the only thing in WinMain, I think.  (I haven't actually used a component like this in a game yet, but I think it's something that would work well.) 
 
Globals 
You don't want to use real global variables.   I've found that it works much better to have a class that contains all the globals, and have only one instance of that clase be the only global variable.  The way you can ensure everything is constructed and destructed in a safe order. 
 
Time 
Just holds and can be queried for the game time and real time. 
 
AI 
Might also end up with a hierarchy of AI classes. 
 
Settings 
I generally like the idea of not hard coding anything.  Instead, stuff like object statistics or whatever should be stored in external files.  I've called these 'settings' before, but that might not be the best name because it's more just any data.  Basically it's just been a collection of numbers and strings. 
 
HUD 
Something to draw the heads up display stuff. 
 
Menu Stuff 
This can be a lot of stuff.  Depends on how much you want to do with the menu system. 
 
Resource Managers 
All those sprites and sounds and stuff need to go somewhere.  It's best to have objects just reference them from some sort of bin or manager.  One of the imortant things the resource manager does is makes sure the game doesn't crash by giving something a NULL resource, or deleting a resource when it's still in use.  Loading and deleting resources would go through these things. 
 
Logger 
It's very useful to have a global class that can be used to log debug information to.  Basically it just writes to a file, or it could use a windows console. 
 
Quadtree 
Most likely we'll want this to optimize stuff like collision.  Basically it's just splitting up the world so we only have to check a small set of objects rather than everything at a time. 
 
Object Manager 
All those objects/entities/unknowns have to be stored and updated somewhere.  Best to keep them all in one place. 
 
Networking 
Networking stuff really needs to be considered early on because it's a lot harder to properly insert it into something that's already half made.  Generally it seems to be good to always have stuff going through the networking module, and if the game is single player, it just loops back on itself.  This is a pretty core component. 
 
There's also stuff like the networking packets and the Winsock wrapper. 
 
Player 
Info on the player.  Important for multiplayer. 
 
Player Manager 
Manages the multiple players.  (Wow!) 
 
 
Ok, that's all I have for now.  Whoa, that's a lot of stuff.  Didn't realize that when I was writing it. :P
		 
		
		
		
		
		
		
			
				__________________ 
				<div style="float: right; width: 100px; height: 70px; margin: 5px 15px;"><img src="http://madskills.org/monolith/idleserver.gif" style="width: 98px; height: 65px;"><img src="http://madskills.org/monolith/theserver.gif" style="width: 98px; height: 65px; position: relative; top: -65px;"></div><div style="margin: 0 3em; font-size: 80%; font-style: italic;">Love is patient, love is kind. It does not envy, it does not boast, it is not proud.  It is not rude, it is not self-seeking, it is not easily angered, it keeps no record of wrongs.  Love does not delight in evil but rejoices with the truth.  It always protects, always trusts, always hopes, always perseveres.</div><div style="text-align: right; text-size: 80%;">1 Corinthians 13:4-7</div>
			 
		
		
		
		
	 |