public double Compare(PickByPriorityDescription leftPurchaseOrder, PickByPriorityDescription rightPurchaseOrder) { //System.Console.WriteLine("Comparing: "); //left.Write(System.Console.Out); //System.Console.WriteLine(""); //right.Write(System.Console.Out); //System.Console.WriteLine(""); PlayerAction leftPlayer = new PlayerAction("Player1", leftPurchaseOrder.ToCardPicker()); PlayerAction rightPlayer = new PlayerAction("Player2", rightPurchaseOrder.ToCardPicker()); int numberOfGames = 33; GameConfigBuilder builder = new GameConfigBuilder(); PlayerAction.SetKingdomCards(builder, leftPlayer, rightPlayer); var gameConfig = builder.ToGameConfig(); var rotateWhoStartsFirst = true; var strategyComparison = new Dominion.Data.StrategyComparison(leftPlayer, rightPlayer, gameConfig, rotateWhoStartsFirst, numberOfGames); var results = strategyComparison.ComparePlayers( gameIndex => null, gameIndex => null, shouldParallel: false, gatherStats: false, createGameLog: null); return(results.WinDifference); }
public double GetScoreVs(PlayerAction action, bool showReport = false) { var player1Action = this.ToPlayerAction(); var player2Action = action; GameConfigBuilder builder = new GameConfigBuilder(); builder.SetKingdomCards(player1Action, player1Action); var gameConfig = builder.ToGameConfig(); var rotateWhoStartsFirst = true; var numberOfGames = 100; var strategyComparison = new Dominion.Data.StrategyComparison(player1Action, player2Action, gameConfig, rotateWhoStartsFirst, numberOfGames); var results = strategyComparison.ComparePlayers( gameIndex => null, gameIndex => null, shouldParallel: true, gatherStats: false, createGameLog: null); return results.WinDifference; }
public static StrategyComparisonResults Compare( PlayerAction player1, PlayerAction player2, int numberOfGames = 100, bool rotateWhoStartsFirst = false, bool shouldParalell = false, bool gatherStats = true) { GameConfigBuilder builder = new GameConfigBuilder(); builder.SetKingdomCards(player1, player2); var gameConfig = builder.ToGameConfig(); var strategyComparison = new Dominion.Data.StrategyComparison(player1, player2, gameConfig, rotateWhoStartsFirst, numberOfGames); var results = strategyComparison.ComparePlayers( gameIndex => null, gameIndex => null, shouldParallel: shouldParalell, gatherStats: gatherStats, createGameLog: null); return(results); }
public double GetScoreVs(PlayerAction action, bool showReport = false) { var player1Action = this.ToPlayerAction(); var player2Action = action; GameConfigBuilder builder = new GameConfigBuilder(); PlayerAction.SetKingdomCards(builder, player1Action, player1Action); var gameConfig = builder.ToGameConfig(); var rotateWhoStartsFirst = true; var numberOfGames = 100; var strategyComparison = new Dominion.Data.StrategyComparison(player1Action, player2Action, gameConfig, rotateWhoStartsFirst, numberOfGames); var results = strategyComparison.ComparePlayers( gameIndex => null, gameIndex => null, shouldParallel: true, gatherStats: false, createGameLog: null); return(results.WinDifference); }
public void SimulateGameButtonClick() { if (!CanSimulateStrategies()) { return; } this.StrategyResultsAvailable.Value = false; var uiScheduler = System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext(); Dominion.Strategy.Description.StrategyDescription player1Descr = this.player1Strategy.ConvertToDominionStrategy(); Dominion.Strategy.Description.StrategyDescription player2Descr = this.player2Strategy.ConvertToDominionStrategy(); Dominion.GameConfig gameConfig = this.GetGameConfig(); System.Diagnostics.Debug.WriteLine("Player 1: "); System.Diagnostics.Debug.WriteLine(player1Descr.ToString()); System.Diagnostics.Debug.WriteLine("Player 2: "); System.Diagnostics.Debug.WriteLine(player2Descr.ToString()); System.Threading.Tasks.Task <StrategyUIResults> .Factory.StartNew(() => { string player1nameAppend, player2nameAppend; GetStrategyNames(player1Descr, player2Descr, out player1nameAppend, out player2nameAppend); string player1Name = "Player 1 " + (!string.IsNullOrEmpty(player1nameAppend) ? "(" + player1nameAppend + ")" : ""); string player2Name = "Player 2 " + (!string.IsNullOrEmpty(player2nameAppend) ? "(" + player2nameAppend + ")" : ""); var playerActions = new Dominion.Strategy.PlayerAction[] { player1Descr.ToPlayerAction(player1Name), player2Descr.ToPlayerAction(player2Name) }; bool rotateWhoStartsFirst = true; int numberOfGames = 1000; var strategyComparison = new Dominion.Data.StrategyComparison(playerActions, gameConfig, rotateWhoStartsFirst, numberOfGames); Dominion.Data.StrategyComparisonResults strategyComparisonResults = strategyComparison.ComparePlayers(randomSeed: MainPage.random.Next(), shouldParallel: false); return(new StrategyUIResults() { strategyComparisonResults = strategyComparisonResults, Player1Name = player1Name, Player2Name = player2Name, Player1WinPercent = strategyComparisonResults.PlayerWinPercent(0), Player2WinPercent = strategyComparisonResults.PlayerWinPercent(1), TiePercent = strategyComparisonResults.TiePercent, }); }).ContinueWith(async(continuation) => { var results = (StrategyUIResults)continuation.Result; this.strategyReportDirty = true; this.strategyComparisonResults = results.strategyComparisonResults; this.Player1Name.Value = results.Player1Name; this.Player2Name.Value = results.Player2Name; this.Player1WinPercent.Value = results.Player1WinPercent; this.Player2WinPercent.Value = results.Player2WinPercent; this.TiePercent.Value = results.TiePercent; this.StrategyResultsAvailable.Value = true; }, uiScheduler); }
private void SimulateGameButtonClick(object sender, RoutedEventArgs e) { if (!CanSimulateStrategies()) { return; } var uiScheduler = System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext(); Dominion.Strategy.Description.StrategyDescription player1Descr = this.appDataContext.player1Strategy.ConvertToDominionStrategy(); Dominion.Strategy.Description.StrategyDescription player2Descr = this.appDataContext.player2Strategy.ConvertToDominionStrategy(); System.Threading.Tasks.Task <StrategyUIResults> .Factory.StartNew(() => { string player1nameAppend, player2nameAppend; GetStrategyNames(player1Descr, player2Descr, out player1nameAppend, out player2nameAppend); string player1Name = "Player 1: " + player1nameAppend; string player2Name = "Player 2: " + player2nameAppend; var playerActions = new Dominion.Strategy.PlayerAction[] { player1Descr.ToPlayerAction(player1Name), player2Descr.ToPlayerAction(player2Name) }; var builder = new Dominion.GameConfigBuilder(); Dominion.Strategy.PlayerAction.SetKingdomCards(builder, playerActions[0], playerActions[1]); builder.useColonyAndPlatinum = false; builder.useShelters = false; builder.CardSplit = Dominion.StartingCardSplit.Split43; bool rotateWhoStartsFirst = true; int numberOfGames = 1000; Dominion.GameConfig gameConfig = builder.ToGameConfig(); var strategyComparison = new Dominion.Data.StrategyComparison(playerActions, gameConfig, rotateWhoStartsFirst, numberOfGames); Dominion.Data.StrategyComparisonResults strategyComparisonResults = strategyComparison.ComparePlayers(); var htmlGenerator = new HtmlRenderer.HtmlReportGenerator(strategyComparisonResults); var stringWriter = new System.IO.StringWriter(); var textWriter = new Dominion.IndentedTextWriter(stringWriter); htmlGenerator.CreateHtmlReport(textWriter); stringWriter.Flush(); string resultHtml = stringWriter.GetStringBuilder().ToString(); return(new StrategyUIResults() { StrategyReport = resultHtml, Player1Name = player1Name, Player2Name = player2Name, Player1WinPercent = strategyComparisonResults.PlayerWinPercent(0), Player2WinPercent = strategyComparisonResults.PlayerWinPercent(1), TiePercent = strategyComparisonResults.TiePercent, }); }).ContinueWith(async(continuation) => { var results = (StrategyUIResults )continuation.Result; this.appDataContext.StrategyReport.Value = results.StrategyReport; this.appDataContext.Player1Name.Value = results.Player1Name; this.appDataContext.Player2Name.Value = results.Player2Name; this.appDataContext.Player1WinPercent.Value = results.Player1WinPercent; this.appDataContext.Player2WinPercent.Value = results.Player2WinPercent; this.appDataContext.TiePercent.Value = results.TiePercent; this.appDataContext.StrategyResultsAvailable.Value = true; }, uiScheduler); }
public static StrategyComparisonResults Compare( PlayerAction player1, PlayerAction player2, int numberOfGames = 100, bool rotateWhoStartsFirst = false, bool shouldParalell = false, bool gatherStats = true) { GameConfigBuilder builder = new GameConfigBuilder(); builder.SetKingdomCards(player1, player2); var gameConfig = builder.ToGameConfig(); var strategyComparison = new Dominion.Data.StrategyComparison(player1, player2, gameConfig, rotateWhoStartsFirst, numberOfGames); var results = strategyComparison.ComparePlayers( gameIndex => null, gameIndex => null, shouldParallel: shouldParalell, gatherStats: gatherStats, createGameLog: null); return results; }