示例#1
0
        public string CraftPresent(string presentName)
        {
            var workShop        = new Workshop();
            var targetPresent   = presents.FindByName(presentName);
            var availableDwarfs = dwarfs.Models.Where(x => x.Energy >= 50).OrderByDescending(x => x.Energy);

            if (availableDwarfs.Count() == 0)
            {
                throw new InvalidOperationException("There is no dwarf ready to start crafting!");
            }

            foreach (var dwarf in availableDwarfs)
            {
                workShop.Craft(targetPresent, dwarf);
                if (dwarf.Energy == 0)
                {
                    dwarfs.Remove(dwarf);
                }
                if (targetPresent.IsDone())
                {
                    craftedPresents++;
                    break;
                }
            }

            var isDone = "not done";

            if (targetPresent.IsDone())
            {
                isDone = "done";
            }
            return($"Present {presentName} is {isDone}.");
        }
示例#2
0
        public string CraftPresent(string presentName)
        {
            var readyToWorkdwarfs = new List <IDwarf>();

            foreach (var dwarf in dwarfs.Models)
            {
                if (dwarf.Energy >= 50 && dwarf.Instruments.Any(x => x.IsBroken() == false))
                {
                    readyToWorkdwarfs.Add(dwarf);
                }
            }
            if (readyToWorkdwarfs == null)
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }
            present = presents.FindByName(presentName);
            foreach (var currentDwarf in readyToWorkdwarfs)
            {
                //readyToWorkdwarfs = dwarfs.Models.Where(x => x.Energy >= 50);
                currentDwarf.Work();
                var currentInstrument = currentDwarf.Instruments.FirstOrDefault(x => x.IsBroken() == false);
                //currentInstrument.Use();
                if (currentInstrument.IsBroken())
                {
                    brokenOnes++;
                }
                present.GetCrafted();
                workshop.Craft(present, currentDwarf);
                if (currentDwarf.Energy == 0)
                {
                    dwarfs.Remove(currentDwarf);
                }
                if (present.IsDone())
                {
                    countCraftedPresents++;
                    return(string.Format(OutputMessages.PresentIsDone, presentName));
                }
            }
            return(string.Format(OutputMessages.PresentIsNotDone, presentName));
        }
示例#3
0
        public string CraftPresent(string presentName)
        {
            var present = presents.FindByName(presentName);
            var workers = dwarfs.Models.ToList().Where(x => x.Energy >= 50).OrderByDescending(x => x.Energy).ToList();

            while (!present.IsDone())
            {
                if (!workers.Any())
                {
                    throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
                }
                var currentDwarf = workers.FirstOrDefault(x => x.Instruments.Any(x => x.IsBroken() == false));
                if (currentDwarf == null)
                {
                    return(string.Format(OutputMessages.PresentIsNotDone, presentName));
                }
                while (currentDwarf.Energy > 0 && !present.IsDone() && currentDwarf.Instruments.FirstOrDefault(x => x.IsBroken() == false) != null)
                {
                    currentDwarf.Work();
                    present.GetCrafted();
                    currentDwarf.Instruments.First(x => x.IsBroken() == false).Use();
                }
                if (currentDwarf.Energy <= 0)
                {
                    dwarfs.Remove(currentDwarf);
                    workers.RemoveAt(0);
                }
            }

            if (present.IsDone())
            {
                return(string.Format(OutputMessages.PresentIsDone, presentName));
            }
            else
            {
                return(string.Format(OutputMessages.PresentIsNotDone, presentName));
            }
        }
示例#4
0
        public string CraftPresent(string presentName)
        {
            List <IDwarf> readyToWorkDwarves = dwarfs.Models.Where(el => el.Energy >= 50).OrderByDescending(el => el.Energy).ToList();
            IPresent      present            = presents.FindByName(presentName);

            if (readyToWorkDwarves.Count == 0)
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }
            foreach (var dwarf in readyToWorkDwarves)
            {
                workshop.Craft(present, dwarf);
                if (dwarf.Energy == 0)
                {
                    dwarfs.Remove(dwarf);
                }
                if (present.IsDone())
                {
                    return(string.Format(OutputMessages.PresentIsDone, presentName));
                }
            }
            return(string.Format(OutputMessages.PresentIsNotDone, presentName));
        }
示例#5
0
        public string CraftPresent(string presentName)
        {
            Workshop             workShop = new Workshop();
            IPresent             present  = presents.FindByName(presentName);
            ICollection <IDwarf> dwarves  = dwarfs
                                            .Models
                                            .Where(dw => dw.Energy >= 50)
                                            .OrderByDescending(dw => dw.Energy)
                                            .ToList();

            if (!dwarves.Any())
            {
                throw new InvalidOperationException(ExceptionMessages.DwarfsNotReady);
            }

            while (dwarves.Any())
            {
                IDwarf currDwarf = dwarves.First();
                workShop.Craft(present, currDwarf);
                if (!currDwarf.Instruments.Any())
                {
                    dwarves.Remove(currDwarf);
                }
                if (currDwarf.Energy == 0)
                {
                    dwarves.Remove(currDwarf);
                    dwarfs.Remove(currDwarf);
                }
                if (present.IsDone())
                {
                    break;
                }
            }

            return(string.Format(present.IsDone() ? OutputMessages.PresentIsDone : OutputMessages.PresentIsNotDone,
                                 presentName));
        }