Пример #1
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);
        }
Пример #2
0
        private List <DraftPlayer> CreatePlayers(int playerCount, CardRatings ratings, bool includeHumanPlayer)
        {
            var aiStrategies = new Func <IDraftingStrategy>[]
            {
                () => new Forcing(ratings),
                () => new Greedy(ratings),
            };

            var players = new List <DraftPlayer>();

            for (var i = 0; i < playerCount; i++)
            {
                players.Add(new DraftPlayer
                {
                    Strategy = aiStrategies[RandomEx.Next(10) >= 3 ? 0 : 1]()
                });
            }

            if (includeHumanPlayer)
            {
                players[0] = new DraftPlayer
                {
                    Strategy = _userInterface
                };
            }


            return(players);
        }
Пример #3
0
        public DraftResults Run(int playerCount, string[] sets, CardRatings ratings)
        {
            var players  = CreatePlayers(playerCount, ratings, _userInterface != null);
            var boosters = CreateBoosters(sets, players);

            var round     = 1;
            var direction = 1; // clockwise

            while (round <= 3)
            {
                var roundBoosters = boosters
                                    .Skip((round - 1) * players.Count)
                                    .Take(players.Count)
                                    .ToList();

                var cardCount = roundBoosters[0].Count;

                while (cardCount > 0)
                {
                    for (var playerIndex = 0; playerIndex < players.Count; playerIndex++)
                    {
                        var boosterIndex = (100 + playerIndex + direction * cardCount) % players.Count;
                        var player       = players[playerIndex];

                        var draftedCard = player.Strategy.PickCard(roundBoosters[boosterIndex], round);

                        if (_userInterface != null && _userInterface.PlayerLeftDraft)
                        {
                            return(null);
                        }

                        player.Library.Add(draftedCard);
                        roundBoosters[boosterIndex].Remove(draftedCard);
                    }

                    cardCount = roundBoosters[0].Count;
                }

                round++;
                direction = -direction;
            }

            return(new DraftResults(players));
        }
Пример #4
0
        private void NewTournament()
        {
            _cardRatings = LoadCardRatings();
            _roundsLeft  = CalculateRoundCount();
            _players     = CreatePlayers();
            _type        = _p.Type;

            switch (_type)
            {
            case TournamentType.Sealed:
            {
                CreateSealedDecks();
                break;
            }

            case TournamentType.Draft:
            {
                CreateDraftDecks();
            }
            break;
            }
        }
Пример #5
0
        private CardRatings LoadCardRatings()
        {
            CardRatings merged = null;

            foreach (var setName in _p.BoosterPacks)
            {
                var ratings = MediaLibrary.GetSet(setName).Ratings;
                if (merged == null)
                {
                    merged = ratings;
                }
                else
                {
                    merged = CardRatings.Merge(merged, ratings);
                }
            }

            if (_p.TournamentPack == null)
            {
                return(merged);
            }

            return(CardRatings.Merge(merged, MediaLibrary.GetSet(_p.TournamentPack).Ratings));
        }
Пример #6
0
 protected DraftingStrategy(CardRatings ratings)
 {
     _ratings = ratings;
 }
Пример #7
0
 public Greedy(CardRatings ratings) : base(ratings)
 {
 }
Пример #8
0
 protected DraftingStrategy(CardRatings ratings)
 {
     _ratings = ratings;
 }
Пример #9
0
 public Greedy(CardRatings ratings)
     : base(ratings)
 {
 }
Пример #10
0
        private void NewTournament()
        {
            _cardRatings = LoadCardRatings();
              _roundsLeft = CalculateRoundCount();
              _players = CreatePlayers();
              _type = _p.Type;

              switch (_type)
              {
            case TournamentType.Sealed:
              {
            CreateSealedDecks();
            break;
              }
            case TournamentType.Draft:
              {
            CreateDraftDecks();
              }
              break;
              }
        }
Пример #11
0
 public Forcing(CardRatings ratings) : base(ratings)
 {
 }
Пример #12
0
 public Forcing(CardRatings ratings)
     : base(ratings)
 {
 }