コード例 #1
0
        public void TestGroupIdSetWhenObjectAdded()
        {
            Mock <ICombatObject> combatObject = new Mock <ICombatObject>();
            Mock <ITroopStub>    troopStub    = new Mock <ITroopStub>();
            Mock <IDbManager>    dbManager    = new Mock <IDbManager>();

            troopStub.SetupGet(p => p.City.Id).Returns(1);

            combatObject.SetupProperty(p => p.GroupId);

            CityDefensiveCombatGroup combatGroup = new CityDefensiveCombatGroup(1,
                                                                                10,
                                                                                troopStub.Object,
                                                                                dbManager.Object);

            combatGroup.Add(combatObject.Object);

            combatObject.Object.GroupId.Should().Be(10);
        }
コード例 #2
0
        public Simulation(Group attack, Group defense)
        {
            Attacker             = attack;
            Defender             = defense;
            CurrentRound         = 0;
            TurnIntervalInSecond = 0;

            battleManager =
                Ioc.Kernel.Get <IBattleManagerFactory>()
                .CreateBattleManager(new BattleLocation(BattleLocationType.City, Defender.City.Id),
                                     new BattleOwner(BattleOwnerType.City, Defender.City.Id),
                                     Defender.City);
            battleManager.BattleReport.Battle = battleManager;
            bv = new BattleViewer(battleManager);

            // Add local to battle
            using (Concurrency.Current.Lock(Defender.Local))
            {
                Defender.Local.BeginUpdate();
                Defender.Local.AddFormation(FormationType.InBattle);
                Defender.Local.Template.LoadStats(TroopBattleGroup.Local);
                var localGroup = new CityDefensiveCombatGroup(battleManager.BattleId,
                                                              1,
                                                              Defender.Local,
                                                              Ioc.Kernel.Get <IDbManager>());
                var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>();
                foreach (var kvp in Defender.Local[FormationType.Normal])
                {
                    combatUnitFactory.CreateDefenseCombatUnit(battleManager,
                                                              Defender.Local,
                                                              FormationType.InBattle,
                                                              kvp.Key,
                                                              kvp.Value).ToList().ForEach(localGroup.Add);
                }

                foreach (IStructure structure in Defender.City)
                {
                    localGroup.Add(combatUnitFactory.CreateStructureCombatUnit(battleManager, structure));
                }
                battleManager.Add(localGroup, BattleManager.BattleSide.Defense, false);
                Ioc.Kernel.Get <CityBattleProcedure>().MoveUnitFormation(Defender.Local, FormationType.Normal, FormationType.InBattle);
                Defender.Local.EndUpdate();
            }

            // Add attack stub to battle
            using (Concurrency.Current.Lock(Attacker.AttackStub))
            {
                Attacker.AttackStub.BeginUpdate();
                Attacker.AttackStub.Template.LoadStats(TroopBattleGroup.Attack);
                Attacker.AttackStub.EndUpdate();
                var attackGroup = new CityDefensiveCombatGroup(battleManager.BattleId,
                                                               2,
                                                               Attacker.AttackStub,
                                                               Ioc.Kernel.Get <IDbManager>());
                var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>();
                foreach (var kvp in Attacker.AttackStub[FormationType.Normal])
                {
                    combatUnitFactory.CreateAttackCombatUnit(battleManager,
                                                             Attacker.TroopObject,
                                                             FormationType.InBattle,
                                                             kvp.Key,
                                                             kvp.Value).ToList().ForEach(attackGroup.Add);
                }
                battleManager.Add(attackGroup, BattleManager.BattleSide.Attack, false);
            }
        }
コード例 #3
0
        public void RunDef(String filename)
        {
            using (sw = new StreamWriter(File.Open(filename, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)))
            {
                sw.WriteLine("{0} - Lvl {1} - Cnt {2} - Defending",
                             Ioc.Kernel.Get <UnitFactory>().GetName(type, lvl),
                             lvl,
                             count);
                sw.WriteLine(
                    "name,type,lvl,count,DealtToAtker,RecvFromAtker,HitDealt,HitRecv,MaxDealt,MinDealt,MaxRecv,MinRecv,Self,Enemy");
                foreach (var kvp in Ioc.Kernel.Get <UnitFactory>().GetList())
                {
                    if (sameLevelOnly && kvp.Value.Lvl != lvl)
                    {
                        continue;
                    }
                    ushort defCount;
                    ushort atkCount;
                    switch (unit)
                    {
                    case QuantityUnit.Single:
                        defCount = atkCount = count;
                        break;

                    case QuantityUnit.GroupSize:
                        defCount =
                            (ushort)
                            (Ioc.Kernel.Get <UnitFactory>().GetUnitStats(type, lvl).Battle.GroupSize *count);
                        atkCount =
                            (ushort)
                            (Ioc.Kernel.Get <UnitFactory>()
                             .GetUnitStats((ushort)(kvp.Key / 100), lvl)
                             .Battle.GroupSize *count);
                        break;

                    default:
                        throw new Exception();
                    }
                    var defender = new Group();
                    var attacker = new Group();

                    defender.AddToLocal(type, lvl, defCount, FormationType.Normal);
                    attacker.AddToAttack((ushort)(kvp.Key / 100), kvp.Value.Lvl, atkCount, FormationType.Normal);
                    sw.Write("{0},{1},{2},{3},", kvp.Value.Name, kvp.Key / 100, kvp.Value.Lvl, atkCount);
                    var battleManager =
                        Ioc.Kernel.Get <IBattleManagerFactory>()
                        .CreateBattleManager(new BattleLocation(BattleLocationType.City, defender.City.Id),
                                             new BattleOwner(BattleOwnerType.City, defender.City.Id),
                                             defender.City);

                    battleManager.ExitBattle += BmExitBattle;
                    battleManager.UnitKilled += BattleUnitKilled;
                    using (Concurrency.Current.Lock(defender.Local))
                    {
                        defender.Local.BeginUpdate();
                        defender.Local.AddFormation(FormationType.InBattle);
                        defender.Local.Template.LoadStats(TroopBattleGroup.Local);
                        var localGroup = new CityDefensiveCombatGroup(battleManager.BattleId,
                                                                      1,
                                                                      defender.Local,
                                                                      Ioc.Kernel.Get <IDbManager>());
                        var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>();
                        foreach (var unitKvp in defender.Local[FormationType.Normal])
                        {
                            combatUnitFactory.CreateDefenseCombatUnit(battleManager,
                                                                      defender.Local,
                                                                      FormationType.InBattle,
                                                                      unitKvp.Key,
                                                                      unitKvp.Value).ToList().ForEach(localGroup.Add);
                        }

                        foreach (IStructure structure in defender.City)
                        {
                            localGroup.Add(combatUnitFactory.CreateStructureCombatUnit(battleManager, structure));
                        }
                        battleManager.Add(localGroup, BattleManager.BattleSide.Defense, false);
                        Ioc.Kernel.Get <CityBattleProcedure>().MoveUnitFormation(defender.Local, FormationType.Normal, FormationType.InBattle);
                        defender.Local.EndUpdate();
                    }

                    using (Concurrency.Current.Lock(attacker.AttackStub))
                    {
                        attacker.AttackStub.BeginUpdate();
                        attacker.AttackStub.Template.LoadStats(TroopBattleGroup.Attack);
                        attacker.AttackStub.EndUpdate();
                        var attackGroup = new CityDefensiveCombatGroup(battleManager.BattleId,
                                                                       2,
                                                                       attacker.AttackStub,
                                                                       Ioc.Kernel.Get <IDbManager>());
                        var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>();
                        foreach (var unitKvp in attacker.AttackStub[FormationType.Normal])
                        {
                            combatUnitFactory.CreateAttackCombatUnit(battleManager,
                                                                     attacker.TroopObject,
                                                                     FormationType.InBattle,
                                                                     unitKvp.Key,
                                                                     unitKvp.Value).ToList().ForEach(attackGroup.Add);
                        }
                        battleManager.Add(attackGroup, BattleManager.BattleSide.Attack, false);
                    }

                    using (Concurrency.Current.Lock(attacker.AttackStub, defender.Local))
                    {
                        while (battleManager.ExecuteTurn())
                        {
                        }
                    }
                    battleManager.ExitBattle -= BmExitBattle;
                    battleManager.UnitKilled -= BattleUnitKilled;
                }
                sw.WriteLine();
            }
        }