Exemple #1
0
        private IEffect ValidSpecialCase(IGamePlayer player, SpecialCaseType specialCase, Age age)
        {
            IEffect result = null;

            if (specialCase == SpecialCaseType.None)
            {
                return(result);
            }
            var effects = player.GetNonResourceEffects().Where(e => (int)specialCase == (int)e.Type).ToList();

            foreach (var e in effects)
            {
                switch (specialCase)
                {
                //This is the only special case so far and it only works for building structure
                case SpecialCaseType.PlayCardForFreeOncePerAge:
                    if (e.Info == null || (e.Info is Age && ((Age)e.Info) != age))
                    {
                        result = e;
                        continue;
                    }
                    break;

                default:
                    break;
                }
            }
            return(result);
        }
Exemple #2
0
        private bool TryBuyCard(IStructureCard card, ITurnPlayer player, Age age, SpecialCaseType specialCase)
        {
            if (CanGetForFree(card))
            {
                LoggerHelper.Debug("Card is free.");
                return(true);
            }
            if (HasDemandedCard(card, player.Cards))
            {
                LoggerHelper.Debug("Player can build for free because of previous card");
                return(true);
            }
            if (UseSpecialCase(player, specialCase, age))
            {
                LoggerHelper.DebugFormat("Player can play card for free, because of {0}", specialCase);
                return(true);
            }

            var coins     = card.ResourceCosts.Count(r => r == ResourceType.Coin);
            var resources = card.ResourceCosts.Where(r => r != ResourceType.Coin);

            LoggerHelper.DebugFormat("Structure card costs {0} coins and {1} resources", coins, resources.Count());
            if (player.CoinsLeft >= coins && !player.CheckResourceAvailability(resources.ToList(), false).Any())
            {
                if (coins > 0)
                {
                    unitOfWork.AddEvent(new PayCoinEvent(player, coins));
                }
                return(true);
            }

            return(false);
        }
Exemple #3
0
 public void InitializeTurnData()
 {
     this.SelectedCard     = null;
     this.ChosenAction     = TurnAction.SellCard;
     this.specialCaseToUse = SpecialCaseType.None;
     this.resourcesToBorrow.Clear();
     this.AdditionalInfo = null;
     this.CoinsLeft      = this.Coins;
     this.tempResources.Clear();
 }
Exemple #4
0
        /// <summary>
        /// Buys the selected card.
        /// </summary>
        /// <param name="card">The selected card.</param>
        /// <param name="player">Player buying the card.</param>
        /// <param name="age">The age that is being played.</param>
        /// <param name="specialCase">The user wants to use a special case card.</param>
        /// <returns></returns>
        private bool BuyCard(IStructureCard card, ITurnPlayer player, Age age, SpecialCaseType specialCase = SpecialCaseType.None)
        {
            bool result = TryBuyCard(card, player, age, specialCase);

            if (result)
            {
                LoggerHelper.Debug("Card can be bought");
                unitOfWork.AddEvent(new AddCardEvent(player, card));
            }
            return(result);
        }
Exemple #5
0
        private bool UseSpecialCase(IGamePlayer player, SpecialCaseType specialCase, Age age)
        {
            bool result = false;
            var  effect = ValidSpecialCase(player, specialCase, age);

            if (effect != null)
            {
                unitOfWork.AddEvent(new EffectInfoEvent(effect, age));
                result = true;
            }
            return(result);
        }
 public AdvanceToNextSpecialCaseCard(SpecialCaseType type, CardType cardType)
 {
     Type = type;
     deck = cardType;
 }