Esempio n. 1
0
        //[Fact]
        public void DraftLibraries()
        {
            Deck DeckEvaluator(List <Deck> candidates)
            {
                return(candidates.First());
            }

            var sets    = new[] { "M15", "M15", "M15" };
            var ratings = MediaLibrary.GetSet(sets[0]).Ratings;

            var runner = new DraftRunner();

            var results = runner.Run(
                playerCount: 8,
                sets: sets,
                ratings: ratings);

            Equal(8, results.Libraries.Count);
            True(results.Libraries.All(x => x.Count == 45));

            PrintLibraries(results.Libraries);

            var decks = new List <Deck>();

            foreach (var library in results.Libraries)
            {
                var deck = DeckBuilder.BuildDeck(library, ratings, DeckEvaluator);
                decks.Add(deck);
            }

            PrintDecks(decks);
        }
Esempio n. 2
0
        public override bool Execute(Arguments arguments)
        {
            if (arguments.Count != 1 && arguments.Count != 5)
            {
                return(false);
            }

            var count = int.Parse(arguments["count"]);

            MediaLibrary.LoadSets();

            MagicSet starterSet;
            MagicSet boosterSet1;
            MagicSet boosterSet2;
            MagicSet boosterSet3;

            if (arguments.Count == 1)
            {
                starterSet  = MediaLibrary.RandomSet();
                boosterSet1 = MediaLibrary.RandomSet();
                boosterSet2 = MediaLibrary.RandomSet();
                boosterSet3 = MediaLibrary.RandomSet();
            }
            else
            {
                starterSet  = MediaLibrary.GetSet(arguments["s"]);
                boosterSet1 = MediaLibrary.GetSet(arguments["b1"]);
                boosterSet2 = MediaLibrary.GetSet(arguments["b2"]);
                boosterSet3 = MediaLibrary.GetSet(arguments["b3"]);
            }

            Console.WriteLine("Starter: {0}\nBooster1: {1}\nBooster2: {2}\nBooster3: {3}\n",
                              starterSet.Name, boosterSet1.Name, boosterSet2.Name, boosterSet3.Name);

            for (var i = 0; i < count; i++)
            {
                var starter  = starterSet.GenerateTournamentPack();
                var booster1 = boosterSet1.GenerateBoosterPack();
                var booster2 = boosterSet2.GenerateBoosterPack();
                var booster3 = boosterSet3.GenerateBoosterPack();

                var library = new List <CardInfo>();

                library.AddRange(starter);
                library.AddRange(booster1);
                library.AddRange(booster2);
                library.AddRange(booster3);

                var ratings = CardRatings.Merge(CardRatings.Merge(boosterSet2.Ratings, boosterSet3.Ratings),
                                                CardRatings.Merge(starterSet.Ratings, boosterSet1.Ratings));

                var deck = DeckBuilder.BuildDeck(library, ratings);
                deck.LimitedCode = MagicSet.GetLimitedCode(starterSet.Name,
                                                           new[] { boosterSet1.Name, boosterSet2.Name, boosterSet3.Name });

                File.WriteAllBytes(Guid.NewGuid() + ".dec", DeckFile.Write(deck));
            }

            return(true);
        }
Esempio n. 3
0
        public void BuildDecks()
        {
            for (var i = 0; i < 1; i++)
            {
                var set         = MediaLibrary.GetSet("Urza's Saga");
                var pileOfCards = set.GenerateMixedPack(boosterCount: 3, tournamentCount: 1);

                Console.WriteLine("Card list:");
                Console.WriteLine("--------------------------------");
                foreach (var card in pileOfCards)
                {
                    Console.WriteLine(card);
                }

                Console.WriteLine();

                var bestDeck = DeckBuilder.BuildDeck(pileOfCards, set.Ratings);

                Console.WriteLine("Best deck:");
                Console.WriteLine("--------------------------------");


                Console.WriteLine(bestDeck);
            }
        }
Esempio n. 4
0
        private void CreateSealedDecks()
        {
            AggregateException exception = null;

            Task.Factory.StartNew(() =>
            {
                const int minNumberOfGeneratedDecks = 5;
                var limitedCode       = MagicSet.GetLimitedCode(_p.TournamentPack, _p.BoosterPacks);
                var pregeneratedCount = NonHumanPlayers.Count() - minNumberOfGeneratedDecks;

                var pregenerated = PregeneratedDecks
                                   .GetRandom(limitedCode, pregeneratedCount);

                var nonHumanPlayers = NonHumanPlayers.ToList();
                var decksToGenerate = NonHumanPlayers.Count() - pregenerated.Count;

                for (var i = 0; i < pregenerated.Count; i++)
                {
                    nonHumanPlayers[i].Deck = pregenerated[i];
                }


                for (var count = 0; count < decksToGenerate; count++)
                {
                    var player       = nonHumanPlayers[count + pregenerated.Count];
                    var library      = GenerateLibrary();
                    var deck         = DeckBuilder.BuildDeck(library, _cardRatings);
                    deck.LimitedCode = limitedCode;
                    player.Deck      = deck;

                    // save generated deck so it can be reused in future tournaments
                    PregeneratedDecks.Write(deck);

                    Ui.Publisher.Publish(new DeckGenerationStatus
                    {
                        PercentCompleted = (int)Math.Round((100 * (count + 1.0)) / decksToGenerate)
                    });

                    if (_shouldStop)
                    {
                        break;
                    }
                }
            })
            .ContinueWith(t =>
            {
                exception = t.Exception;
                Ui.Publisher.Publish(new DeckGenerationError());
            }, TaskContinuationOptions.OnlyOnFaulted);

            _humanLibrary = GenerateLibrary();
            CreateHumanDeck();

            if (exception != null)
            {
                throw new AggregateException(exception.InnerExceptions);
            }
        }
Esempio n. 5
0
        private void CreateDraftDecks()
        {
            var draftScreen = Ui.Dialogs.DraftScreen.Create(_players);

            Ui.Shell.ChangeScreen(draftScreen);

            var runner  = new DraftRunner(draftScreen);
            var results = runner.Run(_players.Count, _p.BoosterPacks, _cardRatings);

            if (draftScreen.PlayerLeftDraft)
            {
                Stop();
                return;
            }

            var nonHumanPlayers   = NonHumanPlayers.ToList();
            var nonHumanLibraries = results.Libraries.Skip(1).ToList();

            _humanLibrary = results.Libraries[0];

            AggregateException exception = null;

            Task.Factory.StartNew(() =>
            {
                for (var count = 0; count < nonHumanPlayers.Count; count++)
                {
                    var player  = nonHumanPlayers[count];
                    var library = nonHumanLibraries[count];
                    var deck    = DeckBuilder.BuildDeck(library, _cardRatings);
                    player.Deck = deck;

                    Ui.Publisher.Publish(new DeckGenerationStatus
                    {
                        PercentCompleted = (int)Math.Round((100 * (count + 1.0)) / nonHumanPlayers.Count)
                    });

                    if (_shouldStop)
                    {
                        break;
                    }
                }
            })
            .ContinueWith(t =>
            {
                exception = t.Exception;
                Ui.Publisher.Publish(new DeckGenerationError());
            }, TaskContinuationOptions.OnlyOnFaulted);


            CreateHumanDeck();

            if (exception != null)
            {
                throw new AggregateException(exception.InnerExceptions);
            }
        }
Esempio n. 6
0
        //[Fact]
        public void BuildDeck1()
        {
            var library = new List <string> {
                "Void Snare",
                "Void Snare",
                "Void Snare",
                "Chief Engineer",
                "Welkin Tern",
                "Mind Sculpt",
                "Military Intelligence",
                "Coral Barrier",
                "Dissipate",
                "Frost Lynx",
                "Illusory Angel",
                "Wall of Frost",
                "Frost Lynx",
                "Cancel",
                "Coral Barrier",
                "Encrust",
                "Amphin Pathmage",
                "Glacial Crasher",
                "Chronostutter",
                "Dauntless River Marshal",
                "Kinsbaile Skirmisher",
                "Kinsbaile Skirmisher",
                "Kinsbaile Skirmisher",
                "Raise the Alarm",
                "Raise the Alarm",
                "Ephemeral Shields",
                "Solemn Offering",
                "Geist of the Moors",
                "Heliod's Pilgrim",
                "Midnight Guard",
                "Divine Verdict",
                "Marked by Honor",
                "Tireless Missionaries",
                "Sanctified Charge",
                "Boonweaver Giant",
                "Boonweaver Giant",
                "Foundry Street Denizen",
                "Crowd's Favor",
                "Crowd's Favor",
                "Hammerhand",
                "Torch Fiend",
                "Soul of Shandalar",
                "Reclamation Sage",
                "Shaman of Spring",
                "Typhoid Rats"
            };


            var deck = DeckBuilder.BuildDeck(
                library.Select(x => new CardInfo(x)),
                MediaLibrary.GetSet("M15").Ratings, decks => decks.First());
        }
Esempio n. 7
0
        public void DraftLibraries()
        {
            var sets    = new[] { "Urza's Saga", "Urza's Saga", "Urza's Saga" };
            var ratings = MediaLibrary.GetSet(sets[0]).Ratings;

            var runner = new DraftRunner();

            var results = runner.Run(
                playerCount: 8,
                sets: sets,
                ratings: ratings);

            Equal(8, results.Libraries.Count);
            True(results.Libraries.All(x => x.Count == 45));

            for (var i = 0; i < 8; i++)
            {
                Console.WriteLine("Player {0}", i + 1);
                Console.WriteLine("-------------------");

                var library = results.Libraries[i];

                Console.WriteLine("White cards: {0}", library.Count(x => Grove.Cards.All[x.Name].HasColor(CardColor.White)));
                Console.WriteLine("Blue cards: {0}", library.Count(x => Grove.Cards.All[x.Name].HasColor(CardColor.Blue)));
                Console.WriteLine("Black cards: {0}", library.Count(x => Grove.Cards.All[x.Name].HasColor(CardColor.Black)));
                Console.WriteLine("Red cards: {0}", library.Count(x => Grove.Cards.All[x.Name].HasColor(CardColor.Red)));
                Console.WriteLine("Green cards: {0}", library.Count(x => Grove.Cards.All[x.Name].HasColor(CardColor.Green)));
                Console.WriteLine("Colorless cards: {0}",
                                  library.Count(x => Grove.Cards.All[x.Name].HasColor(CardColor.Colorless)));

                var deck = DeckBuilder.BuildDeck(library, ratings);
                Console.WriteLine();

                Console.WriteLine("Creatures: {0}, Spells {1}",
                                  deck.Count(x => Grove.Cards.All[x.Name].Is().Creature),
                                  deck.Count(x => !Grove.Cards.All[x.Name].Is().Creature&& !Grove.Cards.All[x.Name].Is().Land));

                Console.WriteLine("-------------------");
                Console.WriteLine(deck);

                Console.WriteLine();
            }
        }