
/**
  *This specifies the Model portion of the Model/View architecture
  *It will be a facade class and pass most actions on to the current match
  *@author John D. McGregor
  *@version 1.0
  */
public abstract class ArcadeGame extends Object{
	protected ArcadeGameMatch _match;
	protected String _name;

	/**
  	  *At this level the game's state is only its name
  	  */
	public ArcadeGame(String name){
		_name = name;
	}

	/**
  	  *Returns the current match for the game
  	  */
	public ArcadeGameMatch getMatch(){
		return _match;
	}

	/**
	  *Specifies a Factory method that produces the appropriate PlayingField
	  *Extenders will provide specific actions
	  *@param aGame The game for which the PlayingField is intended.
	  */
	public abstract PlayingField newPlayingField(ArcadeGameMatch aGame);
 
	/**
	  *Abstract specification of method to inform game that a loss has occurred.
	  *Extenders will provide specific actions
	  */
      public abstract void lost();

	/**
	  *Allows user to pause the game
	  *post: The game is in the paused state 
	  */
	public void pause(){
		_match.pause();
	}

	/**
	  *Allows user to resume a paused game
	  *post: The game is in the running state
	  */
	public void resume(){
		_match.resume();
	}

	/**
	  *Abstract specification for method to start the operation of a game
	  *Extenders will provide specific actions
	  *post: The game is in the running state
	  */
	public abstract void start();
  

};
