package game.model; /** Commands are actions that have an executable * component which will be called when the command is performed. */ public interface Command extends Action { /** Execute the action. What happens here entirely depends on * the action, e.g. an action could modify the deck and the * player's hand to draw a card, or an action could affect cards * on the table. * @param game The game state, the Command can make changes to this. * @return true if the Command was performed, false otherwise. */ boolean execute(Game game); /** The conditions under which this command can be executed. Conditions * hold the Area and Phase in which the Command must reside before it * is allowed. * @return The conditions or null if the command is always allowed. */ Condition [] conditions(); }