Example #1
0
        static void Main(string[] args)
        {
            var units = Loader.GetUnits().ToDictionary(u => u.Description(), u => u);

            Console.WriteLine("=== UNITS ===");
            foreach (var unit in units)
            {
                Console.WriteLine(unit.Value);
            }

            try
            {
                Localizer.Localizer.SetupLocale(new CultureInfo("ru-RU"));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            var a1 = new Army(new[]
            {
                new UnitsStack(units["Angel"], 10),
                new UnitsStack(units["Devil"], 7),
                new UnitsStack(units["Goblin"], 159),
                new UnitsStack(units["Invoker"], 24),
            });

            Console.WriteLine("=== MAP ARMY 1 ===");
            Console.WriteLine(a1);

            var a2 = new Army(new[]
            {
                new UnitsStack(units["Chaos Knight"], 10),
                new UnitsStack(units["Devil"], 12),
                new UnitsStack(units["Archangel"], 6),
            });

            Console.WriteLine("=== MAP ARMY 2 ===");
            Console.WriteLine(a2);

            var ba1 = new BattleEngine.BattleEntities.Army(a1);

            Console.WriteLine("=== BATTLE ARMY 1 ===");
            Console.WriteLine(ba1);

            var ba2 = new BattleEngine.BattleEntities.Army(a2);

            Console.WriteLine("=== BATTLE ARMY 2 ===");
            Console.WriteLine(ba2);

            var i = 0;

            // here battle
            var battle = new Battle(ba1, ba2);

            while (!battle.IsFinished)
            {
                Console.WriteLine($"{battle.Round} | {battle.CurrentRound} | {battle.Round + 1} | {battle.NextRound}");
                var stack = battle.CurrentUnitsStack;
                var army  = battle.CurrentArmy;

                var actions = battle.CurrentAvailableActions.ToList();
                var action  = ++i % 3 == 0 ? actions.Last() : actions.First();

                // TODO: select the enemy (enemies) if need
                var enemy = battle.CurrentRound.Stacks.Union(battle.NextRound.Stacks)
                            .First(s => battle.GetArmy(s) != army);

                if (battle.ActValid(action, stack, enemy))
                {
                    Console.WriteLine($"{stack} | {action.VisualName()} | {enemy}");
                    battle.Act(action, stack, enemy);
                }
                else
                {
                    throw new Exception($"Action {action} is not allowed");
                }
            }

            Console.WriteLine("=== WINNER ===");
            Console.WriteLine(battle.Winner);

            if (ba1.HasUnits)
            {
                Console.WriteLine("=== MAP ARMY 1 (AFTER BATTLE) ===");
                Console.WriteLine(ba1.ToMapArmy());
            }
            if (ba2.HasUnits)
            {
                Console.WriteLine("=== MAP ARMY 2 (AFTER BATTLE) ===");
                Console.WriteLine(ba2.ToMapArmy());
            }
        }