Example #1
0
        private static void GetEnPassantPositions(ref List <ChessBoard> result, ChessBoard board, Square currentposition)
        {
            ChessBoard tempboard      = board.ShallowCopy();
            bool       CheckEnPassant = DefaultInfo.EnPassantPossibleCapture.rank == currentposition.rank - 1 && (DefaultInfo.EnPassantPossibleCapture.file == (char)(currentposition.file + 1) || DefaultInfo.EnPassantPossibleCapture.file == (char)(currentposition.file - 1));

            if (CheckEnPassant)
            {
                tempboard = Piece.PerformMove(board, currentposition, DefaultInfo.EnPassantPossibleCapture);
                tempboard[DefaultInfo.EnPassantPossibleCapture.file, DefaultInfo.EnPassantPossibleCapture.rank + 1] = 0;
                result = Piece.AddNewPosition(result, tempboard, false);
            }
        }
Example #2
0
        public static List <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank)
        {
            List <ChessBoard> result = new List <ChessBoard>();
            ChessBoard        tempboard;
            List <Square>     moves   = new List <Square>();
            Square            current = new Square(file, rank);

            WhitePiece.GetDiagonalDestinations(board, ref moves, current, 1, 1);
            WhitePiece.GetDiagonalDestinations(board, ref moves, current, 1, -1);
            WhitePiece.GetDiagonalDestinations(board, ref moves, current, -1, 1);
            WhitePiece.GetDiagonalDestinations(board, ref moves, current, -1, -1);
            foreach (Square move in moves)
            {
                tempboard = Piece.PerformMove(board, current, move);
                result    = Piece.AddNewPosition(result, tempboard, true);
            }
            return(result);
        }
Example #3
0
        public static List <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank)
        {
            List <ChessBoard> result = new List <ChessBoard>();
            ChessBoard        tempboard;
            Square            current = new Square(file, rank);

            Square[] moves = Piece.GetSimpleKingMoveDestinations(current);
            foreach (Square move in moves)
            {
                if (move.IsOK() && board[move] >= 0)
                {
                    tempboard = Piece.PerformMove(board, current, move);
                    result    = Piece.AddNewPosition(result, tempboard, false);
                }
            }
            GetQueenCastlingPosition(board, file, rank, result, current);
            GetKingCastlingPosition(board, file, rank, result, current);
            return(result);
        }
Example #4
0
        public static List <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank)
        {
            List <ChessBoard> result = new List <ChessBoard>();
            ChessBoard        tempboard;
            List <Square>     moves   = new List <Square>();
            Square            current = new Square(file, rank);

            WhitePiece.GetVerticalUpDestinations(board, moves, current);
            WhitePiece.GetVerticalDownDestinations(board, moves, current);
            WhitePiece.GetHorizontalLeftDestinations(board, moves, current);
            WhitePiece.GetHorizontalRightDestinations(board, moves, current);
            Console.WriteLine(moves.Count);
            foreach (Square move in moves)
            {
                tempboard = Piece.PerformMove(board, current, move);
                result    = Piece.AddNewPosition(result, tempboard, true);
            }
            Console.WriteLine(result.Count);
            return(result);
        }
Example #5
0
        public static List <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank)
        {
            List <ChessBoard> result  = new List <ChessBoard>();
            Square            current = new Square(file, rank);

            Square[]   moves = Piece.GetSimplekNightMoveDestinations(current);
            ChessBoard tempboard;

            foreach (Square move in moves)
            {
                if (move.IsOK())
                {
                    if (board[move] <= 0)
                    {
                        tempboard = Piece.PerformMove(board, current, move);
                        result    = Piece.AddNewPosition(result, tempboard, true);
                    }
                }
            }
            return(result);
        }
Example #6
0
        public static List <ChessBoard> GetPossiblePositions(ChessBoard board, char file, sbyte rank)
        {
            List <ChessBoard> result          = new List <ChessBoard>();
            ChessBoard        tempboard       = board.ShallowCopy();
            Square            currentposition = new Square(file, rank);

            if (DefaultInfo.WhiteEnPassantEndangered)
            {
                GetEnPassantPositions(ref result, board, currentposition);
            }
            if (rank == 7 && board[file, rank - 1] == 0 && board[file, rank - 2] == 0)
            {
                tempboard = Piece.PerformMove(board, currentposition, new Square(file, rank - 2));
                result    = Piece.AddNewPosition(result, tempboard, false);
            }
            if (board[file, rank - 1] == 0)
            {
                tempboard = Piece.PerformMove(board, currentposition, new Square(file, rank - 1));
                result    = Piece.AddNewPosition(result, tempboard, false);
            }
            if (file >= 'a' && file <= 'g' && board[(char)(file + 1), rank - 1] > 0)
            {
                tempboard = Piece.PerformMove(board, currentposition, new Square((char)(file + 1), rank - 1));
                result    = Piece.AddNewPosition(result, tempboard, false);
            }
            if (file >= 'b' && file <= 'h' && board[(char)(file - 1), rank - 1] > 0)
            {
                tempboard = Piece.PerformMove(board, currentposition, new Square((char)(file - 1), rank - 1));
                result    = Piece.AddNewPosition(result, tempboard, false);
            }
            if (rank > 2 || result.Count == 0)
            {
                return(result);
            }
            else
            {
                return(GetPawnPromotionPositions(file, result, tempboard));
            }
        }