/**
 * A game character - persons who can interact with each other and with game items.
 * Warrior and Guard extend this class.
 * A character is considered a Thing in the game.
 */
public abstract class Character extends Thing{
  
  /**
   * Get the current room this character is in.
   *
   * @return the current room
   */
  public abstract Room getLocation();
  
  /**
   * Get the name of this character.
   * 
   * @return name
   */
  public abstract String getName();
  
  /**
   * Get the strength level of this character.
   * 
   * @return strength
   */
  public abstract int getStrength();
  
  /**
   * Reduce the strength level by the specified amount
   * 
   * @param i strength level to be reduced by
   */
  public abstract void decreaseStrength(int i);
  
  /**
   * Increase the strength level by the specified amount
   * 
   * @param i strength level to be increased by
   */
  public abstract void increaseStrength(int i);
  
  /**
   * Try to use the <code>i</code>th item of a given type in the room.  
   * If a potion or beer is used, the character actually drinks it and receives the effect of the drink.
   * 
   * @param type item type
   * @param i the ordinal position of the item
   * @return a use report
   * 
   */
  public abstract Outcome useRoomItem(ThingType type, int i);
}