コード例 #1
0
        public void BattleMoveQueue_SortAndPopOperation_ReturnsCorrectMove()
        {
            TestHumanFighter fighter1 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter2 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter3 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);

            //sorted order is 2, 3, 1
            fighter1.SetSpeed(0);
            fighter2.SetSpeed(2);
            fighter3.SetSpeed(1);

            List <BattleMoveWithTarget> initializerList = new List <BattleMoveWithTarget>
            {
                new BattleMoveWithTarget(_testMove, fighter1, fighter1),
                new BattleMoveWithTarget(_testMove, fighter2, fighter2),
                new BattleMoveWithTarget(_testMove, fighter3, fighter3)
            };

            BattleMoveQueue queue = new BattleMoveQueue(initializerList);

            BattleMoveWithTarget firstSortedMove = queue.SortAndPop();
            IFighter             owner           = firstSortedMove.Owner;

            Assert.AreEqual(fighter2, owner);

            Assert.AreEqual(2, queue.Count);
        }
コード例 #2
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());
        }
コード例 #3
0
        public void BattleMoveQueue_SortOperation_DefaultsBySpeedAndPriority()
        {
            TestHumanFighter fighter1 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter2 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter3 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter4 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter5 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter6 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter7 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter8 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter9 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);

            TestHumanFighter[] expectedOrderedFighters =
            {
                fighter9, fighter6, fighter3, //the high priority
                fighter8, fighter5, fighter2, //the med priority
                fighter7, fighter4, fighter1  //the low priority
            };

            fighter1.SetSpeed(0);
            fighter2.SetSpeed(0);
            fighter3.SetSpeed(0);
            fighter4.SetSpeed(1);
            fighter5.SetSpeed(1);
            fighter6.SetSpeed(1);
            fighter7.SetSpeed(2);
            fighter8.SetSpeed(2);
            fighter9.SetSpeed(2);

            BattleMove lowPriorityMove  = new BattleMove("foo", BattleMoveType.DoNothing, TargetType.Self, -1);
            BattleMove medPriorityMove  = new BattleMove("bar", BattleMoveType.DoNothing, TargetType.Self);
            BattleMove highPriorityMove = new BattleMove("baz", BattleMoveType.DoNothing, TargetType.Self, 1);

            List <BattleMoveWithTarget> initializerList = new List <BattleMoveWithTarget>
            {
                new BattleMoveWithTarget(lowPriorityMove, fighter1, fighter1),
                new BattleMoveWithTarget(lowPriorityMove, fighter4, fighter4),
                new BattleMoveWithTarget(lowPriorityMove, fighter7, fighter7),
                new BattleMoveWithTarget(medPriorityMove, fighter2, fighter2),
                new BattleMoveWithTarget(medPriorityMove, fighter5, fighter5),
                new BattleMoveWithTarget(medPriorityMove, fighter8, fighter8),
                new BattleMoveWithTarget(highPriorityMove, fighter3, fighter3),
                new BattleMoveWithTarget(highPriorityMove, fighter6, fighter6),
                new BattleMoveWithTarget(highPriorityMove, fighter9, fighter9)
            };

            BattleMoveQueue queue = new BattleMoveQueue(initializerList);

            queue.Sort();

            for (int i = 0; i < 9; ++i)
            {
                BattleMoveWithTarget move  = queue.Pop();
                IFighter             owner = move.Owner;
                Assert.AreEqual(expectedOrderedFighters[i], owner, $"i: {i}");
            }
        }
コード例 #4
0
        public void BattleManager_CorrectlySetsShield_WhenExecutingShieldMove()
        {
            const int             shieldDefense = 5;
            const int             shieldHealth  = 1;
            ElementalBattleShield shield        = new ElementalBattleShield(shieldHealth, shieldDefense, 0, MagicType.Lightning);
            ShieldMove            shieldMove    = new ShieldMove("foo", TargetType.Self, null, shield);

            _humanFighter.SetSpeed(1);
            _humanFighter.SetMove(shieldMove, 1);
            _humanFighter.SetMove(_runawayMove);

            _enemy.SetStrength(shieldHealth + shieldDefense);
            _enemy.SetMove(_basicAttackMove);
            _chanceService.PushEventsOccur(true, false); //attack hits, is not a crit

            _battleManager.Battle(_humanTeam, _enemyTeam);

            Assert.AreEqual(_humanFighter.MaxHealth, _humanFighter.CurrentHealth);
        }
コード例 #5
0
        public void StatusTechnique_AppropriatelyAssignsStatusToTarget()
        {
            StatMultiplierStatus status     = new StatMultiplierStatus(3, StatType.Strength, 1.5);
            StatusMove           statusMove = new StatusMove("raise attack", TargetType.SingleAlly, status);

            TestHumanFighter fighter2 = new TestHumanFighter("foo 2", 1);

            _humanTeam = new TestTeam(_humanFighter, fighter2);

            _humanFighter.SetSpeed(1);
            _humanFighter.SetMove(statusMove);
            _chanceService.PushEventOccurs(true);
            _humanFighter.SetMoveTarget(fighter2);
            _logger.Subscribe(EventType.StatusAdded, fighter2);

            BattleMove attack = MoveFactory.Get(BattleMoveType.Attack);

            fighter2.SetStrength(2);
            fighter2.SetMove(attack);
            fighter2.SetMoveTarget(_enemy);
            _chanceService.PushEventOccurs(true);  //attack hits
            _chanceService.PushEventOccurs(false); //attack is not a crit

            //enemy won't be killed if the status isn't assigned to _fighter2
            _enemy.SetHealth(3);
            _enemy.SetMove(_doNothing);
            _enemy.SetMoveTarget(_enemy);

            //once Statuses are removed after battle, won't be able to
            _battleManager.Battle(_humanTeam, _enemyTeam);

            List <EventLog> logs = _logger.Logs;

            Assert.AreEqual(1, logs.Count);

            EventLog log = logs[0];

            Assert.AreEqual(EventType.StatusAdded, log.Type);
            StatusAddedEventArgs e = log.E as StatusAddedEventArgs;

            Assert.NotNull(e);
            Assert.IsTrue(status.AreEqual(e.Status));
        }
コード例 #6
0
        public void BattleManagerCorrectlyExecutesBellSealingMove()
        {
            //Arrange
            List <Shade> shades = _shadeGrouping.GetShades();

            _humanFighter.SetSpeed(shades[0].Speed + 1);

            List <Bell> bells = GetBells(BellType.Copper, BellType.Silver);

            _input.Push("special", "pray copper", "1", "run", "y");

            _chanceService.PushEventOccurs(true); //sealing is effective
            int attackIndex = shades[0].AvailableMoves.FindIndex(am => am.MoveType == BattleMoveType.Attack);

            _chanceService.PushWhichEventsOccur(attackIndex, attackIndex, attackIndex);
            _chanceService.PushEventsOccur(false, false); //both remaining shades will attack

            //Act
            _battleManager.Battle(_humanTeam, _shadeTeam, bells.Cast <TerrainInteractable>().ToList());

            //Assert

            //1st shade was sealed
            Assert.AreEqual(0, shades[0].CurrentHealth);

            //other shades did not absorb its power
            Assert.AreEqual(1, shades[1].ShadeExperience);
            Assert.AreEqual(1, shades[2].ShadeExperience);
        }
コード例 #7
0
        public void BattleManager_AppropriatelyTicksDownDanceEffectCounter([Values(DanceEffectType.Heart, DanceEffectType.Danger)] DanceEffectType danceEffectType)
        {
            const int danceDuration = 4;

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

            _testTechnique.ClearEffects();
            _testTechnique.SetDanceEffect(danceEffectType);
            _testTechnique.SetDuration(danceDuration);

            _human1.SetMove(_testTechnique, 1);
            _human1.SetMove(_doNothingMove);
            _human1.SetMoveTarget(_human1);
            _human1.SetSpeed(1);

            _human2.SetHealth(100, 10);
            _human2.SetMove(attackWithHeal, 6);
            for (var i = 0; i < 6; ++i)
            {
                _chanceService.PushEventsOccur(true, false); //attack hits, does not miss
            }
            _human2.SetMove(_runawayMove);
            _human2.SetMoveTarget(_enemy1);
            _human2.SetStrength(_enemy1.Defense);

            _enemy1.SetHealth(100);
            _enemy1.SetMove(_doNothingMove);
            _enemy1.SetMoveTarget(_enemy1);

            _enemy2.SetHealth(100);
            _enemy2.SetMove(_doNothingMove);
            _enemy2.SetMoveTarget(_enemy2);

            _battleManager.Battle(_humanTeam, _enemyTeam);

            int expectedHealth = 10 + (danceDuration * 10);

            Assert.AreEqual(expectedHealth, _human2.CurrentHealth); //will be 20 higher if the effect doesn't wear off
        }
コード例 #8
0
        private void PhysicalDamageEvent_Setup(int expectedDamage, bool showPhysicalDamageMessages)
        {
            Team             mixedPlayerTeam = new Team(_menuManager, _humanPlayer1, _enemyPlayer1);
            TestEnemyFighter enemy3          = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1);
            Team             enemyTeam       = new Team(_menuManager, _enemyPlayer2, enemy3);

            _humanPlayer1.SetSpeed(2);
            _humanPlayer1.SetStrength(expectedDamage);
            _humanPlayer1.SetMove(_basicAttackMove, 1);
            _humanPlayer1.SetMove(_runawayMove);
            _humanPlayer1.SetMoveTarget(_enemyPlayer2);
            _enemyPlayer2.SetHealth(expectedDamage + 1);

            _enemyPlayer1.SetSpeed(1);
            _enemyPlayer1.SetStrength(expectedDamage);
            _enemyPlayer1.SetMove(_basicAttackMove);
            _enemyPlayer1.SetMoveTarget(enemy3);
            enemy3.SetHealth(expectedDamage + 1);

            _mockChanceService.PushEventsOccur(true, false, true, false); //both attacks hit, neither are crits
            _logger.Subscribe(EventType.DamageTaken, _enemyPlayer2);
            _logger.Subscribe(EventType.DamageTaken, enemy3);

            _enemyPlayer2.SetMove(_doNothingMove);
            enemy3.SetMove(_doNothingMove);

            BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration
            {
                ShowIntroAndOutroMessages  = false,
                ShowExpAndLevelUpMessages  = false,
                ShowDeathMessages          = false,
                ShowAttackMessages         = false,
                ShowPhysicalDamageMessages = showPhysicalDamageMessages
            };

            _battleManager.Battle(mixedPlayerTeam, enemyTeam, config: config);
        }
コード例 #9
0
        public void BattleManager_CorrectlySubscribesToAddedShieldsEvents()
        {
            BattleShield shield     = new IronBattleShield(1, 0, 0);
            ShieldMove   shieldMove = new ShieldMove("foo", TargetType.Self, null, shield);

            _humanPlayer1.SetMove(shieldMove, 1);
            _humanPlayer1.SetMove(_doNothingMove);
            _humanPlayer1.SetMoveTarget(_humanPlayer1);
            _humanPlayer1.SetSpeed(1);

            _enemyPlayer1.SetMove(_basicAttackMove);
            _enemyPlayer1.SetStrength(1000);
            _enemyPlayer1.SetMoveTarget(_humanPlayer1);
            _chanceService.PushEventsOccur(true, false, true, false); //two attacks to end the battle, both hit, neither are crits

            _logger.Subscribe(EventType.ShieldAdded, _humanPlayer1);

            _humanTeam = new Team(_menuManager, _humanPlayer1);
            _enemyTeam = new Team(_menuManager, _enemyPlayer1);

            BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration
            {
                ShowIntroAndOutroMessages = false,
                ShowDeathMessages         = false,
                ShowExpAndLevelUpMessages = false,
                ShowShieldAddedMessage    = false
            };

            _battleManager.Battle(_humanTeam, _enemyTeam, config: config);

            MockOutputMessage[] outputs = _output.GetOutputs();

            int expectedOutputCount = 2 * 2 + 1; //"enemy attacks!" and "it did ____ damage" message for both attacks, as well as "shield destroyed!"

            Assert.AreEqual(expectedOutputCount, outputs.Length);
        }
コード例 #10
0
ファイル: ShadeTests.cs プロジェクト: Jsweeney1000/SimpleRPG
        public void Setup()
        {
            _logger      = new EventLogger();
            _input       = new MockInput();
            _output      = new MockOutput();
            _menuManager = new TestMenuManager(_input, _output);

            _chanceService = new MockChanceService();
            TestFighterFactory.SetChanceService(_chanceService);

            _shade1 = (Shade)FighterFactory.GetFighter(FighterType.Shade, 1);
            _shade2 = (Shade)FighterFactory.GetFighter(FighterType.Shade, 1);
            _shade3 = (Shade)FighterFactory.GetFighter(FighterType.Shade, 1);
            _shades = new List <Shade> {
                _shade1, _shade2, _shade3
            };
            _shadeGrouping = new ShadeFighterGrouping(_chanceService, _shades.ToArray());
            _shadeTeam     = new Team(TestMenuManager.GetTestMenuManager(), _shadeGrouping);

            _humanFighter = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            _humanFighter.SetSpeed(_shade1.Speed + 1);
            _humanTeam = new Team(_menuManager, _humanFighter);

            List <BattleMove> executableMoves = _shade1.GetExecutableMoves(_humanTeam);

            _absorptionMoveIndex    = executableMoves.FindIndex(bm => bm.MoveType == BattleMoveType.AbsorbShade);
            _malevolenceChargeIndex = executableMoves.FindIndex(bm => bm.MoveType == BattleMoveType.Special);
            _malevolenceAttackIndex = executableMoves.FindIndex(bm => bm.MoveType == BattleMoveType.ConditionalPowerAttack);
            _darkFogIndex           = executableMoves.FindIndex(bm => bm is StatusMove);

            _malevolenceChargeMove = executableMoves[_malevolenceChargeIndex];
            _malevolenceAttackMove = executableMoves[_malevolenceAttackIndex];
            _shadeAbsorbingMove    = executableMoves[_absorptionMoveIndex];

            Shade fooShade = new Shade(1, _chanceService, 1);
            Team  fooTeam  = new Team(TestMenuManager.GetTestMenuManager(), fooShade);

            fooShade.SetTeam(fooTeam);
            List <BattleMove> fooExecutableAttacks = fooShade.GetExecutableMoves(_humanTeam);

            _malevolenceAttackNoAbsorptionMoveIndex =
                fooExecutableAttacks.FindIndex(bm => bm.MoveType == BattleMoveType.ConditionalPowerAttack);
            _malevolenceChargeNoAbsorptionMoveIndex =
                fooExecutableAttacks.FindIndex(bm => bm.MoveType == BattleMoveType.Special);

            _battleManager = new TestBattleManager(_chanceService, _input, _output);
        }
コード例 #11
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);
        }
コード例 #12
0
        public void BattleManager_CorrectlyPrintsMessages_TargetHasShield([Values("eats pudding", null)] string executionMessage)
        {
            const int        shieldDefense    = 5;
            const int        shieldHealth     = 1;
            IronBattleShield shield           = new IronBattleShield(shieldHealth, shieldDefense, 0);
            ShieldBusterMove shieldBusterMove = new ShieldBusterMove("foo", TargetType.SingleEnemy, executionMessage);

            _humanFighter.SetSpeed(1);
            _humanFighter.SetMove(shieldBusterMove, 1);
            _humanFighter.SetMove(_runawayMove);
            _humanFighter.SetMoveTarget(_enemy);

            _enemy.SetBattleShield(shield);
            //_logger.SubscribeAll(_enemy.BattleShield);
            _enemy.SetMove(_doNothingMove);

            BattleManagerBattleConfiguration config = new BattleManagerBattleConfiguration
            {
                ShowIntroAndOutroMessages = false
            };

            _battleManager.Battle(_humanTeam, _enemyTeam, config: config);

            MockOutputMessage[] outputs = _output.GetOutputs();

            int expectedLength = 1;

            if (executionMessage != null)
            {
                expectedLength++;
            }
            Assert.AreEqual(expectedLength, outputs.Length);

            int i = 0;

            if (executionMessage != null)
            {
                Assert.AreEqual($"{_humanFighter.DisplayName} {executionMessage}!\n", outputs[i++].Message);
            }
            Assert.AreEqual($"{_enemy.DisplayName}'s shield was destroyed!\n", outputs[i].Message);
        }
コード例 #13
0
        public void BattleMoveQueue_SortOperation_DefaultsBySpeed()
        {
            TestHumanFighter fighter1 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter2 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            TestHumanFighter fighter3 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);

            //sorted order is 2, 3, 1
            fighter1.SetSpeed(0);
            fighter2.SetSpeed(2);
            fighter3.SetSpeed(1);

            List <BattleMoveWithTarget> initializerList = new List <BattleMoveWithTarget>
            {
                new BattleMoveWithTarget(_testMove, fighter1, fighter1),
                new BattleMoveWithTarget(_testMove, fighter2, fighter2),
                new BattleMoveWithTarget(_testMove, fighter3, fighter3)
            };

            BattleMoveQueue queue = new BattleMoveQueue(initializerList);

            queue.Sort();

            IFighter owner;

            //sorted order is 2, 3, 1
            BattleMoveWithTarget firstSortedMove = queue.Pop();

            owner = firstSortedMove.Owner;
            Assert.AreEqual(fighter2, owner);

            BattleMoveWithTarget secondSortedMove = queue.Pop();

            owner = secondSortedMove.Owner;
            Assert.AreEqual(fighter3, owner);

            BattleMoveWithTarget thirdSortedMove = queue.Pop();

            owner = thirdSortedMove.Owner;
            Assert.AreEqual(fighter1, owner);
        }
コード例 #14
0
        public void SetUp()
        {
            _output        = new MockOutput();
            _input         = new MockInput();
            _menuManager   = new TestMenuManager(_input, _output);
            _chanceService = new MockChanceService();
            _battleManager = new TestBattleManager(_chanceService, _input, _output);
            _logger        = new EventLogger();

            _human     = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1);
            _enemy     = (TestEnemyFighter)TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1);
            _humanTeam = new TestTeam(_human);
            _enemyTeam = new Team(_menuManager, _enemy);

            _human.SetSpeed(10);
            _enemy.SetSpeed(0);

            doNothing = new DoNothingMove();
            _enemy.SetMove(doNothing);

            _fireballSpell = SpellFactory.GetSpell(MagicType.Fire, 1);
        }
コード例 #15
0
        public void MultipleEffects_OnlyEffectsWhoseConditionsAreMet_AreFired([Values(10, 20)] int restoreAmount)
        {
            _human.SetHealth(100, 10);
            _human.SetMana(100, 10);
            _restoreManaEffect   = new RestorationBattleMoveEffect(RestorationType.Mana, restoreAmount, BattleMoveEffectActivationType.OnAttackHit, new DanceBattleCondition(DanceEffectType.Soul));
            _restoreHealthEffect = new RestorationBattleMoveEffect(RestorationType.Health, restoreAmount, BattleMoveEffectActivationType.OnAttackHit, new DanceBattleCondition(DanceEffectType.Fire));
            BattleMove attackWithRestoreEffects = new AttackBattleMove("", TargetType.SingleEnemy, 100, 0, effects: new BattleMoveEffect[] { _restoreManaEffect, _restoreHealthEffect });

            _human.SetMove(attackWithRestoreEffects);
            _human.SetMoveTarget(_enemy);
            _chanceService.PushAttackHitsNotCrit(); //attack hits, not a crit

            TestHumanFighter dancer =
                (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "dancer");

            TestDanceMove danceMove = new TestDanceMove("bar", TargetType.Field, 2);

            danceMove.SetDanceEffect(DanceEffectType.Fire);
            danceMove.AddMove(_doNothingMove);

            dancer.SetSpeed(1);
            dancer.SetMove(danceMove);
            dancer.SetMoveTarget(dancer);

            _humanTeam.Add(dancer, false);

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

            _battleManager.Battle(_humanTeam, _enemyTeam);

            int expectedCurrentAmount = 10 + restoreAmount;

            Assert.AreEqual(10, _human.CurrentMana, "humman player's mana should not have been restored, the dance condition wasn't met!");
            Assert.AreEqual(expectedCurrentAmount, _human.CurrentHealth, $"humman player's health should have been restored by {restoreAmount} when the attack hit!");
        }
コード例 #16
0
        public void BattleMoveQueue_SortOperation_CorrectlyAcceptsMethodToCalculateEffectiveSpeed([Values(1, 3)] int numberOfMovesToPop)
        {
            TestHumanFighter fighter1 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "Jeff");
            TestHumanFighter fighter2 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "Bill");
            TestHumanFighter fighter3 = (TestHumanFighter)TestFighterFactory.GetFighter(TestFighterType.TestHuman, 1, "Mike");

            //sorted order is Mike (3), Jeff (1), then Bill (2),
            //which is different than the initial order and different from speed order
            fighter1.SetSpeed(0);
            fighter2.SetSpeed(2);
            fighter3.SetSpeed(1);

            List <BattleMoveWithTarget> initializerList = new List <BattleMoveWithTarget>
            {
                new BattleMoveWithTarget(_testMove, fighter1, fighter1),
                new BattleMoveWithTarget(_testMove, fighter2, fighter2),
                new BattleMoveWithTarget(_testMove, fighter3, fighter3)
            };

            BattleMoveQueue queue = new BattleMoveQueue(initializerList);

            Func <IFighter, int> sortHelperFunc = f =>
            {
                int ret = 0;

                switch (f.BaseName)
                {
                case "Mike":
                    ret = 100;
                    break;

                case "Jeff":
                    ret = 50;
                    break;

                case "Bill":
                    ret = 10;
                    break;
                }

                return(ret);
            };

            queue.Sort(sortHelperFunc);

            //sorted order is Mike (3), Jeff (1), then Bill (2)
            BattleMoveWithTarget firstSortedMove = queue.Pop();
            IFighter             owner           = firstSortedMove.Owner;

            Assert.AreEqual(fighter3, owner);

            BattleMoveWithTarget secondSortedMove = queue.Pop();

            owner = secondSortedMove.Owner;
            Assert.AreEqual(fighter1, owner);

            BattleMoveWithTarget thirdSortedMove = queue.Pop();

            owner = thirdSortedMove.Owner;
            Assert.AreEqual(fighter2, owner);
        }