Beispiel #1
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);
        }
Beispiel #2
0
        public static List <Square> GetPossibleBlackAttackersToSquare(ChessBoard board, Square goalsquare)
        {
            List <Square> result = new List <Square>();
            char          file = goalsquare.file; int rank = goalsquare.rank;

            //check for Pawn
            if (file >= 'a' && file <= 'g' && rank <= 7 && board[(char)(file + 1), rank + 1] == (sbyte)DefaultPieces.BlackPawn)
            {
                result.Add(new Square((char)(file + 1), rank + 1));
            }
            if (file >= 'b' && file <= 'h' && rank <= 7 && board[(char)(file - 1), rank + 1] == (sbyte)DefaultPieces.BlackPawn)
            {
                result.Add(new Square((char)(file - 1), rank + 1));
            }
            Square[] moves_array = Piece.GetSimplekNightMoveDestinations(goalsquare);
            foreach (Square move in moves_array)
            {
                if (move.IsOK() && board[move] == (sbyte)DefaultPieces.BlackkNight)
                {
                    result.Add(move);
                }
            }
            GetVerticalUpBlackAttackers(board, result, file, rank);
            GetVerticalDownBlackAttackers(board, result, file, rank);
            GetHorizontalRightBlackAttacker(board, result, file, rank);
            GetHorizontalLeftBlackAttackers(board, result, file, rank);
            GetDiagonalBlackAttackers(board, result, goalsquare, 1, 1);
            GetDiagonalBlackAttackers(board, result, goalsquare, 1, -1);
            GetDiagonalBlackAttackers(board, result, goalsquare, -1, 1);
            GetDiagonalBlackAttackers(board, result, goalsquare, -1, -1);
            Square[] moves = Piece.GetSimpleKingMoveDestinations(goalsquare);
            foreach (Square move in moves)
            {
                if (move.IsOK() && board[move] == (sbyte)DefaultPieces.BlackKing)
                {
                    result.Add(move); break;
                }
            }
            return(result);
        }