コード例 #1
0
 private async System.Threading.Tasks.Task PopulateFromResources()
 {
     foreach (Dominion.Card card in Dominion.Cards.AllKingdomCardsList)
     {
         this.originalCards.Add(DominionCard.Create(card));
     }
 }
コード例 #2
0
 private async System.Threading.Tasks.Task PopulateSheltersFromResources()
 {
     foreach (Dominion.Card card in Dominion.Cards.Shelters)
     {
         this.originalCards.Add(DominionCard.Create(card));
     }
 }
コード例 #3
0
 public void PopulateFromGameDescription(GameDescription gameDescription)
 {
     this.currentDeck.PopulateCards(gameDescription.kingdomPiles.Select(c => DominionCard.Create(c)));
     if (gameDescription.baneCard != null)
     {
         this.baneCard.PopulateBaneCard(DominionCard.Create(gameDescription.baneCard));
     }
     this.eventCards.PopulateCards(gameDescription.events.Select(c => DominionCard.Create(c)));
     this.UseShelters.Value       = gameDescription.useShelters;
     this.UseColonyPlatinum.Value = gameDescription.useColonyAndPlatinum;
 }
コード例 #4
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.StrategyDescription.ConvertToDominionStrategy();
            strategy = strategy.AddCardsToPurchaseOrder(cards);
            this.StrategyDescription.PopulateFrom(strategy);
        }
コード例 #5
0
        private async System.Threading.Tasks.Task PopulateCommonFromResources(Dominion.GameConfig gameConfig)
        {
            this.originalCards.Clear();

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

            foreach (var availability in availabilities)
            {
                if (!gameConfig.kingdomPiles.Contains(availability.card) && gameConfig.baneCard != availability.card)
                {
                    this.originalCards.Add(DominionCard.Create(availability.card));
                }
            }
        }
コード例 #6
0
        private void SelectedCards_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            this.appDataContext.selectedCards.Clear();
            foreach (var item in this.GetSelectedCardsAndClear(fShouldClear: false))
            {
                this.appDataContext.selectedCards.Add(DominionCard.Create(item));
            }
            this.appDataContext.IsSelectionPresentOnCurrentDeck.Value = this.appDataContext.selectedCards.Any();
            this.appDataContext.UpdateSimulationStep();
            this.appDataContext.UpdatePlayerButtonVisibilities();

            this.appDataContext.HintSelectedCardNotSimulatedButtonVisible.Value =
                this.appDataContext.IsSelectionPresentOnCurrentDeck.Value &&
                !this.appDataContext.CanSimulateCardsInSelection();
        }
コード例 #7
0
        void AvailableCards_PropetyChanged(object sender, PropertyChangedEventArgs e)
        {
            var setCards = new HashSet <Dominion.Card>();

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

            foreach (var card in this.commonCards.Cards)
            {
                setCards.Add((Dominion.Card)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);
        }
コード例 #8
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);
        }
コード例 #9
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 <Dominion.Card>(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);
        }
コード例 #10
0
 private async System.Threading.Tasks.Task PopulatColonyPlatinumFromResources()
 {
     this.originalCards.Add(DominionCard.Create(Dominion.Cards.Platinum));
     this.originalCards.Add(DominionCard.Create(Dominion.Cards.Colony));
 }