예제 #1
0
        private void Fight(IArmy firstArmy, IArmy secondArmy)
        {
            if (EndGame())
            {
                return;
            }

            List <IUnit> firstLineFirstArmy  = GetFirstLine(firstArmy);
            List <IUnit> firstLineSecondArmy = GetFirstLine(secondArmy);

            var minPossiblePairs = Math.Min(GameStrategy.SizeOfRow, Math.Min(firstArmy.Count(), secondArmy.Count())); //Сражаются бойцы, у которых есть противник

            for (int i = 0; i < minPossiblePairs; i++)
            {
                IUnit Attecker = firstLineFirstArmy[i];
                IUnit Defender = firstLineSecondArmy[i];
                StepInfo += $"\n\nАрмия {firstArmy.ArmyName} - {Attecker.GetInfo()}\n\n\t\t\t|--|--СРАЖАЕТСЯ С--|--|\n\nАрмией {secondArmy.ArmyName} - {Defender.GetInfo()}\n";
                IUnit attackedUnit = Attecker.Fight(Defender);
                if (attackedUnit == null)
                {
                    StepInfo += $"\n\t\t\t -------ИТОГ-------\n\nАрмия {secondArmy.ArmyName} АТТАКОВАНА! Пострадал {Defender.GetInfo()}!\n";
                }
                else
                {
                    StepInfo += $"\n\t\t\t -------ИТОГ-------\n\nВ армии {secondArmy.ArmyName} СМЕРТЬ! Погиб {Defender.Name}!\n";
                    if (Subscribed == true)
                    {
                        StepInfo += $"\n\t\t\t{secondArmy.NotifyAboutDeath()}\n";
                    }
                    secondArmy.Remove(attackedUnit);
                }
            }
            if (EndGame())
            {
                return;
            }
        }
예제 #2
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";
                    }
                }
            }
        }