Exemplo n.º 1
0
        public Results Evaluate()
        {
            var results = new Results();

            if (!_p.Attacker.Is().Creature || !_p.Attacker.CanBeDestroyed)
            {
                return(results);
            }

            var blockers = _p.Blockers;

            if (_p.Attacker.HasFirstStrike)
            {
                blockers = GetOnlyBlockersThatWontBeKilledBeforeTheyDealDamage().ToList();
            }

            var  maxDamageDealtByAnyBlocker = 0;
            Card blockerThatDealsMaxDamage  = null;

            foreach (var blocker in blockers)
            {
                var amount = QuickCombat.GetAmountOfDamageCreature1WillDealToCreature2(
                    creature1: blocker.Card,
                    creature2: _p.Attacker,
                    powerIncrease: blocker.PowerIncrease);

                if (amount > 0 && blocker.Card.Has().Deathtouch)
                {
                    results.ReceivesLeathalDamage = true;
                    results.DeathTouchDamage     += amount;
                    results.LeathalBlocker        = blocker.Card;
                }

                results.TotalDamage += amount;

                if (amount > maxDamageDealtByAnyBlocker)
                {
                    blockerThatDealsMaxDamage  = blocker.Card;
                    maxDamageDealtByAnyBlocker = amount;
                }
            }

            results.ReceivesLeathalDamage = results.ReceivesLeathalDamage ||
                                            results.TotalDamage >= _p.Attacker.Life + _p.AttackerToughnessIncrease;

            results.LeathalBlocker = results.LeathalBlocker ?? blockerThatDealsMaxDamage;
            return(results);
        }
Exemplo n.º 2
0
        private IEnumerable <AttackerEvaluationParameters.Blocker> GetOnlyBlockersThatWontBeKilledBeforeTheyDealDamage()
        {
            return(_p.Blockers.Where(blocker =>
            {
                if (blocker.Card.HasFirstStrike || blocker.Card.Has().Indestructible)
                {
                    return true;
                }

                var attackersDamage = QuickCombat.GetAmountOfDamageCreature1WillDealToCreature2(
                    creature1: _p.Attacker,
                    creature2: blocker.Card,
                    powerIncrease: _p.AttackerPowerIncrease);

                return blocker.Card.Life + blocker.ToughnessIncrease > attackersDamage;
            }));
        }