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