コード例 #1
0
        public void WarriorClass_Level1_CorrectlySetsUpSelectMove_NoAttackBoost()
        {
            _chanceService.PushWhichEventOccurs(0);

            List <BattleMove> availableMoves = _level1Warrior.AvailableMoves;
            int attackIndex      = availableMoves.FindIndex(bm => bm.MoveType == BattleMoveType.Attack);
            int evadeIndex       = availableMoves.FindIndex(bm => bm.MoveType == BattleMoveType.Status && (bm as StatusMove)?.Status is AutoEvadeStatus);
            int attackBoostIndex = availableMoves.FindIndex(bm => bm.MoveType == BattleMoveType.Status && (bm as StatusMove)?.Status is StatMultiplierStatus);

            _level1Warrior.SelectMove(_warriorTeam, _humanTeam);

            double[] chances = _chanceService.LastEventOccursArgs;

            Assert.AreEqual(0.25, chances[attackIndex]);
            Assert.AreEqual(0.25, chances[evadeIndex]);
            Assert.AreEqual(0.5, chances[attackBoostIndex]);
        }
コード例 #2
0
        public void SelectMove_ShouldReturnAttack_TwoEnemies()
        {
            _mockChanceService.PushWhichEventOccurs(0);
            var selectedMove = _fighter.SetupMove(_ownTeam, _doubleEnemyTeam);

            Assert.AreEqual(BattleMoveType.Attack, selectedMove.Move.MoveType);
            Assert.AreEqual("attack", selectedMove.Move.Description);

            Assert.AreEqual(_enemy1, selectedMove.Target);

            _mockChanceService.PushWhichEventOccurs(1);
            selectedMove = _fighter.SetupMove(_ownTeam, _doubleEnemyTeam);

            Assert.AreEqual(BattleMoveType.Attack, selectedMove.Move.MoveType);
            Assert.AreEqual("attack", selectedMove.Move.Description);
            Assert.AreEqual(_enemy2, selectedMove.Target);
        }
コード例 #3
0
ファイル: EggTests.cs プロジェクト: Jsweeney1000/SimpleRPG
        public void FighterFactory_CorrectlyRandomizesEggType_IfNoneSpecified()
        {
            TestFighterFactory.SetChanceService(_chanceService);
            _chanceService.PushWhichEventOccurs(0);

            Egg egg = (Egg)FighterFactory.GetFighter(FighterType.Egg, 1);

            Assert.AreEqual(Globals.EggMagicTypes[0], egg.MagicType);
        }
コード例 #4
0
ファイル: ZombieTests.cs プロジェクト: Jsweeney1000/SimpleRPG
        public void ZombieRevivesAfterDying()
        {
            //Will Revive after 1 round, excluding the round it was killed
            _mockChanceService.PushWhichEventOccurs(0);

            _zombie.PhysicalDamage(_zombie.MaxHealth);

            //zombies will not revive the same turn they had died
            //TODO: change this to OnRoundEnd
            _zombie.OnTurnEnded(new TurnEndedEventArgs(_zombie));
            Assert.IsFalse(_zombie.IsAlive());

            _zombie.OnTurnEnded(new TurnEndedEventArgs(_zombie));
            Assert.IsTrue(_zombie.IsAlive());
        }
コード例 #5
0
        public void GetTeam_AssignsAppropriateNumberOfEnemiesToTeam([Values(1, 2, 3, 4)] int numEnemies)
        {
            //push logic for determining how many fighters will be in the enemy team, driven by SubRegion configuration
            _chanceService.PushWhichEventOccurs(0);

            Type[] types = { typeof(Goblin), typeof(Fairy), typeof(Golem), typeof(Ogre) };
            for (var i = 0; i < numEnemies; ++i)
            {
                _chanceService.PushWhichEventOccurs(i);
            }

            SubRegion subRegion = new SubRegion(WorldSubRegion.Fields, 1, new [] { new ChanceEvent <int>(numEnemies, 1) },
                                                new[] { FighterType.Goblin, FighterType.Fairy, FighterType.Golem, FighterType.Ogre }, null);

            _enemyTeam = _teamFactory.GetTeam(subRegion);

            Assert.AreEqual(numEnemies, _enemyTeam.Fighters.Count);

            for (var i = 0; i < numEnemies; ++i)
            {
                var enemy = _enemyTeam.Fighters[i];
                Assert.AreEqual(types[i], enemy.GetType());
            }
        }
コード例 #6
0
        public void CorrectNumberOfBattlesBeforeBoss([Range(1, 3)] int numberBattles)
        {
            TeamConfiguration bossConfiguration = new TeamConfiguration(new EnemyConfiguration(FighterType.Barbarian, 5), new EnemyConfiguration(FighterType.ShieldGuy, 2), new EnemyConfiguration(FighterType.ShieldGuy, 3));
            SubRegion         subRegion         = new SubRegion(WorldSubRegion.Fields, numberBattles, new[] { new ChanceEvent <int>(1, 1) }, new[] { FighterType.Egg },
                                                                new BattlefieldConfiguration(bossConfiguration));

            SubRegion[] subRegions = { subRegion };

            Region fakeFieldsRegion = new Region(WorldRegion.Fields, new BattleMove[0], subRegions);

            _regionFactory.SetRegion(WorldRegion.Fields, fakeFieldsRegion);

            for (int i = 0; i < numberBattles; ++i)
            {
                Team team = GetSingleEnemyTeam();
                _teamFactory.PushTeams(team);
                _chanceService.PushWhichEventOccurs(0);
            }

            _regionManager = GetRegionManager();

            IFighter target = TestFighterFactory.GetFighter(TestFighterType.TestEnemy, 1);

            target.PhysicalDamage(target.MaxHealth);

            _humanFighter1.SetMove(_basicAttackMove, numberBattles);
            _humanFighter1.SetMoveTarget(target);
            _chanceService.PushAttackHitsNotCrit(numberBattles);
            _humanFighter1.SetMove(_runawayMove);

            _humanFighter2.SetMove(_doNothingMove);

            _chanceService.PushWhichEventsOccur(0, 0, 0, 0, 0, 0); //used for when the bosses are selecting their moves

            _regionManager.Battle(_battleManager, _humanTeam);

            List <Team> enemyTeams = _battleManager.GetAllEnemyTeams();

            Assert.AreEqual(numberBattles + 1, enemyTeams.Count);

            Team bossTeam = enemyTeams[numberBattles];

            Assert.AreEqual(3, bossTeam.Fighters.Count);

            Assert.True(bossTeam.Fighters.Exists(f => f is Barbarian && f.Level == 5));
            Assert.True(bossTeam.Fighters.Exists(f => f is ShieldGuy && f.Level == 2));
            Assert.True(bossTeam.Fighters.Exists(f => f is ShieldGuy && f.Level == 3));
        }
コード例 #7
0
        public void BattleCorrectlyEnds_AllShadesSealed([Range(1, 3)] int numberShades)
        {
            List <Bell> bells = GetBells(BellType.Copper);

            List <Shade> shades = new List <Shade>();

            int chargeMoveIndex = -1;

            for (int i = numberShades; i > 0; --i)
            {
                shades.Add(new Shade(1, _chanceService, 1));
            }

            ShadeFighterGrouping shadeGrouping = new ShadeFighterGrouping(_chanceService, shades.ToArray());

            _shadeTeam = new Team(TestMenuManager.GetTestMenuManager(), shadeGrouping);

            chargeMoveIndex =
                shades[0].GetExecutableMoves(_humanTeam).FindIndex(am => am.MoveType == BattleMoveType.Special);

            for (int i = numberShades; i > 0; --i)
            {
                _input.Push("special", "pray copper", "1");
                _chanceService.PushEventOccurs(true); //sealing is successful

                for (int j = i; j > 0; --j)
                {
                    _chanceService.PushWhichEventOccurs(chargeMoveIndex);
                }
            }

            //act
            BattleEndStatus battleEndStatus = _battleManager.Battle(_humanTeam, _shadeTeam, bells.Cast <TerrainInteractable>().ToList());

            Assert.AreEqual(BattleEndStatus.Victory, battleEndStatus);
        }
コード例 #8
0
        public void GetGroupingCorrectlyReturnsShadeGrouping_LevelRange([Range(1, 3)] int minLevel, [Range(1, 3)] int levelDiff)
        {
            //Arrange
            int maxLevel       = minLevel + levelDiff;
            int numberFighters = levelDiff + 1;
            ShadeGroupingConfiguration config = new ShadeGroupingConfiguration(numberFighters, minLevel, maxLevel);

            for (int i = 0; i < numberFighters; ++i)
            {
                _chanceService.PushWhichEventOccurs(i);
            }

            //Act
            ShadeFighterGrouping grouping = _factory.GetGrouping(config) as ShadeFighterGrouping;

            //Assert
            Assert.NotNull(grouping);
            List <Shade> shades = grouping.GetShades();

            for (int i = 0; i < numberFighters; ++i)
            {
                Assert.AreEqual(minLevel + i, shades[i].Level);
            }
        }
コード例 #9
0
        public void EnemyTeam_TestGetInputs()
        {
            var count = _enemyTeam.Fighters.Count;

            for (var i = 0; i < count; ++i)
            {
                _chanceService.PushWhichEventOccurs(0);
            }

            var moves = _enemyTeam.GetInputs(_humanTeam);


            Assert.AreEqual(count, moves.Count);

            for (var i = 0; i < count; ++i)
            {
                Assert.AreEqual(BattleMoveType.Attack, moves[i].Move.MoveType);
                Assert.AreEqual(_humanTeam.Fighters[0], moves[i].Target);
                Assert.AreEqual(_enemyTeam.Fighters[i], moves[i].Owner);
            }
        }
コード例 #10
0
        public void LayEgg_CorrectlyAddsEggsToEnemyTeam()
        {
            _chanceService.PushWhichEventOccurs(0);

            Assert.AreEqual(1, _enemyTeam.Fighters.Count);

            var move = _chicken.SetupMove(_enemyTeam, _humanTeam);

            _chicken.ExecuteMove(_battleManager, move, _enemyTeam, _humanTeam, _output);

            Assert.AreEqual(2, _enemyTeam.Fighters.Count);
            var egg = _enemyTeam.Fighters[1];

            Assert.IsAssignableFrom <Egg>(egg);
            Assert.AreEqual(MagicType.Fire, ((Egg)egg).MagicType);

            var outputs = _output.GetOutputs();

            Assert.AreEqual(1, outputs.Length);

            Assert.AreEqual($"{_chicken.DisplayName} laid a fire egg!\n", outputs[0].Message);
        }
コード例 #11
0
ファイル: ShadeTests.cs プロジェクト: Jsweeney1000/SimpleRPG
        public void ShadeCorrectlyTargetsShade_AbsorbMove()
        {
            //arrange
            _chanceService.PushWhichEventOccurs(_absorptionMoveIndex);

            Team mixedTeam = new Team(TestMenuManager.GetTestMenuManager(), _shade1, _shade2,
                                      FighterFactory.GetFighter(FighterType.Fairy, 1),
                                      FighterFactory.GetFighter(FighterType.Goblin, 1),
                                      FighterFactory.GetFighter(FighterType.Golem, 1),
                                      FighterFactory.GetFighter(FighterType.Ogre, 1));

            //act
            BattleMoveWithTarget moveWithTarget = null;

            //will throw if the filters do not appropriately filter out all non shades
            Assert.DoesNotThrow(() => moveWithTarget = _shade1.SetupMove(mixedTeam, _humanTeam));

            //assert
            Assert.True(moveWithTarget.Move is ShadeAbsorbingMove);
            Assert.AreEqual(_shade2, moveWithTarget.Target);
        }