Exemplo n.º 1
0
        private void DoSpecialAction(IArmy first, IArmy second)
        {
            if (EndGame())
            {
                return;
            }

            for (int i = 0; i < GameStrategy.SizeOfRow; i++)
            {
                var specialUnits = GetSpecialUnitsInRow(first, i);
                if (specialUnits.Count == 0)
                {
                    continue;
                }

                Random random       = new Random();
                int    indexSpecial = random.Next(0, specialUnits.Count - 1);
                var    targetUnits  = GetTargets(first, second, specialUnits[indexSpecial]);

                if (targetUnits.Count == 0)
                {
                    continue;
                }

                int indexTargets = random.Next(0, targetUnits.Count - 1);

                IUnit beforeSpecialAction = targetUnits[indexTargets].Copy();
                IUnit afterSpecialAction  = specialUnits[indexSpecial].DoSpecialAction(targetUnits[indexTargets]);

                StepInfo += "\n\n\t\t\t-----ОСОБОЕ ДЕЙСТВИЕ-----";

                if (specialUnits[indexSpecial] is Archer)
                {
                    StepInfo += $"\n\nв Армии {first.ArmyName} - {((IUnit)specialUnits[indexSpecial]).GetInfo()}\n\n\t\t\t|--|--СТРЕЛЯЕТ ИЗ ЛУКА В--|--|\n\nв Армию {second.ArmyName} - {beforeSpecialAction.GetInfo()}";

                    if (afterSpecialAction == specialUnits[indexSpecial])
                    {
                        StepInfo += $"\n\n\t\t\t -------ИТОГ-------\n\nв Армии {second.ArmyName} ПОГИБАЕТ {targetUnits[indexTargets].Name}\n";
                        if (Subscribed == true)
                        {
                            StepInfo += $"\n\n\t\t\t{second.NotifyAboutDeath()}\n\n";
                        }
                        second.Remove(targetUnits[indexTargets]);
                    }
                    else
                    {
                        StepInfo += $"\n\n\t\t\t -------ИТОГ-------\n\nв Армии {second.ArmyName} РАНЕН {targetUnits[indexTargets].GetInfo()}\n";
                    }
                }

                else if (specialUnits[indexSpecial] is Healer)
                {
                    if (afterSpecialAction != null)
                    {
                        StepInfo += $"\n\nв Армии{first.ArmyName} - {((IUnit)specialUnits[indexSpecial]).GetInfo()}\n\n\t\t\t|---|---ЛЕЧИТ---|---|\n\n в Армии {first.ArmyName} - {beforeSpecialAction.GetInfo()}";
                        StepInfo += $"\n\n\t\t\t -------ИТОГ-------\n\nв Армии {first.ArmyName} - {targetUnits[indexTargets].GetInfo()} ВЫЛЕЧЕН\n";
                    }
                    else
                    {
                        StepInfo += $"\n\nЦелитель уснул после ночного дежурства! Никто НЕ ВЫЛЕЧЕН в Армии {first.ArmyName}\n";
                    }
                }

                else if (specialUnits[indexSpecial] is Wizard)
                {
                    if (afterSpecialAction != null)
                    {
                        StepInfo += $"\n\nв Армии {first.ArmyName} - {((IUnit)specialUnits[indexSpecial]).GetInfo()}\n\n\t\t\t|---|---КЛОНИРУЕТ---|---|\n\n в Армии {first.ArmyName} - {beforeSpecialAction.GetInfo()}";
                        StepInfo += $"\n\n\t\t\t -------ИТОГ-------\n\nв Армии {first.ArmyName} - {targetUnits[indexTargets].GetInfo()} УСПЕШНО КЛОНИРОВАН.\n";
                        first.Push(afterSpecialAction);
                    }
                    else
                    {
                        StepInfo += $"\n\nМаг столкнулся с кражей зелий. НИКТО НЕ КЛОНИРОВАН в Армии {first.ArmyName}\n";
                    }
                }
                else if (specialUnits[indexSpecial] is Infantry)
                {
                    if (afterSpecialAction != null)
                    {
                        targetUnits[indexTargets] = afterSpecialAction;
                        StepInfo += $"\n\nв Армии {first.ArmyName} - {((IUnit)specialUnits[indexSpecial]).GetInfo()}\n\n\t\t\t|---|---ОДЕВАЕТ---|---|\n\n в Армии {first.ArmyName} - {beforeSpecialAction.GetInfo()}";
                        StepInfo += $"\n\n\t\t\t -------ИТОГ-------\n\nв Армии {first.ArmyName} - {targetUnits[indexTargets].GetInfo()} ОДЕТ В СПЕЦИАЛЬНУЮ АМУНИЦИЮ!\n";
                    }
                    else
                    {
                        StepInfo += $"\n\nХодоки украли амуницию! НИКТО НЕ ОДЕТ в Армии {first.ArmyName}\n";
                    }
                }
            }
        }