/*
* File: AdvCommand.java
* ---------------------
* This file defines the general superclass of all commands in the
* Adventure game along with a set of individual commands that
* implement the built-in functions.
*/


/* Abstract class: AdvCommand */
/**
* This class is the general superclass for all commands in the
* Adventure game.  Every command has an execute method, which is
* called by the game when that command is invoked.  This method
* will be defined individually in each of the subclasses.
*/

public abstract class AdvCommand {

/** The predefined entry for the QUIT command */
       public static final AdvCommand QUIT = new QuitCommand();

/** The predefined entry for the QUIT command */
       public static final AdvCommand HELP = new HelpCommand();

/** The predefined entry for the LOOK command */
       public static final AdvCommand LOOK = new LookCommand();

/** The predefined entry for the INVENTORY command */
       public static final AdvCommand INVENTORY = new InventoryCommand();

/** The predefined entry for the TAKE command */
       public static final AdvCommand TAKE = new TakeCommand();

/** The predefined entry for the DROP command */
       public static final AdvCommand DROP = new DropCommand();

/* Abstract method: execute(game, obj) */
/**
* Executes this command in the context of the specified adventure game.
* The execute method also takes a parameter obj, which specifies the
* object being used in the command.  This value is typically null, but
* will be the appropriate object in the case of the TAKE and DROP
* commands.
*
* @usage command.execute(game, obj);
* @param adv The instance of the Adventure class that represents the game
* @param obj The direct object (if any)
*/
       public abstract void execute(Adventure game, AdvObject obj);

}

/* Private class: QuitCommand */
/**
* This class implements the QUIT command.
*/

class QuitCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeQuitCommand();
       }
}

class HelpCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeHelpCommand();
       }
}
/* Private class: LookCommand */
/**
* This class implements the LOOK command.
*/

class LookCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeLookCommand();
       }
}

/* Private class: InventoryCommand */
/**
* This class implements the INVENTORY command.
*/

class InventoryCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeInventoryCommand();
       }
}

/* Private class: TakeCommand */
/**
* This class implements the TAKE command.
*/

class TakeCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeTakeCommand(obj);
       }
}

/* Private class: DropCommand */
/**
* This class implements the DROP command.
*/

class DropCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeDropCommand(obj);
       }
}
class ExamineCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeExamineCommand(obj);
       }
}
class LaughCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeLaughCommand();
       }
}
class CryCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeCryCommand();
       }
}
class JumpCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeJumpCommand();
       }
}
class YellCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeYellCommand();
       }
}
class DanceCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeDanceCommand();
       }
}
class SleepCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeSleepCommand();
       }
}
class BreakCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeBreakCommand(obj);
       }
}
class UnlockCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeUnlockCommand(obj);
       }
}
class WearCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeWearCommand(obj);
       }
}
class GrinCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeGrinCommand();
       }
}
class SmellCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeSmellCommand(obj);
       }
}
class FrownCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeFrownCommand();
       }
}
class SingCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeSingCommand();
       }
}
class ReadCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeReadCommand(obj);
       }
}
class UseCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeUseCommand(obj);
       }
}
class GroanCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeGroanCommand();
       }
}
class ClapCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeClapCommand();
       }
}
class SitCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeSitCommand();
       }
}
class ShrugCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeShrugCommand();
       }
}
class SighCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeSighCommand();
       }
}
class CheerCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeCheerCommand();
       }
}
class BlushCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeBlushCommand();
       }
}
class NodCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeNodCommand();
       }
}
class OpenCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeOpenCommand(obj);
       }
}
class ShudderCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeShudderCommand();
       }
}
class PonderCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executePonderCommand();
       }
}
class TalkCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeTalkCommand();
       }
}
class ListenCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeListenCommand();
       }
}
class HoldCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeHoldCommand(obj);
       }
}
class LiberateCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeLiberateCommand(obj);
       }
}
class KillCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
               game.executeKillCommand(obj);
       }
}
class CutCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
//              game.executeKillCommand(obj);
       }
}

class SwimCommand extends AdvCommand {
       public void execute(Adventure game, AdvObject obj) {
//              game.executeSwimCommand();
       }
}