Пример #1
0
        public void TestNormalElfCannotEvadeAttack()
        {
            Card normalElve  = new Elve("elvgri", "Grimli Gohan", 60, ElementType.Normal);
            Card waterDragon = new Dragon("drasma", "Smaug", 180, ElementType.Water);

            bool evadesAttack = ((Elve)normalElve).EvadeAttackWhen(waterDragon);

            Assert.False(evadesAttack);
        }
Пример #2
0
        public void TestFireElfCanEvadeAttack()
        {
            Card fireElve    = new Elve("elverl", "Erlan Erhice", 50, ElementType.Fire);
            Card waterDragon = new Dragon("drabal", "Balrog", 150, ElementType.Water);

            bool evadesAttack = ((Elve)fireElve).EvadeAttackWhen(waterDragon);

            Assert.True(evadesAttack);
        }
Пример #3
0
        public void TestWaterIsEffectiveAgainstFire()
        {
            // Arrange
            Card fireElve    = new Elve("elverl", "Erlan Erhice", 70, ElementType.Water);
            Card waterDragon = new Dragon("drabal", "Balrog", 130, ElementType.Fire);

            double waterIsEffectiveAgainstFire = _elementService.CompareElements(fireElve.Type, waterDragon.Type);

            // Assert
            Assert.AreEqual(_effective, waterIsEffectiveAgainstFire);
        }
Пример #4
0
        private string Round(ref CardDeck deck1, ref CardDeck deck2, string username1, string username2)
        {
            Card card1Deck = deck1.GetRandomCard();
            Card card2Deck = deck2.GetRandomCard();

            // create new cards instead of references
            Card card1 = card1Deck switch
            {
                Dragon d => new Dragon(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Elve e => new Elve(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Goblin g => new Goblin(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Knight k => new Knight(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Kraken k => new Kraken(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Orc o => new Orc(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                Wizard w => new Wizard(card1Deck.ID, card1Deck.Name, card1Deck.Damage, card1Deck.Type),
                FireSpell f => new FireSpell(card1Deck.ID, card1Deck.Name, card1Deck.Damage),
                NormalSpell n => new NormalSpell(card1Deck.ID, card1Deck.Name, card1Deck.Damage),
                WaterSpell w => new WaterSpell(card1Deck.ID, card1Deck.Name, card1Deck.Damage),
            };
            Card card2 = card2Deck switch
            {
                Dragon d => new Dragon(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Elve e => new Elve(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Goblin g => new Goblin(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Knight k => new Knight(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Kraken k => new Kraken(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Orc o => new Orc(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                Wizard w => new Wizard(card2Deck.ID, card2Deck.Name, card2Deck.Damage, card2Deck.Type),
                FireSpell f => new FireSpell(card2Deck.ID, card2Deck.Name, card2Deck.Damage),
                NormalSpell n => new NormalSpell(card2Deck.ID, card2Deck.Name, card2Deck.Damage),
                WaterSpell w => new WaterSpell(card2Deck.ID, card2Deck.Name, card2Deck.Damage),
            };

            //card1.Damage = card1.Damage * _elementEffectivenessService.CompareElements(card1.Type, card2.Type);
            //card2.Damage = card2.Damage * _elementEffectivenessService.CompareElements(card2.Type, card1.Type);
            card1.EnhanceDamage(_elementEffectivenessService.CompareElements(card1.Type, card2.Type));
            card2.EnhanceDamage(_elementEffectivenessService.CompareElements(card2.Type, card1.Type));

            // without special abilities

            /*int card1wins = card1 switch
             * {
             *  IMonster monster => monster.CompareDamage(card2.Damage) ? 1 : -1,
             *  ISpell spell => spell.CompareDamage(card2.Damage) ? 1 : -1,
             *  _ => 0
             * };*/

            Random random       = new Random();
            bool   boosterCard1 = (random.Next(1, 21) == 20);

            if (boosterCard1)
            {
                //card1.Damage = card1.Damage * 10;
                card1.EnhanceDamage(10);
            }

            int card1wins = card1 switch
            {
                IMonster _ when card2 is IMonster => FightMonsterMonster(card1, card2),
                IMonster _ when card1 is ISpell => FightMonsterSpell(card1, card2),
                ISpell _ when card2 is IMonster => FightSpellMonster(card2, card1),
                _ => FightSpellSpell(card1, card2)
            };

            string roundLog;

            if (card1wins == 1)
            {
                deck1.AddCard(card2Deck, true);
                deck2.RemoveCard(card2Deck);
                if (boosterCard1)
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") won with a booster against " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
                else
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") won against " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
            }
            else if (card1wins == -1)
            {
                deck2.AddCard(card1Deck, true);
                deck1.RemoveCard(card1Deck);
                if (boosterCard1)
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") lost although a booster to " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
                else
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") lost to " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
            }
            else
            {
                if (boosterCard1)
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") drew although a booster with " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
                else
                {
                    roundLog = (card1Deck.ToBattleString() + " (" + username1 + ") drew with " + card2Deck.ToBattleString() + " (" + username2 + ")");
                }
            }

            return(roundLog);
        }