import java.util.Vector;
import java.awt.Color;
import java.util.Observable;

/**
 * The <code>Board</code> class manages all static information about
 * the board, such as size, location multipliers.
 * Instances of boards can be created to represent games, evaluate
 * plays and detect (in)valid moves.
 * @author  James Ezick
 * @version 2.0, 02/7/00
 */

class Board extends Observable {

  ///////////////////////////////////////////////
  // INSTANCE
  ///////////////////////////////////////////////

  ///////////////////////////
  // FIELDS
  ///////////////////////////

  /**
   * Pieces on this board
   *   null represents empty tile
   */
  private Piece pieces[][];

  ///////////////////////////
  // METHODS
  ///////////////////////////
  
  /**
   * Create an empty board
   */
  public Board() {
    pieces=new Piece[SIZE][];
    for(int i=0; i<SIZE; i++) 
      pieces[i]=new Piece[SIZE];
  }
  
  /**
   * Return piece (if exists) at a given row, col
   * @param int row
   * @param int col
   * @return piece at (row,col)
   */
  public Piece getPiece(int row, int col) {
    // YOUR IMPLEMENTATION HERE
  }

  /**
   * Set piece at a given row, col
   * @param int row
   * @param int col
   * @param Piece piece
   */
  public void setPiece(int row, int col, Piece p) {
    pieces[row][col]=p;
    setChanged();
    notifyObservers();
  }
    
  /**
   * Clear piece at a given row, col
   * @param int row
   * @param int col
   */
  public void clearPiece(int row, int col) {
    // YOUR IMPLEMENTATION HERE
  }
    

  ///////////////////////////////////////////////
  // STATIC
  ///////////////////////////////////////////////

  ///////////////////////////
  // FIELDS
  ///////////////////////////

  /**
   * Normal square
   */
  public static final int SIZE = 15;

  /**
   * Normal square
   */
  public static final int NRM = 0;

  /**
   * Double letter square
   */
  public static final int LX2 = 1;

  /**
   * Triple letter square
   */
  public static final int LX3 = 2;

  /**
   * Double word square
   */
  public static final int WX2 = 3;

  /**
   * Triple word square
   */
  public static final int WX3 = 4;

  /**
   * Board square colors
   */
  private static final Color COLOR[] = {
    Color.orange.darker(), Color.cyan, Color.blue, Color.pink, Color.red
  };


  /**
   * Board square values
   */
  private static final int BOARD[][] = {
    {WX3,NRM,NRM,LX2,NRM,NRM,NRM,WX3,NRM,NRM,NRM,LX2,NRM,NRM,WX3},
    {NRM,WX2,NRM,NRM,NRM,LX3,NRM,NRM,NRM,LX3,NRM,NRM,NRM,WX2,NRM},
    {NRM,NRM,WX2,NRM,NRM,NRM,LX2,NRM,LX2,NRM,NRM,NRM,WX2,NRM,NRM},
    {LX2,NRM,NRM,WX2,NRM,NRM,NRM,LX2,NRM,NRM,NRM,WX2,NRM,NRM,LX2},
    {NRM,NRM,NRM,NRM,WX2,NRM,NRM,NRM,NRM,NRM,WX2,NRM,NRM,NRM,NRM},
    {NRM,LX3,NRM,NRM,NRM,LX3,NRM,NRM,NRM,LX3,NRM,NRM,NRM,LX3,NRM},
    {NRM,NRM,LX2,NRM,NRM,NRM,LX2,NRM,LX2,NRM,NRM,NRM,LX2,NRM,NRM},
    {WX3,NRM,NRM,LX2,NRM,NRM,NRM,WX2,NRM,NRM,NRM,LX2,NRM,NRM,WX3},
    {NRM,NRM,LX2,NRM,NRM,NRM,LX2,NRM,LX2,NRM,NRM,NRM,LX2,NRM,NRM},
    {NRM,LX3,NRM,NRM,NRM,LX3,NRM,NRM,NRM,LX3,NRM,NRM,NRM,LX3,NRM},
    {NRM,NRM,NRM,NRM,WX2,NRM,NRM,NRM,NRM,NRM,WX2,NRM,NRM,NRM,NRM},
    {LX2,NRM,NRM,WX2,NRM,NRM,NRM,LX2,NRM,NRM,NRM,WX2,NRM,NRM,LX2},
    {NRM,NRM,WX2,NRM,NRM,NRM,LX2,NRM,LX2,NRM,NRM,NRM,WX2,NRM,NRM},
    {NRM,WX2,NRM,NRM,NRM,LX3,NRM,NRM,NRM,LX3,NRM,NRM,NRM,WX2,NRM},
    {WX3,NRM,NRM,LX2,NRM,NRM,NRM,WX3,NRM,NRM,NRM,LX2,NRM,NRM,WX3}
  };

  ///////////////////////////
  // METHODS
  ///////////////////////////

  public static int getSquareValue(int row, int col) {
    // YOUR IMPLEMENTATION HERE
  }

  public static Color getSquareColor(int row, int col) {
    // YOUR IMPLEMENTATION HERE
  }
}
