public void AddPawnMove(int fromPosition, int targetPosition, MoveFlags move, List <Move> moves) { Piece takenPiece; int row = BoardPosition.PositionRow(targetPosition); if ((move & MoveFlags.ENPASSANT) == MoveFlags.ENPASSANT) { takenPiece = Piece.PAWN; } else { takenPiece = GetPiece(targetPosition); } // check if the pawn is going to move into a promotion row. // we don't check the color because a pawn can never enter its own promotion area if (row == 0 || row == 7) { moves.Add(MoveHelper.CreateMove(targetPosition, fromPosition, takenPiece, Piece.QUEEN, move, this)); moves.Add(MoveHelper.CreateMove(targetPosition, fromPosition, takenPiece, Piece.BISHOP, move, this)); moves.Add(MoveHelper.CreateMove(targetPosition, fromPosition, takenPiece, Piece.KNIGHT, move, this)); moves.Add(MoveHelper.CreateMove(targetPosition, fromPosition, takenPiece, Piece.ROOK, move, this)); } else { moves.Add(MoveHelper.CreateMove(targetPosition, fromPosition, takenPiece, Piece.EMPTY, move, this)); } }
public Move FindMove(int from, int to) { List <Move> moves = GetMovesForPosition(from); Move targetPosition = moves.FindTargetPosition(to); if (!MoveHelper.isValidMove(targetPosition)) { throw new Exception("Move not found"); } if (!IsLegalMove(targetPosition)) { throw new Exception("Illegal move"); } return(targetPosition); }
public void AddMove(int fromPosition, int targetPosition, MoveFlags moveBits, List <Move> moves) { Piece takenPiece = GetPiece(targetPosition); moves.Add(MoveHelper.CreateMove(targetPosition, fromPosition, takenPiece, Piece.EMPTY, moveBits, this)); }