package com.editev.chess.piece;
import com.editev.chess.Game;
import com.editev.chess.Board;
import com.editev.chess.Move;
/** Once a Rook has moved, it may no longer castle, but otherwise has no specific rules.
*
* @see See the source here.
*/
public class Rook extends Piece {
/** If you move a rook, you can no longer castle with that rook -- the Game must reflect this. */
public void applyMoveToState( Move move, Game game ) {
super.applyMoveToState( move, game );
if (move.source.column == 0) game.moveRook( game.getPieceIndex( move.target ), false ); // mark that Queen's rook as moved
else if (move.source.column == 7) game.moveRook( game.getPieceIndex( move.target ), true ); // mark that King's rook as moved
}
/** An array of all the possible Rook moves as byte offsets. */
public static final byte[][] MOVES = {
{0, -7},
{0, -6},
{0, -5},
{0, -4},
{0, -3},
{0, -2},
{0, -1},
{-7, 0}, {-6, 0}, {-5, 0}, {-4, 0}, {-3, 0}, {-2, 0}, {-1, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}, {7, 0},
{0, 1},
{0, 2},
{0, 3},
{0, 4},
{0, 5},
{0, 6},
{0, 7},
};
/** This class is a singleton, so the constructor is private. */
private Rook() { super( MOVES ); }
/** The unique/singleton instantiation of Rook. */
public static final Rook PIECE = new Rook();
}