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); }