Beispiel #1
0
        private bool IsDrawInsufficientPieces()
        {
            bool N  = false; //white knight
            bool n  = false; //black knight
            bool B  = false; //white bishop
            bool b  = false; //black bishop
            bool BW = false; //white bishop on white square
            bool bw = false; //black bishop on white square

            foreach (Square square in m_board)
            {
                switch (m_board[square])
                {
                case Piece.WhiteKnight:
                    if (N)
                    {
                        return(false);
                    }

                    N = true;
                    break;

                case Piece.BlackKnight:
                    if (n)
                    {
                        return(false);
                    }

                    n = true;
                    break;

                case Piece.WhiteBishop:
                    if (B)
                    {
                        return(false);
                    }

                    B  = true;
                    BW = Board.IsWhiteSquare(square);
                    break;

                case Piece.BlackBishop:
                    if (b)
                    {
                        return(false);
                    }

                    b  = true;
                    bw = Board.IsWhiteSquare(square);
                    break;

                case Piece.None:
                case Piece.WhiteKing:
                case Piece.BlackKing:
                    //Nothing
                    break;

                default:
                    return(false);
                }
            }

            //only kings
            if (!B && !b && !N && !n)
            {
                return(true);
            }

            //only kings and one bishop
            if ((B && !b && !N && !n) || (!B && b && !N && !n))
            {
                return(true);
            }

            //only kings and one knight
            if ((!B && !b && N && !n) || (!B && !b && !N && n))
            {
                return(true);
            }

            //only kings and one bishop on each side, both on squares with same color
            if (B && b && !N && !n && (bw == BW))
            {
                return(true);
            }

            return(false);
        }