Esempio n. 1
0
 public abstract Card SelectCardToGain(KingdomWrapper wrapper, PlayerState ps, Kingdom k, Phase phase);
Esempio n. 2
0
        public override Card SelectCardToGain(KingdomWrapper wrapper, PlayerState ps, Kingdom k, Phase phase)
        {
            var provinces = k.GetPile(CardType.Province);

            if (buyAgenda.Provinces > provinces.Count && wrapper.GetCard(CardType.Province) != null)
            {
                return(Province.Get());
            }

            var duchies = k.GetPile(CardType.Duchy);

            if (buyAgenda.Duchies > provinces.Count && wrapper.GetCard(CardType.Duchy) != null)
            {
                return(Duchy.Get());
            }

            var estates = k.GetPile(CardType.Estate);

            if (buyAgenda.Estates > provinces.Count && wrapper.GetCard(CardType.Estate) != null)
            {
                return(Estate.Get());
            }

            for (int i = 0; i < buyAgenda.BuyMenu.Count; i++)
            {
                var tuple = buyAgenda.BuyMenu[i];
                if (tuple.Number <= 0)
                {
                    continue;
                }

                var card = wrapper.GetCard(tuple.Card);
                if (card == null)
                {
                    continue;
                }

                tuple.Number--;
                if (tuple.Number == 0)
                {
                    buyAgenda.BuyMenu.RemoveAt(i);
                }
                else
                {
                    buyAgenda.BuyMenu[i] = tuple; // this is a value type, i have to return the value back
                }
                if (card.IsTreasure)
                {
                    playerInfo.TreasureTotal += card.Coins;
                }
                if (card.Type == CardType.Moneylender)
                {
                    playerInfo.TreasureTotal -= 1;
                }
                else if (card.Type == CardType.Bureaucrat)
                {
                    playerInfo.TreasureTotal += 2;
                }
                else if (card.Type == CardType.Mine)
                {
                    playerInfo.TreasureTotal += 1;
                }

                return(card);
            }
            return(null);
        }