コード例 #1
0
        public void CastEggs_Level2Spells([Range(0, 2)] int level2EggIndex)
        {
            Tuple <MagicType, string> eggCombo = _level2Eggs[level2EggIndex];

            string    spellName = eggCombo.Item2;
            MagicType spellType = eggCombo.Item1;

            Spell spell  = SpellFactory.GetSpell(spellName);
            int   damage = spell.Power + _chicken.MagicStrength;

            _hero.SetMove(_doNothingMove, 4);
            _hero.SetMove(_runawayMove);
            _hero.SetMoveTarget(_hero);

            _sidekick.SetHealth(damage + 1);
            _sidekick.SetMove(_doNothingMove);
            _sidekick.SetMoveTarget(_sidekick);

            int typeIndex = Globals.EggMagicTypes.ToList().IndexOf(spellType);

            _chanceService.PushWhichEventsOccur(typeIndex, typeIndex, (typeIndex + 1) % 3, 1); //the 3 egg types and targetting the sidekick

            _battleManager.SuppressBattleIntroAndOutroMessages();
            _battleManager.Battle(_humanTeam, _enemyTeam);

            var outputs = _output.GetOutputs();

            Assert.AreEqual(5, outputs.Length); // 1 for each egg lay, 1 for actual attack, 1 to output how much damage the fighter took

            Assert.AreEqual(_castPrefix + spellName + "!\n", outputs[3].Message);

            Assert.AreEqual(1, _sidekick.CurrentHealth);
        }
コード例 #2
0
        public void CastSpell_CorrectlyReflectsSpells([Values(MagicType.Fire, MagicType.Ice, MagicType.Lightning)] MagicType spellType,
                                                      [Values(true, false)] bool reflectAll)
        {
            const int spellCost  = 5;
            const int spellPower = 5;
            const int expectedRemainingHealth = 100 - spellPower;

            Spell      spell       = new Spell("foo", spellType, SpellType.Attack, TargetType.SingleEnemy, spellCost, spellPower);
            BattleMove runawayMove = MoveFactory.Get(BattleMoveType.Runaway);

            MagicType     reflectType = reflectAll ? MagicType.All : spellType;
            ReflectStatus status      = new ReflectStatus(1, reflectType);

            _human.SetHealth(100);
            _human.SetMana(spellCost);
            _human.SetMagicStrength(0);
            _human.SetMagicBonus(spellType, 0);
            _human.SetMagicResistance(0);
            _human.SetResistanceBonus(spellType, 0);
            _human.AddSpell(spell);
            _human.SetMove(spell, 1);
            _human.SetMove(runawayMove);
            _human.SetMoveTarget(_enemy);

            _enemy.AddStatus(status);
            _enemy.SetHealth(100);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(_enemy.MaxHealth, _enemy.CurrentHealth, "enemy should still have full health, the spell should have been reflected!");
            Assert.AreEqual(expectedRemainingHealth, _human.CurrentHealth, "the human should have lost 5 health from being hit by their own spell!");
        }
コード例 #3
0
ファイル: ShadeTests.cs プロジェクト: Jsweeney1000/SimpleRPG
        public void MalevolenceCharge_CorrectlyRaisesMalevolenceAttackPower()
        {
            TestHumanFighter fighter2 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);

            _humanFighter.SetHealth(100);
            fighter2.SetHealth(100);

            Team shadeTeam = new Team(TestMenuManager.GetTestMenuManager(), _shade1, _shade2);
            Team humanTeam = new Team(_menuManager, _humanFighter, fighter2);

            _humanFighter.SetMove(_doNothingMove, 3);
            _humanFighter.SetMove(_runawayMove);
            fighter2.SetMove(_doNothingMove);

            _chanceService.PushWhichEventsOccur(_malevolenceAttackIndex, 0, _malevolenceChargeIndex); //first round, _shade1 attacks HumanFighter1, _shade2 charges
            _chanceService.PushWhichEventsOccur(_malevolenceChargeIndex, _malevolenceChargeIndex);    //second round, both shades charge
            _chanceService.PushWhichEventsOccur(_malevolenceChargeIndex, _malevolenceAttackIndex, 1); //third round, _shade1 charges again, _shade2 attacks
            _chanceService.PushAttackHitsNotCrit(2);

            _battleManager.Battle(humanTeam, shadeTeam);

            int fighter1Damage = _humanFighter.MaxHealth - _humanFighter.CurrentHealth;
            int fighter2Damage = fighter2.MaxHealth - fighter2.CurrentHealth;

            Assert.Greater(fighter2Damage, fighter1Damage);
        }
コード例 #4
0
        public void MessageDisplayed_OnFighterHealed([Values(5, 10, 25)] int healAmount, [Values] bool shouldTryToOverheal)
        {
            //arrange
            _humanPlayer1.SetHealth(100, shouldTryToOverheal ? 99 : 1);
            _humanPlayer1.SetMove(_doNothingMove);
            _humanPlayer2.SetMove(_doNothingMove);

            _humanTeam.SetDeathsOnRoundEndEvent();

            _enemyPlayer1.SetMove(_doNothingMove);
            _enemyPlayer2.SetMove(_doNothingMove);

            _humanPlayer1.TurnEnded += delegate { _humanPlayer1.Heal(healAmount); };

            //Act
            _battleManager.Battle(_humanTeam, _enemyTeam);

            //Assert
            MockOutputMessage[] outputs = _output.GetOutputs();

            int               expectedHealAmount = shouldTryToOverheal ? 1 : healAmount;
            string            expectedMessage    = $"{_humanPlayer1.DisplayName} was healed for {expectedHealAmount} HP!\n";
            MockOutputMessage output             = outputs.FirstOrDefault(o => o.Message == expectedMessage);

            Assert.NotNull(output);
        }
コード例 #5
0
        public void ConditionalDanceMove_ExecutesAppropriateEffectWhenDanceInEffect([Values(DanceEffectType.Fire, DanceEffectType.Danger)] DanceEffectType danceEffectType)
        {
            _testTechnique.ClearEffects();
            _testTechnique.SetDanceEffect(danceEffectType);

            RestorationBattleMoveEffect conditionalHealEffect = GetRestoreHealthEffect(danceEffectType);
            AttackBattleMove            attackWithHeal        = new AttackBattleMove("foo", TargetType.SingleEnemy, 100, 0, effects: conditionalHealEffect);

            _human2.SetMove(_testTechnique, 1);
            _human2.SetSpeed(1);

            _human1.SetHealth(100, 10);
            _human1.SetMove(attackWithHeal, 1);
            _chanceService.PushEventsOccur(true, false); //attack hits, is not crit
            _human1.SetStrength(_enemy1.MaxHealth);
            _human1.SetMoveTarget(_enemy1);

            _enemyTeam = new Team(_menuManager, _enemy1);

            _enemy1.SetDefense(0);
            _enemy1.SetMove(_doNothingMove);
            _enemy1.SetMoveTarget(_enemy1);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(20, _human1.CurrentHealth, "Human1 should have regained 10 HP when the attack was successful and the dance effect was active");
        }
コード例 #6
0
        public void CorrectlyKeysOffOwnersHealth([Values(10, 50)] int maxHealth)
        {
            _owner.SetHealth(maxHealth);

            _menu.Build(_owner, _ownerTeam, _enemyTeam, null);

            _input.Push($"{maxHealth}", $"{maxHealth - 1}");

            NumberInputMenuSelection selection = _menu.GetInput() as NumberInputMenuSelection;

            Assert.AreEqual(maxHealth - 1, selection?.Number);
        }
コード例 #7
0
        public void DamageMethod_AppropriatelyRaisesEvents_WhenFighterSurvives()
        {
            _fighter.SetHealth(5);
            _fighter.PhysicalDamage(2);

            var logs = _logger.Logs;

            Assert.AreEqual(1, logs.Count);
            Assert.AreEqual(EventType.DamageTaken, logs[0].Type);
            Assert.AreEqual(_fighter, logs[0].Sender);
            var e = logs[0].E as PhysicalDamageTakenEventArgs;

            Assert.NotNull(e);
            Assert.AreEqual(2, e.Damage);
        }
コード例 #8
0
        public void Setup()
        {
            _fighter = new TestHumanFighter("Hero", 1);
            _fighter.SetHealth(FighterHealth);
            _fighter.SetMana(FighterMana);
            _fighter.SetStrength(FighterAttack);
            _fighter.SetDefense(FighterDefense);
            _fighter.SetSpeed(FighterSpeed);
            _fighter.SetEvade(FighterEvade);
            _fighter.SetLuck(FighterLuck);

            _factoryFighter = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "Ted");
            _factoryFighter.AddSpell(SpellFactory.GetSpell(MagicType.Fire, 1));
            _enemy             = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1, "enemy");
            _armoredEnemy      = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1, "armored");
            _superArmoredEnemy = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1, "super armored");

            _input         = new MockInput();
            _output        = new MockOutput();
            _menuManager   = new TestMenuManager(_input, _output);
            _chanceService = new MockChanceService();

            _battleManager = new TestBattleManager(_chanceService, _input, _output);

            var humanTeam = new Team(_menuManager, _fighter);

            _battleManager.SetHumanTeam(humanTeam);

            var enemyTeam = new Team(_menuManager, _enemy);

            _battleManager.SetEnemyTeam(enemyTeam);

            _battleManager.SetConfig(new BattleManagerBattleConfiguration());
        }
コード例 #9
0
        public void RestoreHealthEffect_AppropriatelyExecuted_AttackHits()
        {
            int initialHealth = 100 - _restoreHealthEffect.Percentage;

            _human.SetHealth(100, initialHealth);
            _human.SetMana(100, 0);
            _human.SetMove(_attackWithRestoreHealthEffect);
            _human.SetMoveTarget(_enemy);
            _chanceService.PushEventsOccur(true, false); //attack hits, not a crit

            _enemy.SetMove(_doNothingMove);
            _enemy.SetMoveTarget(_enemy);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(_human.MaxHealth, _human.CurrentHealth, "humman player's health should have been restored when the attack hit!");
            Assert.AreEqual(0, _human.CurrentMana, "humman player's mana should have been unaffected by the restore effect!");
        }
コード例 #10
0
        public void TestHumanFighter_CorrectlyDies_SetDeathOnTurnEndEventCalled()
        {
            _fighter.SetHealth(100);
            _fighter.SetDeathOnTurnEndEvent();

            Assert.AreEqual(100, _fighter.CurrentHealth);

            _fighter.OnTurnEnded(new TurnEndedEventArgs(_fighter));

            Assert.AreEqual(0, _fighter.CurrentHealth);
        }
コード例 #11
0
        public void DoesNotCounter_MagicAttacks()
        {
            Spell fireball = new Spell("fire", MagicType.Fire, SpellType.Attack, TargetType.SingleEnemy, 0, 1);

            _humanFighter.AddStatus(_status);

            _humanFighter.SetHealth(_enemy.MagicStrength + fireball.Power + 1);
            _humanFighter.SetMove(_doNothing, 1);
            _humanFighter.SetMove(_runawayMove);

            _enemy.AddSpell(fireball);
            _enemy.SetMove(fireball);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(1, _humanFighter.CurrentHealth);
            Assert.AreEqual(_enemy.MaxHealth, _enemy.CurrentHealth);
        }
コード例 #12
0
        public void CorrectlyRaisesMoveExecutorsMaxHealth_ByShadeLevel_DominatingMoveSucceeds([Range(1, 4)] int shadeLevel)
        {
            Shade            shade            = FighterFactory.GetShade(1, shadeLevel: shadeLevel);
            TestHumanFighter fighter          = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            const int        initialMaxHealth = 10;

            fighter.SetHealth(initialMaxHealth);

            BattleMoveWithTargetAndNumberInput moveWithTarget = new BattleMoveWithTargetAndNumberInput(_bloodMove, shade, fighter, 1);

            _chanceService.PushEventOccurs(true);

            //act
            _copperBell.ExecuteMove(moveWithTarget);

            //assert
            int expectedMaxHealth = initialMaxHealth + shadeLevel;

            Assert.AreEqual(expectedMaxHealth, fighter.MaxHealth);
        }
コード例 #13
0
        public void SetUp()
        {
            _input         = new MockInput();
            _output        = new MockOutput();
            _chanceService = new MockChanceService();
            _menuManager   = new TestMenuManager(_input, _output, new MenuFactory());

            _battleManager = new BattleManager(_chanceService, _input, _output);

            _shadeGrouping = new ShadeFighterGrouping(_chanceService, new Shade(1, _chanceService, 1), new Shade(1, _chanceService, 1), new Shade(1, _chanceService, 1));
            _shadeTeam     = new Team(TestMenuManager.GetTestMenuManager(), _shadeGrouping);

            _humanFighter = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            _humanFighter.SetHealth(5);
            _humanFighter.SetSpeed(_shadeTeam.Fighters[0].Speed + 1);
            _humanTeam = new TestTeam(_menuManager, _humanFighter);

            _enemy     = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1);
            _enemyTeam = new Team(TestMenuManager.GetTestMenuManager(), _enemy);
        }
コード例 #14
0
        public void StatusesRemoved_OnRoundEnd()
        {
            StatMultiplierStatus boostDefenseStatus = new StatMultiplierStatus(1, StatType.Defense, 2);

            _humanFighter.SetDefense(1);
            _humanFighter.SetHealth(1);
            _humanFighter.AddStatus(boostDefenseStatus);
            _humanFighter.SetMove(_doNothing, 1);
            _humanFighter.SetMove(_runawayMove);

            _enemy.SetMove(_basicAttackMove);
            _enemy.SetMoveTarget(_humanFighter);
            _enemy.SetStrength(2);

            _chanceService.PushEventsOccur(true, false);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(1, _humanFighter.CurrentHealth);
        }
コード例 #15
0
        public void CorrectlyHealsMoveExecutor_SealingMoveSucceeds()
        {
            Shade shade = (Shade)TestFighterFactory.GetFighter(TestFighterType.Shade, 1);

            _logger.Subscribe(EventType.FighterSealed, shade);
            TestHumanFighter fighter = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);

            fighter.SetHealth(10, 9);

            BattleMoveWithTarget moveWithTarget = new BattleMoveWithTarget(_prayMove, shade, fighter);

            _chanceService.PushEventOccurs(true);

            Assert.AreNotEqual(fighter.MaxHealth, fighter.CurrentHealth);

            //act
            _copperBell.ExecuteMove(moveWithTarget);

            //assert
            Assert.AreEqual(fighter.MaxHealth, fighter.CurrentHealth);
        }