Example #1
0
        /// <summary>
        /// Returns the current status of this game.
        /// </summary>
        /// <returns>The current "GameStatus".</returns>
        public GameStatus GetGameStatus()
        {
            if (m_possibleMoves.Count == 0)
            {
                if (m_board.ColorToPlayIsCheck())
                {
                    switch (m_board.State.ColorToPlay)
                    {
                    case PieceColor.White:
                        return(GameStatus.BlackCheckmateVictory);

                    case PieceColor.Black:
                        return(GameStatus.WhiteCheckmateVictory);
                    }
                }

                return(GameStatus.StalemateDraw);
            }

            if (IsDrawInsufficientPieces())
            {
                return(GameStatus.InsufficientPiecesDraw);
            }

            if (IsDrawRepetitionOfMoves())
            {
                return(GameStatus.MoveRepetitionDraw);
            }

            if (IsDrawFiftyMoveRule())
            {
                return(GameStatus.FiftyMovesDraw);
            }

            if (m_clock.WhiteTimeOut)
            {
                return(GameStatus.BlackTimeVictory);
            }

            if (m_clock.BlackTimeOut)
            {
                return(GameStatus.WhiteTimeVictory);
            }

            if (m_board.ColorToPlayIsCheck())
            {
                switch (m_board.State.ColorToPlay)
                {
                case PieceColor.White:
                    return(GameStatus.WhiteIsCheck);

                case PieceColor.Black:
                    return(GameStatus.BlackIsCheck);
                }
            }

            return(GameStatus.Normal);
        }