public override IEnumerable<SingleGameResult> SimulateGames(Assembly firstAssembly, Assembly secondAssembly, int count)
        {
            // TODO: Decorate with time and memory limit
            // TODO: What if someone crashes?
            var firstPlayer = this.LoadPlayer<IPlayer>(firstAssembly);
            var secondPlayer = this.LoadPlayer<IPlayer>(secondAssembly);

            var gameResults = new List<SingleGameResult>();
            for (var i = 0; i < count; i++)
            {
                var game = new SantaseGame(firstPlayer, secondPlayer);
                var firstToPlay = i % 2 == 0 ? PlayerPosition.FirstPlayer : PlayerPosition.SecondPlayer;

                var stopwatch = Stopwatch.StartNew();
                var gameWinner = game.Start(firstToPlay);
                var elapsed = stopwatch.Elapsed;

                var report = $"First: {firstToPlay}; Result: {game.FirstPlayerTotalPoints} - {game.SecondPlayerTotalPoints} (in {game.RoundsPlayed} rounds) Time: {elapsed}";
                var gameResult =
                    new SingleGameResult(
                        gameWinner == PlayerPosition.FirstPlayer ? BattleGameWinner.First : BattleGameWinner.Second,
                        report);

                gameResults.Add(gameResult);
            }

            return gameResults;
        }
        public override IEnumerable<SingleGameResult> SimulateGames(Assembly firstAssembly, Assembly secondAssembly, int count)
        {
            count = 100;
            var firstPlayer = new TexasHoldemPlayerDirector(this.LoadPlayer<IPlayer>(firstAssembly));
            var secondPlayer = new TexasHoldemPlayerDirector(this.LoadPlayer<IPlayer>(secondAssembly));

            var gameResults = new List<SingleGameResult>();
            for (var i = 0; i < count; i++)
            {
                var game = i % 2 == 0
                               ? new TwoPlayersTexasHoldemGame(firstPlayer, secondPlayer)
                               : new TwoPlayersTexasHoldemGame(secondPlayer, firstPlayer);

                var stopwatch = Stopwatch.StartNew();
                var winner = game.Start();
                var elapsed = stopwatch.Elapsed;

                var firstToPlay = i % 2 == 0 ? "FirstPlayer" : "SecondPlayer";
                var winnerAsString = winner.Name == firstPlayer.Name ? "FirstPlayer" : "SecondPlayer";
                var report = $"First: {firstToPlay}; Winner: {winnerAsString} ({game.HandsPlayed} hands); Time: {elapsed}; Crashes: {firstPlayer.Crashes} - {secondPlayer.Crashes}; Time limits: {firstPlayer.TimeOuts} - {secondPlayer.TimeOuts}";
                if (firstPlayer.FirstCrash != null)
                {
                    report += $"; First player first exception: {firstPlayer.FirstCrash}";
                }

                if (secondPlayer.FirstCrash != null)
                {
                    report += $"; Second player first exception: {secondPlayer.FirstCrash}";
                }

                var gameResult =
                    new SingleGameResult(
                        winner.Name == firstPlayer.Name ? BattleGameWinner.First : BattleGameWinner.Second,
                        report);

                gameResults.Add(gameResult);
            }

            return gameResults;
        }