package com.editev.chess; import java.util.Enumeration; import java.util.NoSuchElementException; import com.editev.util.ExceptionWrapper; /** This class represents a Square on a chess board as a column and row position. * * @see See the source here. */ public class Square // implements Cloneable { /** The row address of this square in the chess board with row=0 meaning rank 8 in algebraic chess notation. */ public byte row; /** The column address of this square in the chess board with column=0 meaning file a and column=7 meaning file h * in algebraic chess notation. */ public byte column; /** Create an empty square */ public Square() {} /** Create a square with a column and row value. */ public Square( byte column, byte row ) { this.row = row; this.column = column; } /** Create a square with an int column and row value. */ public Square( int column, int row ) { this( (byte) column, (byte) row ); } /** Is this Square inside the board? Squares are valid, Moves are legal.... * @return true if this square is within the confines of the chessboard. */ public boolean isValid() { return row >= 0 && row < 8 && column >= 0 && column < 8; } /** @return true if Object is a Square and they have the same row and column elements. */ public boolean equals( Object object ) { if (!(object instanceof Square)) return false; Square location = (Square) object; return row == location.row && column == location.column; } /** Square in chess notation. * @return Classic chess notation for this square */ public String toString() { return ((char)('a'+column))+""+(8-row); } /** Is this a white square? * @return true if this square is a white square. */ public final boolean isWhite( ) { return 0 == (1 & column+row); } /** Copy another Square into this Square. */ public void copyFrom( Square square ) { row = square.row; column = square.column; } }