Пример #1
0
        public void CreateBattle()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            Assert.AreEqual(army1, battle.GetAttacker().GetBaseArmy());
            Assert.AreEqual(army2, battle.GetTarget().GetBaseArmy());
            Assert.AreEqual(BattleState.None, battle.GetBattleState());
            Assert.AreEqual(0, battle.GetRound());
            Assert.IsNull(battle.GetWinner());
            Assert.IsNull(battle.GetCurrentStacks());
            Assert.IsNull(battle.GetCurrentStack());
            Assert.IsNull(battle.GetCurrentArmy());
        }
Пример #2
0
        public void Battle_Stop()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            Assert.AreEqual(BattleState.None, battle.GetBattleState());
            battle.Stop();
            Assert.AreEqual(BattleState.Ended, battle.GetBattleState());
        }
Пример #3
0
        public void Battle_Defend()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            battle.Start();

            BattleUnitsStack currentStack = battle.GetCurrentStack();

            Assert.AreEqual(3, battle.GetCurrentStacks().Count);
            battle.Defend();
            Assert.IsTrue(currentStack.ContainsMod(typeof(BattleUnitsStackModDefend)));
            Assert.AreEqual(35, currentStack.GetDefence());
            Assert.AreEqual(2, battle.GetCurrentStacks().Count);
        }
Пример #4
0
        public void Battle_Surrender()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            battle.Start();
            Assert.AreEqual(BattleState.InGame, battle.GetBattleState());
            battle.Surrender();
            Assert.AreEqual(army2, battle.GetWinner().GetBaseArmy());
            Assert.AreEqual(BattleState.Ended, battle.GetBattleState());

            battle.Start();
            Assert.AreEqual(BattleState.InGame, battle.GetBattleState());
            battle.Wait();
            battle.Surrender();
            Assert.AreEqual(army1, battle.GetWinner().GetBaseArmy());
            Assert.AreEqual(BattleState.Ended, battle.GetBattleState());
        }
Пример #5
0
        public void Battle_Attack()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 3);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            battle.Start();

            BattleUnitsStack target1 = battle.GetCurrentStacks()[1];
            BattleUnitsStack target2 = battle.GetCurrentStacks()[2];

            Assert.AreEqual(3, battle.GetCurrentStacks().Count);
            Assert.Throws <InvalidOperationException>(() => battle.Attack(target2));
            battle.Attack(target1);
            Assert.AreEqual(1, target1.GetAmount());
            Assert.AreEqual(90, target1.GetTopHitPoints());
            Assert.AreEqual(2, battle.GetCurrentStacks().Count);
        }
Пример #6
0
        public void CreateArmy_OutOfRange()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(skeleton, 11);
            UnitsStack stack4 = new UnitsStack(angel, 12);
            UnitsStack stack5 = new UnitsStack(angel, 1);
            UnitsStack stack6 = new UnitsStack(skeleton, 133);
            UnitsStack stack7 = new UnitsStack(skeleton, 977);

            List <UnitsStack> stacks = new List <UnitsStack> {
                stack1, stack2, stack3, stack4, stack5, stack6
            };

            Army army1 = new Army(stacks);

            Assert.AreEqual(stacks, army1.GetStacks());

            stacks.Add(stack7);

            Assert.Throws <ArgumentOutOfRangeException>(() => new Army(stacks));
        }
Пример #7
0
        public void BattleArmy_GetStacks()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 42);

            List <UnitsStack> stacks = new List <UnitsStack> {
                stack1, stack2, stack3
            };

            Army       baseArmy = new Army(stacks);
            BattleArmy army     = new BattleArmy(baseArmy, null);

            army.GetStack(0).SetHitPoints(0);

            IList <BattleUnitsStack> aliveStacks = army.GetAliveStacks();
            IList <BattleUnitsStack> deadStacks  = army.GetDeadStacks();

            Assert.AreEqual(2, aliveStacks.Count);
            Assert.AreEqual(stack2, aliveStacks[0].GetBaseStack());
            Assert.AreEqual(stack3, aliveStacks[1].GetBaseStack());
            Assert.AreEqual(1, deadStacks.Count);
            Assert.AreEqual(stack1, deadStacks[0].GetBaseStack());
        }
Пример #8
0
        public void Battle_NextTurn()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            battle.Start();

            Assert.AreEqual(1, battle.GetRound());
            Assert.AreEqual(3, battle.GetCurrentStacks().Count);
            battle.NextTurn();
            Assert.AreEqual(2, battle.GetCurrentStacks().Count);
            battle.NextTurn();
            Assert.AreEqual(1, battle.GetCurrentStacks().Count);
            battle.NextTurn();
            Assert.AreEqual(2, battle.GetRound());
            Assert.AreEqual(3, battle.GetCurrentStacks().Count);
        }
Пример #9
0
        public void Battle_NextRound()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            battle.Start();

            BattleUnitsStack battleStack1 = battle.GetStacks()[0];
            BattleUnitsStack battleStack3 = battle.GetStacks()[2];

            battleStack1.SetWaiting(true);

            Assert.AreEqual(1, battle.GetRound());
            Assert.IsTrue(battleStack1.IsWaiting());
            battle.NextRound();
            Assert.AreEqual(2, battle.GetRound());
            Assert.IsFalse(battleStack1.IsWaiting());
        }
Пример #10
0
        public void Battle_Side()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            BattleArmy battleArmy1 = battle.GetAttacker();
            BattleArmy battleArmy2 = battle.GetTarget();

            Assert.IsTrue(battleArmy1.IsAttacker());
            Assert.IsFalse(battleArmy1.IsTarget());
            Assert.IsFalse(battleArmy2.IsAttacker());
            Assert.IsTrue(battleArmy2.IsTarget());
        }
Пример #11
0
        public void CreateArmy()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);

            List <UnitsStack> stacks = new List <UnitsStack> {
                stack1, stack2
            };

            Army army = new Army(stacks);

            Assert.AreEqual(stacks, army.GetStacks());
        }
Пример #12
0
        public void Battle_TestBattle()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 3);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            battle.Start();

            BattleUnitsStack target1 = battle.GetStacks()[0];
            BattleUnitsStack target2 = battle.GetStacks()[1];
            BattleUnitsStack target3 = battle.GetStacks()[2];

            battle.Attack(target3);
            Assert.AreEqual(1755, target1.GetHitPoints());
            Assert.AreEqual(90, target3.GetHitPoints());
            battle.Attack(target2);
            Assert.AreEqual(90, target3.GetHitPoints());
            Assert.AreEqual(109, target2.GetHitPoints());
            battle.Attack(target3);
            Assert.AreEqual(109, target2.GetHitPoints());
            Assert.AreEqual(80, target3.GetHitPoints());
            Assert.AreEqual(2, battle.GetRound());

            Assert.AreEqual(BattleState.InGame, battle.GetBattleState());
            Assert.IsNull(battle.GetWinner());
            Assert.IsTrue(target3.IsAlive());
            battle.Attack(target3);
            Assert.IsTrue(target3.IsDead());
            Assert.AreEqual(army1, battle.GetWinner().GetBaseArmy());
            Assert.AreEqual(BattleState.Ended, battle.GetBattleState());
        }
Пример #13
0
        public void Battle_TryToStop()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle           battle       = new Battle(army1, army2);
            BattleUnitsStack battleStack1 = battle.GetStacks()[0];
            BattleUnitsStack battleStack2 = battle.GetStacks()[1];
            BattleUnitsStack battleStack3 = battle.GetStacks()[2];

            battle.Start();
            battleStack3.SetHitPoints(0);
            battle.TryToStop();
            Assert.AreEqual(BattleState.Ended, battle.GetBattleState());
            Assert.AreEqual(army1, battle.GetWinner().GetBaseArmy());

            battle.Start();
            battleStack1.SetHitPoints(0);
            battleStack2.SetHitPoints(0);
            battleStack3.RestoreFromBaseStack();
            battle.TryToStop();
            Assert.AreEqual(BattleState.Ended, battle.GetBattleState());
            Assert.AreEqual(army2, battle.GetWinner().GetBaseArmy());

            battle.Start();
            battleStack1.SetHitPoints(0);
            battleStack2.SetHitPoints(0);
            battleStack3.SetHitPoints(0);
            battle.TryToStop();
            Assert.AreEqual(BattleState.Ended, battle.GetBattleState());
            Assert.AreEqual(army2, battle.GetWinner().GetBaseArmy());
        }
Пример #14
0
        public void Battle_Wait()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            battle.Start();

            BattleUnitsStack mainStack = battle.GetStacks()[0];

            IList <BattleUnitsStack> currentStacks = battle.GetCurrentStacks();

            Assert.AreEqual(stack1, currentStacks[0].GetBaseStack());
            Assert.AreEqual(stack3, currentStacks[1].GetBaseStack());
            Assert.AreEqual(stack2, currentStacks[2].GetBaseStack());

            battle.Wait();
            Assert.IsTrue(mainStack.IsWaiting());

            IList <BattleUnitsStack> currentStacks1 = battle.GetCurrentStacks();

            Assert.AreEqual(stack3, currentStacks1[0].GetBaseStack());
            Assert.AreEqual(stack2, currentStacks1[1].GetBaseStack());
            Assert.AreEqual(stack1, currentStacks1[2].GetBaseStack());

            battle.NextRound();
            Assert.IsFalse(mainStack.IsWaiting());
        }
Пример #15
0
        public void BattleArmy_ContainsStack()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);

            List <UnitsStack> stacks = new List <UnitsStack> {
                stack1, stack2
            };

            Army       baseArmy = new Army(stacks);
            BattleArmy army     = new BattleArmy(baseArmy, null);

            BattleUnitsStack stack3 = new BattleUnitsStack(new UnitsStack(skeleton, 42), army);

            army.AddStack(stack3);
            Assert.IsTrue(army.ContainsStack(stack3));
        }
Пример #16
0
        public void Battle_GetStacks()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);
            UnitsStack stack3 = new UnitsStack(angel, 2);

            List <UnitsStack> stacks1 = new List <UnitsStack> {
                stack1, stack2
            };
            List <UnitsStack> stacks2 = new List <UnitsStack> {
                stack3
            };

            Army army1 = new Army(stacks1);
            Army army2 = new Army(stacks2);

            Battle battle = new Battle(army1, army2);

            battle.Start();

            IList <BattleUnitsStack> stacks = battle.GetStacks();

            Assert.AreEqual(stack1, stacks[0].GetBaseStack());
            Assert.AreEqual(stack2, stacks[1].GetBaseStack());
            Assert.AreEqual(stack3, stacks[2].GetBaseStack());

            stacks[0].SetHitPoints(0);

            IList <BattleUnitsStack> aliveStacks = battle.GetAliveStacks();
            IList <BattleUnitsStack> deadStacks  = battle.GetDeadStacks();

            Assert.AreEqual(2, aliveStacks.Count);
            Assert.AreEqual(stacks[1], aliveStacks[0]);
            Assert.AreEqual(stacks[2], aliveStacks[1]);
            Assert.AreEqual(1, deadStacks.Count);
            Assert.AreEqual(stacks[0], deadStacks[0]);
        }
Пример #17
0
        public void BattleArmy_RemoveStack()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);

            List <UnitsStack> stacks = new List <UnitsStack> {
                stack1, stack2
            };

            Army       baseArmy = new Army(stacks);
            BattleArmy army     = new BattleArmy(baseArmy, null);

            BattleUnitsStack stack = army.GetStack(0);

            Assert.AreEqual(2, army.GetStacks().Count);
            Assert.IsTrue(army.RemoveStack(stack));
            Assert.AreEqual(1, army.GetStacks().Count);
            Assert.IsFalse(army.RemoveStack(stack));
        }
Пример #18
0
        public void CreateBattleArmy()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(skeleton, 42);

            List <UnitsStack> stacks = new List <UnitsStack> {
                stack1, stack2
            };

            Army       baseArmy = new Army(stacks);
            BattleArmy army     = new BattleArmy(baseArmy, null);

            Assert.AreEqual(baseArmy, army.GetBaseArmy());
            Assert.IsNull(army.GetBattle());
            Assert.AreEqual(stack1, army.GetBaseArmy().GetStacks()[0]);
            Assert.AreEqual(stack2, army.GetBaseArmy().GetStacks()[1]);
            Assert.AreEqual(stack1, army.GetStack(0).GetBaseStack());
            Assert.AreEqual(stack2, army.GetStack(1).GetBaseStack());
        }
Пример #19
0
        public void BattleArmy_AddStack()
        {
            Unit angel    = new UnitAngel();
            Unit skeleton = new UnitSkeleton();

            UnitsStack stack1 = new UnitsStack(angel, 10);
            UnitsStack stack2 = new UnitsStack(angel, 5);

            List <UnitsStack> stacks = new List <UnitsStack> {
                stack1, stack2
            };

            Army       baseArmy = new Army(stacks);
            BattleArmy army     = new BattleArmy(baseArmy, null);

            BattleUnitsStack stack3  = new BattleUnitsStack(new UnitsStack(skeleton, 42), army);
            BattleUnitsStack stack4  = new BattleUnitsStack(new UnitsStack(skeleton, 42), army);
            BattleUnitsStack stack5  = new BattleUnitsStack(new UnitsStack(skeleton, 42), army);
            BattleUnitsStack stack6  = new BattleUnitsStack(new UnitsStack(skeleton, 42), army);
            BattleUnitsStack stack7  = new BattleUnitsStack(new UnitsStack(skeleton, 42), army);
            BattleUnitsStack stack8  = new BattleUnitsStack(new UnitsStack(skeleton, 42), army);
            BattleUnitsStack stack9  = new BattleUnitsStack(new UnitsStack(skeleton, 42), army);
            BattleUnitsStack stack10 = new BattleUnitsStack(new UnitsStack(skeleton, 42), army);

            Assert.AreEqual(2, army.GetStacks().Count);
            army.AddStack(stack3);
            Assert.AreEqual(3, army.GetStacks().Count);
            Assert.AreEqual(stack3, army.GetStack(2));
            army.AddStack(stack4);
            army.AddStack(stack5);
            army.AddStack(stack6);
            army.AddStack(stack7);
            army.AddStack(stack8);
            army.AddStack(stack9);
            Assert.AreEqual(9, army.GetStacks().Count);
            Assert.Throws <ArgumentOutOfRangeException>(() => army.AddStack(stack10));
        }