private bool availableTokenPlacementDiagonalFromUpToDownFromRightToLeft(byte i_ChosenRow, byte i_ChosenColumn)
    {
        bool availableTokenPlacement = false;

        if (i_ChosenRow < GameBoardSize - 2 && i_ChosenColumn > 1)
        {
            eGameToken oneSquareLeftDown = this.GameStatus[i_ChosenRow + 1, i_ChosenColumn - 1];
            if (oneSquareLeftDown == this.getOppositeCurrentPlayerToken())
            {
                int i = i_ChosenRow + 1;
                int j = i_ChosenColumn - 1;
                while ((i < GameBoardSize) && (j >= 0) && (this.GameStatus[i, j] != eGameToken.Empty))
                {
                    if (this.GameStatus[i, j] == this.GetCurrentPlayerToken())
                    {
                        availableTokenPlacement = true;
                    }

                    ++i;
                    --j;
                }
            }
        }

        return(availableTokenPlacement);
    }
    private bool availableTokenPlacementDiagonalFromDownToUpFromRightToLeft(byte i_ChosenRow, byte i_ChosenColumn)
    {
        bool availableTokenPlacement = false;

        if (i_ChosenRow > 1 && i_ChosenColumn > 1)
        {
            eGameToken oneSquareLeftUp = this.GameStatus[i_ChosenRow - 1, i_ChosenColumn - 1];
            if (oneSquareLeftUp == this.getOppositeCurrentPlayerToken())
            {
                int i = i_ChosenRow - 1;
                int j = i_ChosenColumn - 1;
                while ((i >= 0) && (j >= 0) && (this.GameStatus[i, j] != eGameToken.Empty))
                {
                    if (this.GameStatus[i, j] == this.GetCurrentPlayerToken())
                    {
                        availableTokenPlacement = true;
                    }

                    --i;
                    --j;
                }
            }
        }

        return(availableTokenPlacement);
    }
    internal eGameToken GetCurrentPlayerToken()
    {
        eGameToken currentToken = eGameToken.BlackToken;

        if (m_Turn == eCurrentTurn.WhiteOpponentTurn)
        {
            currentToken = eGameToken.WhiteToken;
        }

        return(currentToken);
    }
    internal bool IsComputerTurn()
    {
        bool isComputerTurn = false;

        if (m_CompOpponent != null)
        {
            eGameToken compToken = m_CompOpponent.ComputerToken;
            if (compToken == GetCurrentPlayerToken())
            {
                isComputerTurn = true;
            }
        }

        return(isComputerTurn);
    }
    internal byte GetPlayerScore(eGameToken i_Token)
    {
        byte playerScore = 0;

        if (i_Token == eGameToken.WhiteToken)
        {
            playerScore = m_humanFirstOpponent.PlayerScore;
        }
        else
        {
            if (m_CompOpponent == null)
            {
                playerScore = m_humanSecondOpponent.PlayerScore;
            }
            else
            {
                playerScore = m_CompOpponent.PlayerScore;
            }
        }

        return(playerScore);
    }
    internal bool IsLegalMovement(byte i_ChosenRow, byte i_ChosenColumn)
    {
        bool       isBlockerTokenExist = false;
        eGameToken currentSquare       = GameStatus[i_ChosenRow, i_ChosenColumn];

        if (currentSquare == eGameToken.Empty)
        {
            if (availableTokenPlacementFromDownToUp(i_ChosenRow, i_ChosenColumn) ||
                availableTokenPlacementFromUpToDown(i_ChosenRow, i_ChosenColumn) ||
                availableTokenPlacementFromLeftToRight(i_ChosenRow, i_ChosenColumn) ||
                availableTokenPlacementFromRightToLeft(i_ChosenRow, i_ChosenColumn) ||
                availableTokenPlacementDiagonalFromDownToUpFromLeftToRight(i_ChosenRow, i_ChosenColumn) ||
                availableTokenPlacementDiagonalFromDownToUpFromRightToLeft(i_ChosenRow, i_ChosenColumn) ||
                availableTokenPlacementDiagonalFromUpToDownFromLeftToRight(i_ChosenRow, i_ChosenColumn) ||
                availableTokenPlacementDiagonalFromUpToDownFromRightToLeft(i_ChosenRow, i_ChosenColumn))
            {
                isBlockerTokenExist = true;
            }
        }

        return(isBlockerTokenExist);
    }
    private bool availableTokenPlacementFromRightToLeft(byte i_ChosenRow, byte i_ChosenColumn)
    {
        bool availablePlaceFromDown = false;

        if (i_ChosenColumn > 1)
        {
            eGameToken oneSquareLeft = this.GameStatus[i_ChosenRow, i_ChosenColumn - 1];
            if (oneSquareLeft == this.getOppositeCurrentPlayerToken())
            {
                int i = i_ChosenColumn - 1;
                while ((i >= 0) && (this.GameStatus[i_ChosenRow, i] != eGameToken.Empty))
                {
                    if (this.GameStatus[i_ChosenRow, i] == this.GetCurrentPlayerToken())
                    {
                        availablePlaceFromDown = true;
                    }

                    --i;
                }
            }
        }

        return(availablePlaceFromDown);
    }
    private bool availableTokenPlacementFromLeftToRight(byte i_ChosenRow, byte i_ChosenColumn)
    {
        bool availablePlaceFromDown = false;

        if (i_ChosenColumn < GameBoardSize - 2)
        {
            eGameToken oneSquareRight = this.GameStatus[i_ChosenRow, i_ChosenColumn + 1];
            if (oneSquareRight == this.getOppositeCurrentPlayerToken())
            {
                int i = i_ChosenColumn + 1;
                while ((i < GameBoardSize) && (this.GameStatus[i_ChosenRow, i] != eGameToken.Empty))
                {
                    if (this.GameStatus[i_ChosenRow, i] == this.GetCurrentPlayerToken())
                    {
                        availablePlaceFromDown = true;
                    }

                    ++i;
                }
            }
        }

        return(availablePlaceFromDown);
    }
    private eGameToken getOppositeCurrentPlayerToken()
    {
        eGameToken currentToken = this.GetCurrentPlayerToken();

        return((currentToken == eGameToken.BlackToken) ? eGameToken.WhiteToken : eGameToken.BlackToken);
    }