コード例 #1
0
        public void Randomize10Cards()
        {
            var selectedItems = this.CurrentCardsListView.SelectedItems.Select(item => (DominionCard)item).ToArray <DominionCard>();

            bool         useShelter = this.appDataContext.UseShelters.Value;
            bool         useColony  = this.appDataContext.UseColonyPlatinum.Value;
            DominionCard baneCard   = this.appDataContext.BaneCard.CurrentCards.FirstOrDefault();

            bool isCleanRoll = this.appDataContext.CurrentDeck.GenerateRandom(10, ref baneCard, this.appDataContext.AllCards.CurrentCards, itemsToReplace: selectedItems);

            this.appDataContext.BaneCard.PopulateBaneCard(baneCard);

            if (isCleanRoll)
            {
                this.appDataContext.UseColonyPlatinum.Value = ShouldIncludeExpansion(Dominion.Expansion.Prosperity);
                this.appDataContext.UseShelters.Value       = ShouldIncludeExpansion(Dominion.Expansion.DarkAges);
                ReRollEvents();

                this.appDataContext.player1Strategy.CardAcceptanceDescriptions.Clear();
                this.appDataContext.player2Strategy.CardAcceptanceDescriptions.Clear();
            }

            if (this.CurrentCardsChanged != null)
            {
                this.CurrentCardsChanged();
            }
        }
コード例 #2
0
        private async void CurrentCardsListView_Drop(object sender, DragEventArgs e)
        {
            if (!e.Data.GetView().AvailableFormats.Contains("text"))
            {
                return;
            }

            string cardNames = (string)await e.Data.GetView().GetTextAsync("text");

            Dominion.Strategy.Description.StrategyDescription strategy = this.appDataContext.currentStrategy.Value.ConvertToDominionStrategy();


            foreach (var cardName in cardNames.Split(','))
            {
                DominionCard card = DominionCard.Create(cardName);

                if (strategy.purchaseOrderDescription.descriptions.Length == 0)
                {
                    strategy = Dominion.Strategy.Description.StrategyDescription.GetDefaultStrategyDescription(card.dominionCard);
                }
                else
                {
                    strategy = strategy.AddCardToPurchaseOrder(card.dominionCard);
                }
            }

            this.appDataContext.currentStrategy.Value.PopulateFrom(strategy);
        }
コード例 #3
0
        private void ReRollEvents()
        {
            int cEventsToInclude = 0;

            int cEventRemaining   = 20;
            int totalKingdomCount = Dominion.Cards.AllKingdomCards().Count();

            for (int i = 0; i < 10; ++i)
            {
                int roll = MainPage.random.Next(totalKingdomCount);
                if (roll <= cEventRemaining)
                {
                    cEventsToInclude++;
                    cEventRemaining--;
                    i--;
                    continue;
                }
                totalKingdomCount--;
            }

            var allEventsCards = Dominion.Cards.AllCards().Where(c => c.isEvent).Select(c => DominionCard.Create(c)).ToArray();
            var selectedItems  = this.EventCardsListView.SelectedItems.Select(item => (DominionCard)item).ToArray <DominionCard>();

            var          cardPicker = new UniqueCardPicker(allEventsCards.Select(c => c.dominionCard));
            DominionCard baneCard   = null;

            this.appDataContext.EventCards.Clear();
            this.appDataContext.EventCards.GenerateRandom(cEventsToInclude, ref baneCard, allEventsCards, itemsToReplace: selectedItems);
        }
コード例 #4
0
 private async System.Threading.Tasks.Task PopulateFromResources()
 {
     foreach (Dominion.Card card in Dominion.Cards.AllKingdomCards())
     {
         this.originalCards.Add(DominionCard.Create(card));
     }
 }
コード例 #5
0
        public void Randomize10Cards()
        {
            var selectedItems = this.CurrentCardsListView.SelectedItems.Select(item => (DominionCard)item).ToArray <DominionCard>();

            bool         useShelter = this.appDataContext.UseShelters.Value;
            bool         useColony  = this.appDataContext.UseColonyPlatinum.Value;
            DominionCard baneCard   = this.appDataContext.BaneCards.CurrentCards.FirstOrDefault();

            bool isCleanRoll = this.appDataContext.CurrentDeck.Generate10Random(ref baneCard, this.appDataContext.AllCards.Cards, itemsToReplace: selectedItems);

            this.appDataContext.BaneCards.PopulateBaneCard(baneCard);

            if (isCleanRoll)
            {
                // reroll shelter
                {
                    int cProsperity = this.appDataContext.CurrentDeck.CurrentCards.Select(c => c.dominionCard).Where(c => c.expansion == Dominion.Expansion.Prosperity).Count();
                    int roll        = MainPage.random.Next(1, 10);
                    this.appDataContext.UseColonyPlatinum.Value = cProsperity >= roll ? true : false;
                }

                // reroll shelter
                {
                    int cDarkAges = this.appDataContext.CurrentDeck.CurrentCards.Select(c => c.dominionCard).Where(c => c.expansion == Dominion.Expansion.DarkAges).Count();
                    int roll      = MainPage.random.Next(1, 10);
                    this.appDataContext.UseShelters.Value = cDarkAges >= roll ? true : false;
                }
            }

            if (this.CurrentCardsChanged != null)
            {
                this.CurrentCardsChanged();
            }
        }
コード例 #6
0
 public CardAcceptanceDescription(DominionCard card)
     : this()
 {
     this.Card.Value  = card;
     this.Count.Value = CountAsManyAsPossible;
     this.SecondaryMatchVisible.Value = false;
     this.TestCard.Value    = card;
     this.Comparison.Value  = Dominion.Strategy.Description.Comparison.LessThan;
     this.Threshhold.Value  = 1;
     this.CountSource.Value = Dominion.Strategy.Description.CountSource.Always;
 }
コード例 #7
0
 public CardAcceptanceDescription(DominionCard card)
     : this()
 {
     this.Card.Value = card;
     this.Count.Value = CountAsManyAsPossible;
     this.SecondaryMatchVisible.Value = false;
     this.TestCard.Value = card;
     this.Comparison.Value = Dominion.Strategy.Description.Comparison.LessThan;
     this.Threshhold.Value = 1;
     this.CountSource.Value = Dominion.Strategy.Description.CountSource.Always;
 }
コード例 #8
0
        private async System.Threading.Tasks.Task PopulateCommonFromResources(Dominion.GameConfig gameConfig)
        {
            this.originalCards.Clear();

            Dominion.CardGainAvailablility[] availabilities = gameConfig.GetCardAvailability(1, Dominion.CardAvailabilityType.AdditionalCardsAfterKingdom);

            foreach (var availability in availabilities)
            {
                this.originalCards.Add(DominionCard.Create(availability.card));
            }
        }
コード例 #9
0
        public bool IsExcluded(DominionCard card)
        {
            bool unused;

            if (this.excludes.TryGetValue(card, out unused))
            {
                return(true);
            }

            return(false);
        }
コード例 #10
0
 public void PopulateBaneCard(DominionCard card)
 {
     if (this.originalCards.Contains(card))
     {
         return;
     }
     if (this.originalCards.Any())
     {
         this.originalCards.Clear();
     }
     this.originalCards.Add(card);
 }
コード例 #11
0
        private async void CurrentCardsListView_Drop(object sender, DragEventArgs e)
        {
            if (!e.Data.GetView().AvailableFormats.Contains("text"))
            {
                return;
            }

            string cardNames = (string)await e.Data.GetView().GetTextAsync("text");

            Dominion.Card[] cards = cardNames.Split(',').Select(cardName => DominionCard.Create(cardName).dominionCard).ToArray();
            Dominion.Strategy.Description.StrategyDescription strategy = this.appDataContext.currentStrategy.Value.ConvertToDominionStrategy();
            strategy = strategy.AddCardsToPurchaseOrder(cards);
            this.appDataContext.currentStrategy.Value.PopulateFrom(strategy);
        }
コード例 #12
0
 private async System.Threading.Tasks.Task PopulateCommonFromResources()
 {
     Dominion.Card[] commonCards = new Dominion.Card[] {
         Dominion.Cards.Province,
         Dominion.Cards.Duchy,
         Dominion.Cards.Estate,
         Dominion.Cards.Gold,
         Dominion.Cards.Silver,
         Dominion.Cards.Copper,
     };
     foreach (Dominion.Card card in commonCards)
     {
         this.originalCards.Add(DominionCard.Create(card));
     }
 }
コード例 #13
0
 public void PopulateBaneCard(DominionCard card)
 {
     if (this.originalCards.Contains(card))
     {
         return;
     }
     if (this.originalCards.Any())
     {
         this.originalCards.Clear();
     }
     if (card != null)
     {
         this.originalCards.Add(card);
     }
     this.UpdateUIFromUIThread();
 }
コード例 #14
0
        public DominionCard GetCard(Func <DominionCard, bool> meetConstraint)
        {
            while (maxIndex > 0)
            {
                int          resultCardIndex = NumberBetweenInclusive(MainPage.random, 0, maxIndex);
                DominionCard currentCard     = this.allCards[remainingCards[resultCardIndex]];
                remainingCards[resultCardIndex] = remainingCards[maxIndex];
                --maxIndex;

                if (!IsExcluded(currentCard) && meetConstraint(currentCard))
                {
                    return(currentCard);
                }
            }

            return(null);
        }
コード例 #15
0
        void AvailableCards_PropetyChanged(object sender, PropertyChangedEventArgs e)
        {
            var setCards = new HashSet <Dominion.Card>();

            foreach (var card in this.currentDeck.Cards)
            {
                setCards.Add(card.dominionCard);
            }

            foreach (var card in this.commonCards.Cards)
            {
                setCards.Add(card.dominionCard);
            }

            this.player1Strategy.ConvertToDominionStrategy().GetAllCardsInStrategy(setCards);
            this.player2Strategy.ConvertToDominionStrategy().GetAllCardsInStrategy(setCards);

            var extraCards = new List <DominionCard>();

            foreach (var card in this.availableCards)
            {
                if (!setCards.Contains(card.dominionCard))
                {
                    extraCards.Add(card);
                }
            }

            foreach (var card in setCards)
            {
                var dominionCard = DominionCard.Create(card);
                if (!this.availableCards.Contains(dominionCard))
                {
                    this.availableCards.Add(dominionCard);
                }
            }

            foreach (var card in extraCards)
            {
                this.availableCards.Remove(card);
            }

            // this sort method will order but cause items in strategy to be data bound empty
            //Sort(this.availableCards, c => c.dominionCard.name);
        }
コード例 #16
0
        public bool Generate10Random(ref DominionCard baneCard, IList <DominionCard> allCards, IList <DominionCard> itemsToReplace)
        {
            bool isCleanRoll = MainPage.Generate10Random(
                ref baneCard,
                this.originalCards, this.Cards, allCards, itemsToReplace);

            if (!isCleanRoll)
            {
                this.ClearSort();
            }
            else
            {
                ReapplySortOrder();
            }

            this.UpdateUIFromUIThread();

            return(isCleanRoll);
        }
コード例 #17
0
        public static CardAcceptanceDescription PopulateFrom(Dominion.Strategy.Description.CardAcceptanceDescription descr)
        {
            var result = new CardAcceptanceDescription();

            result.Card.Value = DominionCard.Create(descr.card);

            if (descr.matchDescriptions.Length != 1 && descr.matchDescriptions.Length != 2)
            {
                throw new Exception("Support only one match description in addition to count all owned");
            }

            if (descr.matchDescriptions[0].countSource == Dominion.Strategy.Description.CountSource.Always)
            {
                result.Count.Value = CountAsManyAsPossible;
            }
            else if (descr.matchDescriptions[0].countSource == Dominion.Strategy.Description.CountSource.CountAllOwned &&
                     descr.matchDescriptions[0].cardType == descr.card &&
                     descr.matchDescriptions[0].comparison == Dominion.Strategy.Description.Comparison.LessThan)
            {
                result.Count.Value = descr.matchDescriptions[0].countThreshHold;
            }
            else
            {
                throw new Exception("First match description needs to describe how many of the card to own");
            }

            if (descr.matchDescriptions.Length == 2)
            {
                result.TestCard.Value = descr.matchDescriptions[1].cardType != null?DominionCard.Create(descr.matchDescriptions[1].cardType) : null;

                result.Threshhold.Value  = descr.matchDescriptions[1].countThreshHold;
                result.Comparison.Value  = descr.matchDescriptions[1].comparison;
                result.CountSource.Value = descr.matchDescriptions[1].countSource;
            }
            else
            {
                result.CountSource.Value = Dominion.Strategy.Description.CountSource.Always;
            }

            return(result);
        }
コード例 #18
0
        public Dominion.GameConfig GetGameConfig()
        {
            Dominion.StartingCardSplit player1Split = this.player1Strategy.StartingCardSplit.Value;
            Dominion.StartingCardSplit player2Split = this.player2Strategy.StartingCardSplit.Value;
            Dominion.Card[]            kingdomCards = this.currentDeck.Cards.Select(c => c.dominionCard).ToArray();
            DominionCard baneCard = this.BaneCards.CurrentCards.FirstOrDefault();

            var builder = new Dominion.GameConfigBuilder();

            builder.SetKingdomPiles(kingdomCards);
            if (baneCard != null)
            {
                builder.SetBaneCard(baneCard.dominionCard);
            }

            builder.useColonyAndPlatinum = this.UseColonyPlatinum.Value;
            builder.useShelters          = this.UseShelters.Value;
            builder.SetCardSplitPerPlayer(new Dominion.StartingCardSplit[] { player1Split, player2Split });

            return(builder.ToGameConfig());
        }
コード例 #19
0
        internal static void Generate10Random(IList <DominionCard> resultList, IList <DominionCard> sourceList, IList <DominionCard> allCards, IList <DominionCard> itemsToReplace)
        {
            bool isReplacingItems = itemsToReplace != null && itemsToReplace.Count > 0 && sourceList.Count <= 10;
            bool isReducingItems  = itemsToReplace != null && itemsToReplace.Count > 0 && sourceList.Count > 10;
            var  cardPicker       = new UniqueCardPicker(allCards);

            if (isReplacingItems)
            {
                cardPicker.ExcludeCards(itemsToReplace);

                if (itemsToReplace != null)
                {
                    foreach (DominionCard cardToReplace in itemsToReplace)
                    {
                        for (int i = 0; i < resultList.Count; ++i)
                        {
                            if (resultList[i] == cardToReplace)
                            {
                                var nextCard = cardPicker.GetCard(c => true);
                                if (nextCard == null)
                                {
                                    resultList.Remove(cardToReplace);
                                    i--;  // do this index again
                                }
                                else
                                {
                                    resultList[i] = nextCard;
                                }
                            }
                        }
                    }
                }
            }
            else if (sourceList.Count < 10)
            {
                var listRemoved = new List <DominionCard>();
                foreach (var card in resultList)
                {
                    if (!sourceList.Contains(card))
                    {
                        listRemoved.Add(card);
                    }
                }

                foreach (var card in listRemoved)
                {
                    resultList.Remove(card);
                }
            }
            else if (isReducingItems)
            {
                foreach (var card in itemsToReplace)
                {
                    resultList.Remove(card);
                }
            }
            else
            {
                resultList.Clear();
            }


            while (resultList.Count < 10)
            {
                DominionCard currentCard = cardPicker.GetCard(c => true);
                if (currentCard == null)
                {
                    break;
                }
                resultList.Add(currentCard);
            }
        }
コード例 #20
0
        public bool GenerateRandom(
            int targetCount,
            ref DominionCard baneCard,
            IEnumerable<DominionCard> allCards,
            IEnumerable<DominionCard> itemsToReplace)
        {
            bool isCleanRoll = MainPage.GenerateRandom(
                targetCount,
                ref baneCard,
                this.originalCards, this.Cards, allCards, itemsToReplace);

            if (!isCleanRoll)
                this.ClearSort();
            else
                ReapplySortOrder();

            this.UpdateUIFromUIThread();

            return isCleanRoll;
        }
コード例 #21
0
 public void PopulateBaneCard(DominionCard card)
 {
     if (this.originalCards.Contains(card))
         return;
     if (this.originalCards.Any())
         this.originalCards.Clear();
     if (card != null)
         this.originalCards.Add(card);
     this.UpdateUIFromUIThread();
 }
コード例 #22
0
 private async System.Threading.Tasks.Task PopulatColonyPlatinumFromResources()
 {
     this.originalCards.Add(DominionCard.Create(Dominion.Cards.Platinum));
     this.originalCards.Add(DominionCard.Create(Dominion.Cards.Colony));
 }
コード例 #23
0
        internal static bool GenerateRandom(
            int targetCount,
            ref DominionCard baneCard,
            IList <DominionCard> resultList,
            IList <DominionCard> sourceList,
            IEnumerable <DominionCard> allCards,
            IEnumerable <DominionCard> itemsToReplace)
        {
            bool isReplacingItems = itemsToReplace != null && itemsToReplace.Any() && sourceList.Count <= targetCount;
            bool isReducingItems  = itemsToReplace != null && itemsToReplace.Any() && sourceList.Count > targetCount;
            var  cardPicker       = new UniqueCardPicker(allCards.Select(c => c.dominionCard));

            bool isCleanRoll = false;

            if (isReplacingItems)
            {
                cardPicker.ExcludeCards(itemsToReplace.Select(c => c.dominionCard));
            }

            baneCard = DominionCard.Create(cardPicker.GetCard(c => c.DefaultCoinCost == 2 || c.DefaultCoinCost == 3));

            if (isReplacingItems)
            {
                foreach (DominionCard cardToReplace in itemsToReplace)
                {
                    for (int i = 0; i < resultList.Count; ++i)
                    {
                        if (resultList[i] == cardToReplace)
                        {
                            var nextCard = cardPicker.GetCard(c => true);
                            if (nextCard == null)
                            {
                                resultList.Remove(cardToReplace);
                                i--;  // do this index again
                            }
                            else
                            {
                                resultList[i] = DominionCard.Create(nextCard);
                            }
                        }
                    }
                }
            }
            else if (sourceList.Count < targetCount && sourceList.Count > 0)
            {
                var listRemoved = new List <DominionCard>();
                foreach (var card in resultList)
                {
                    if (!sourceList.Contains(card))
                    {
                        listRemoved.Add(card);
                    }
                }

                foreach (var card in listRemoved)
                {
                    resultList.Remove(card);
                }
            }
            else if (isReducingItems)
            {
                foreach (var card in itemsToReplace)
                {
                    resultList.Remove(card);
                }
            }
            else
            {
                resultList.Clear();
                isCleanRoll = true;
            }

            while (resultList.Count < targetCount)
            {
                Dominion.Card currentCard = cardPicker.GetCard(c => true);
                if (currentCard == null)
                {
                    break;
                }
                resultList.Add(DominionCard.Create(currentCard));
            }

            return(isCleanRoll);
        }
コード例 #24
0
        internal static bool GenerateRandom(
            int targetCount,
            ref DominionCard baneCard,
            IList<DominionCard> resultList,
            IList<DominionCard> sourceList,
            IEnumerable<DominionCard> allCards,
            IEnumerable<DominionCard> itemsToReplace)
        {
            bool isReplacingItems = itemsToReplace != null && itemsToReplace.Any() && sourceList.Count <= targetCount;
            bool isReducingItems = itemsToReplace != null && itemsToReplace.Any() && sourceList.Count > targetCount;
            var cardPicker = new Dominion.UniqueCardPicker(allCards.Select(c => c.dominionCard), MainPage.random);

            bool isCleanRoll = false;

            if (isReplacingItems)
            {
                cardPicker.ExcludeCards(itemsToReplace.Select(c => c.dominionCard));
            }

            baneCard = DominionCard.Create(cardPicker.GetCard(c => c.DefaultCoinCost == 2 || c.DefaultCoinCost == 3));

            if (isReplacingItems)
            {
                foreach (DominionCard cardToReplace in itemsToReplace)
                {
                    for (int i = 0; i < resultList.Count; ++i)
                    {
                        if (resultList[i] == cardToReplace)
                        {
                            var nextCard = cardPicker.GetCard(c => true);
                            if (nextCard == null)
                            {
                                resultList.Remove(cardToReplace);
                                i--;  // do this index again
                            }
                            else
                            {
                                resultList[i] = DominionCard.Create(nextCard);
                            }
                        }
                    }
                }
            }
            else if (sourceList.Count < targetCount && sourceList.Count > 0)
            {
                var listRemoved = new List<DominionCard>();
                foreach(var card in resultList)
                {
                    if (!sourceList.Contains(card))
                        listRemoved.Add(card);
                }

                foreach(var card in listRemoved)
                {
                    resultList.Remove(card);
                }
            }
            else if (isReducingItems)
            {
                foreach (var card in itemsToReplace)
                {
                    resultList.Remove(card);
                }
            }
            else
            {
                resultList.Clear();
                isCleanRoll = true;
            }

            while (resultList.Count < targetCount)
            {
                Dominion.Card currentCard = cardPicker.GetCard(c => true);
                if (currentCard == null)
                    break;
                resultList.Add(DominionCard.Create(currentCard));
            }

            return isCleanRoll;
        }