示例#1
0
        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;
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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;
        }