Brief Overview of Our Design: The game server is going to implement the logic of the game. The cell phone's power is limited, so this lifts some computational burden off of the phone's CPU. Additionally, this will help to prevent cheating. Further, it will abstract the logic and display from each other. The client will be as stateless as possible. Obviously, it will have to hold some information, but we are trying to keep most of the data on the server and off of the phones. Game Server: Checks rules and valid moves. Decides object locations and game logic. Synchronizes between players. Game Client: Displays game state. Retrieves command from user. Communicates commands to the game server Game Server -----------------------------> Game Client Game server sends state to client, which displays the game state to the user and requests input. Game Server <----------------------------- Game Client The game client will send its user's command back to the game server. If it is an erroneous move, then the game server will have to notify the client. Classes and Interfaces: Client Side: -Drawing Interface All objects being drawn on screen will need to be derived from this common interface -Communication Object Handles communications between the servers. Sends and receives data, probably running on a seperate thread. -Card Object Derived from drawing interface, represents a card to be drawn. Will hold value and suit. Also will have a "face down" type for face down cards Server Side: -Engine Holds the rules of the game. This will probably be an interface, and the actual game engine will be derived from this. That way, we can make the server easily extensible to add more games -Communication Object Sends and receives data from client. Probably runs on its own thread. -Card Object Unlike the Client Side, the server only needs to know its value, not how to draw this. It is not derived from any class -Deck Object Stack of cards.