Exemple #1
0
        public void Fight(Army first, Army second)
        {
            if (IsGameFinished())
            {
                return;
            }

            List <IUnit> firstLineInFirst  = GetFirstLine(first);
            List <IUnit> firstLineInSecond = GetFirstLine(second);

            var min = Math.Min(Strategy.rowSize, Math.Min(first.Count(), second.Count()));

            for (int i = 0; i < min; i++)
            {
                IUnit attacker = firstLineInFirst[i];
                IUnit victim   = firstLineInSecond[i];

                MoveInfo += String.Format("\n\nArmy {0}. {1}\n\n in opposition \n\nArmy {2}. {3}", first.Name, attacker.GetInfo(), second.Name, victim.GetInfo());
                IUnit dead = attacker.Fight(victim);

                if (dead != null)
                {
                    MoveInfo += string.Format("\n\nArmy {0}. {1} dead.\n", second.Name, dead.Name);
                    dead.NotifyObservers();
                    second.Remove(dead);
                }
                else
                {
                    MoveInfo += String.Format("\n\nArmy {0}. {1} attacked.\n", second.Name, victim.GetInfo());
                }
            }
        }
Exemple #2
0
        public void DoSpecialAction(Army first, Army second)
        {
            if (IsGameFinished() || first.Count() < Strategy.rowSize + 1)
            {
                return;
            }

            for (int i = 0; i < Strategy.rowSize; i++)
            {
                var specials = GetSpecialUnitsInRow(first, i);
                if (specials.Count == 0)
                {
                    continue;
                }
                int specialIndex = Rand.Get(0, specials.Count);
                var victims      = GetTargets(first, second, specials[specialIndex]);
                if (victims.Count == 0)
                {
                    continue;
                }
                int victimIndex = Rand.Get(0, victims.Count);

                IUnit beforeSpecial = victims[victimIndex].Copy();
                IUnit afterSpecial  = specials[specialIndex].DoSpecialAction(victims[victimIndex]);

                MoveInfo += "\nSpecial action.";

                if (specials[specialIndex] is BowmanUnit)
                {
                    MoveInfo += String.Format("\n\nArmy {0}. {1} in opposition \n\nArmy {2}. {3}", first.Name, ((IUnit)specials[specialIndex]).GetInfo(), second.Name, beforeSpecial.GetInfo());
                    if (afterSpecial == specials[specialIndex])
                    {
                        MoveInfo += String.Format("\n\nArmy {0}. {1} dead.\n", second.Name, victims[victimIndex].Name);
                        afterSpecial.NotifyObservers();
                        second.Remove(afterSpecial);
                    }
                    else
                    {
                        MoveInfo += String.Format("\n\nArmy {0}. {1} attacked\n", second.Name, victims[victimIndex].GetInfo());
                    }
                }
                else if (specials[specialIndex] is HealerUnit)
                {
                    if (afterSpecial != null)
                    {
                        MoveInfo += String.Format("\nArmy {0}. {1}\n\n\t healing \n\nArmy {2}. {3}", first.Name, ((IUnit)specials[specialIndex]).GetInfo(), first.Name, beforeSpecial.GetInfo());
                        MoveInfo += String.Format("\n\nArmy {0}. {1} healed\n", first.Name, victims[victimIndex].GetInfo());
                    }
                    else
                    {
                        MoveInfo += String.Format("\n\nNo one was cured from the army {0}. ", first.Name);
                    }
                }
                else if (specials[specialIndex] is WizardUnit)
                {
                    if (afterSpecial != null)
                    {
                        MoveInfo += String.Format("\nАrmy {0}. {1}\n\n\t cloning \n\nАrmy {2}. {3}", first.Name, ((IUnit)specials[specialIndex]).GetInfo(), first.Name, beforeSpecial.GetInfo());
                        MoveInfo += String.Format("\n\nАrmy {0}. {1} cloned.\n", first.Name, victims[victimIndex].GetInfo());
                    }
                    else
                    {
                        MoveInfo += String.Format("\n\nNo one was cloned from the army {0}.\n", first.Name);
                    }
                }
                else
                {
                    if (specials[specialIndex] is LightUnit)
                    {
                        if (afterSpecial != null)
                        {
                            MoveInfo += String.Format("\nArmy {0}. {1}\n\n\t dressing \n\nArmy {2}. {3}", first.Name, ((IUnit)specials[specialIndex]).GetInfo(), first.Name, beforeSpecial.GetInfo());
                            MoveInfo += String.Format("\n\nArmy {0}. {1} dressed.\n", first.Name, victims[victimIndex].GetInfo());
                        }
                        else
                        {
                            MoveInfo += String.Format("\n\nNo one was dressed from the army {0}. ", first.Name);
                        }
                    }
                }
            }
        }