예제 #1
0
        private bool CastlingBlocked(King king, Square toSquare)
        {
            var dir = 1;
            if (king.Square.File > toSquare.File)
                dir = -1;
            var sqr = king.Square;
            var file = 0;
            var list = new List<Square>(10);
            if (dir == -1)
            {
                var s = king.GetSquare(0, -3, this);
                if (s.Piece != null)
                    return true;
                list.Add(s);
            }

            while (sqr != toSquare)
            {
                file += dir;
                sqr = king.GetSquare(0, file, this);
                if (sqr.Piece != null)
                    return true;
                list.Add(sqr);
            }

            foreach (var activePiece in OtherPlayer.Pieces)
                foreach (var square in list)
                    if (activePiece.Attacks(square, Board))
                        return true;

            return false;
        }
예제 #2
0
        private bool CastlingBlocked(King king, Square toSquare)
        {
            var dir = 1;

            if (king.Square.File > toSquare.File)
            {
                dir = -1;
            }
            var sqr  = king.Square;
            var file = 0;
            var list = new List <Square>(10);

            if (dir == -1)
            {
                var s = king.GetSquare(0, -3, this); //The b-file square.
                if (s.Piece != null)
                {
                    return(true);
                }
                list.Add(s);
            }

            //Checks the two squares closest to king. As in king side castling.
            while (sqr != toSquare)
            {
                file += dir;
                sqr   = king.GetSquare(0, file, this);
                if (sqr.Piece != null)
                {
                    return(true);
                }
                list.Add(sqr);
            }

            foreach (var activePiece in OtherPlayer.Pieces)
            {
                foreach (var square in list)
                {
                    if (activePiece.Attacks(square, Board))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }