The separation of Application simply means that if you were to port from os to os, your GameLogic should run with no changes necessary. If you decided to switch your graphics API, say from DirectX to OpenGl, You again need not change the GameLogic.
The Game Logic is your game, a simulation that would run on and on, and is completely self contained. The states of actors would be changed via messages that are sent from the input translator(translates button presses into commands to manipulate game state) So the logic takes the messages, applies them by the rules of the game world, and then continues to run. Every tick, or cycle through an update, it would then output the state of the world and the actors to the MasterGameView.
The MasterGameView contains all of the game-views (you'll see why there is multiple), and updates them appropriately with the GameState Info that the GameLogic sent it.
The UserGameView would then proceed to render the GameState, play audio, etc.. It would also take in the UserInput and send it to a translator (which again translates it into commands that the GameLogic can use), and send it to the GameLogic.
The AIGameView would receive the GameState and calculate its actions. It would then send it's AIInput to the translator, which would process it and send it as commands to the GameLogic.
You can create any number of UserGameViews, and AIGameViews. So each Actor could have its own AIGameView. So I Suppose the GameLogic could tell the MasterGameView to create more GameViews, or delete them as needed.
The GameViews would each have a unique ID, this ID would connect it to the actor it is running the AI for.
(I think I am following this right, but any input would be much appreciated.)
The big issue I came to is whether to process the input into game commands and apply them immediately? (Here is my take on the design)
Or should I process the Input into events, and then when updating the State of the actors, ask the Event Manager to see if there was any new commands for my actor. (Here is my take on the design)
I am leaning towards the Event Based one, simply because I only update the objects once, and I think it would be easier to add a more powerful way for the server to send input into the GameLogic.
Any help, insights, or opinions?
I've made some simpler games and released them to android, and they didn't require the complexity of what I would like to tackle now.
I am a CS student and am trying to teach myself about game programming/architecture/design, while building a nice portfolio for when I start sending intern/job applications.
My goal here isn't to build an engine per-say , It is to build an awesome game that I have in mind. This Game will require decent AI, Multiplayer, and decent but not over complicated physics & collision detection. The thing I want to do more than anything else, is make this so that it is easy to continue to add to it for as long as I want, so that even when I have game play down, I can continue to add more skills, power ups, different AI's, characters etc. I want to be able to take this small scale game, and create Huge depth and polish. This just seems like a good place to start as far as designing the architecture of it, and mapping out how the game will communicate with itself/opperate.
Before I have always used Java, OpenGL, and Android, now I am using C++, Direct X, and Windows.
Edited by rebuke, 14 September 2012 - 08:22 PM.