Exemplo n.º 1
0
        public void PlayerHasReflectDamageEffectUnitTest()
        {
            Player player = new Player("test", PlayerClassType.Mage);
            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                MaxRound     = 4,
                Name         = "reflect damage test"
            };
            IEffect reflectEffect = new ReflectDamageEffect(effectAmountSettings);

            player.Effects.Add(reflectEffect);

            Assert.AreEqual(1, player.Effects.Count);
            Assert.AreEqual(true, player.Effects[0] is ReflectDamageEffect);
            Assert.AreEqual(1, player.Effects[0].CurrentRound);
            Assert.AreEqual(effectAmountSettings.MaxRound, player.Effects[0].MaxRound);
            Assert.AreEqual(false, player.Effects[0].IsHarmful);
            Assert.AreEqual(reflectEffect.EffectHolder, player);
        }
Exemplo n.º 2
0
        public void ProcessReflectDamageEffectOutOfCombatRoundUnitTest()
        {
            OutputHelper.Display.ClearUserOutput();
            Player player = new Player("test", PlayerClassType.Mage);
            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                MaxRound     = 4,
                Name         = "reflect damage test"
            };
            ReflectDamageEffect reflectEffect = new ReflectDamageEffect(effectAmountSettings);

            player.Effects.Add(reflectEffect);
            const string reflectMessage = "Your spell reflect is slowly fading away.";

            reflectEffect.ProcessRound();

            Assert.AreEqual(reflectMessage, OutputHelper.Display.Output[0][2]);
            Assert.AreEqual(effectAmountSettings.Amount, reflectEffect.ReflectDamageAmount);
            Assert.AreEqual(2, player.Effects[0].CurrentRound);
            Assert.AreEqual(false, reflectEffect.IsEffectExpired);
        }
Exemplo n.º 3
0
        public void ProcessReflectDamageEffectInCombatRoundUnitTest()
        {
            OutputHelper.Display.ClearUserOutput();
            Player player = new Player("test", PlayerClassType.Mage);
            EffectAmountSettings effectAmountSettings = new EffectAmountSettings {
                Amount       = 50,
                EffectHolder = player,
                MaxRound     = 4,
                Name         = "reflect damage test"
            };
            ReflectDamageEffect reflectEffect = new ReflectDamageEffect(effectAmountSettings);

            player.Effects.Add(reflectEffect);
            const int incomingDamage = 30;
            string    reflectMessage = $"You reflected {incomingDamage} damage back at your opponent!";

            reflectEffect.ProcessChangeDamageRound(incomingDamage);

            Assert.AreEqual(reflectMessage, OutputHelper.Display.Output[0][2]);
            Assert.AreEqual(2, player.Effects[0].CurrentRound);
            Assert.AreEqual(false, reflectEffect.IsEffectExpired);
        }
Exemplo n.º 4
0
        public void ReflectDamageSpellUnitTest()
        {
            OutputHelper.Display.ClearUserOutput();
            Player player = new Player("test", PlayerClassType.Mage)
            {
                MaxManaPoints = 100, ManaPoints = 100
            };
            Monster monster = new Monster(3, MonsterType.Zombie)
            {
                HitPoints = 100, MaxHitPoints = 100
            };

            MonsterBuilder.BuildMonster(monster);
            foreach (IItem item in monster.MonsterItems.Where(item => item is IEquipment eItem && eItem.Equipped))
            {
                IEquipment eItem = item as IEquipment;
                eItem.Equipped = false;
            }
            player.Spellbook.Add(new PlayerSpell(
                                     "reflect", 100, 1, SpellType.Reflect, 4));
            string[] inputInfo  = new[] { "spell", "reflect" };
            int      spellIndex = player.Spellbook.FindIndex(
                f => f.SpellCategory == SpellType.Reflect);

            PlayerHelper.SpellInfo(player, inputInfo);
            Assert.AreEqual("Reflect", OutputHelper.Display.Output[0][2]);
            Assert.AreEqual("Rank: 1", OutputHelper.Display.Output[1][2]);
            Assert.AreEqual("Mana Cost: 100", OutputHelper.Display.Output[2][2]);
            Assert.AreEqual("Reflect Damage Amount: 25", OutputHelper.Display.Output[3][2]);
            string reflectInfoString = $"Damage up to {player.Spellbook[spellIndex].ChangeAmount.Amount} will be reflected for " +
                                       $"{player.Spellbook[spellIndex].ChangeAmount.ChangeMaxRound} rounds.";

            Assert.AreEqual(reflectInfoString, OutputHelper.Display.Output[4][2]);
            string[] input     = new[] { "cast", "reflect" };
            string   spellName = InputHelper.ParseInput(input);

            Assert.AreEqual("reflect", spellName);
            player.CastSpell(spellName);
            Assert.AreEqual(player.MaxManaPoints - player.Spellbook[spellIndex].ManaCost, player.ManaPoints);
            Assert.AreEqual("You create a shield around you that will reflect damage.",
                            OutputHelper.Display.Output[5][2]);
            Assert.AreEqual(true, player.Effects.Any());
            Assert.AreEqual(true, player.Effects[0] is ReflectDamageEffect);
            ReflectDamageEffect reflectDmgEffect = player.Effects[0] as ReflectDamageEffect;

            OutputHelper.Display.ClearUserOutput();
            for (int i = 2; i < 5; i++)
            {
                int attackDamageM = monster.MonsterWeapon.Attack();
                int reflectAmount = reflectDmgEffect.ReflectDamageAmount < attackDamageM ?
                                    reflectDmgEffect.ReflectDamageAmount : attackDamageM;
                Assert.AreEqual(true, reflectAmount <= reflectDmgEffect.ReflectDamageAmount);
                monster.HitPoints -= reflectAmount;
                Assert.AreEqual(monster.HitPoints, monster.MaxHitPoints - (reflectAmount * (i - 1)));
                reflectDmgEffect.ProcessChangeDamageRound(reflectAmount);
                Assert.AreEqual(
                    $"You reflected {reflectAmount} damage back at your opponent!",
                    OutputHelper.Display.Output[i - 2][2]);
            }
            GameHelper.RemovedExpiredEffectsAsync(player);
            Thread.Sleep(1000);
            Assert.AreEqual(false, player.Effects.Any());
        }