private void Play(IBot bot, ITicTacToeBotAbility botAbility, ITicTacToeEnvironmentContext context)
        {
            var spaces = m_board.GetSpaces();

            var p = botAbility.PlayTurn(context);

            if (spaces[p.RowIndex, p.ColumnIndex].SpaceType == SpaceType.Empty)
            {
                m_board.SetSpace(p.RowIndex, p.ColumnIndex, context.MySpaceType);
                return;
            }
            else
            {
                var msg = String.Format(CultureInfo.CurrentUICulture, "O bot '{0}' executou uma atualização inválida. Tentativa de jogar na linha {1} e coluna {2}.", bot.Name, p.RowIndex, p.ColumnIndex);
                throw new InvalidOperationException(msg);
            }
        }
        /// <summary>
        /// Initializes the round.
        /// </summary>
        /// <param name="context">The world context.</param>
        public override void InitializeRound(IWorldContext context)
        {
            m_board = new TicTacToeBoard();
            m_noughtBotEnviromentContext = new TicTacToeEnvironmentContext();
            m_crossBotEnviromentContext  = new TicTacToeEnvironmentContext();
            m_upateResult = new TicTacToeEnvironmentUpdateResult();

            var bots = context.GetBotsWithKindOfAbility <ITicTacToeBotAbility>();

            m_crossBot        = bots[0];
            m_crossBotAbility = (ITicTacToeBotAbility)context.GetBotAbility <ITicTacToeBotAbility>(m_crossBot);
            m_crossBotEnviromentContext.Board             = m_board;
            m_crossBotEnviromentContext.MySpaceType       = SpaceType.Cross;
            m_crossBotEnviromentContext.OpponentSpaceType = SpaceType.Nought;

            m_noughtBot        = bots[1];
            m_noughtBotAbility = (ITicTacToeBotAbility)context.GetBotAbility <ITicTacToeBotAbility>(m_noughtBot);
            m_noughtBotEnviromentContext.Board             = m_board;
            m_noughtBotEnviromentContext.MySpaceType       = SpaceType.Nought;
            m_noughtBotEnviromentContext.OpponentSpaceType = SpaceType.Cross;

            m_winnerSpaces = new ITicTacToeBoardSpace[0];
        }