Beispiel #1
0
        public List <IContainer> PlaatsContainers(IShip ship, List <IContainer> containerCollection)
        {
            if (ship == null)
            {
                throw new ArgumentNullException(nameof(ship));
            }
            if (containerCollection == null)
            {
                throw new ArgumentNullException(nameof(containerCollection));
            }

            containerCollection = containerCollection.OrderBy(o => o.Valuable).ThenByDescending(o => o.Electricity).ToList();
            bool containerGeplaatst = true;

            _minX = 0;
            _maxX = ship.WidthX;
            while (containerGeplaatst && containerCollection.Count != 0)
            {
                foreach (IContainer container in containerCollection)
                {
                    List <IStack> stackList = ship.GetStack().OrderBy(o => o.Height).ToList(); //de stacks van laag naar hoog sorteren, zo plaatsen we altijd containers op de laagste plek
                    containerGeplaatst = false;
                    foreach (IStack stack in stackList)
                    {
                        if (stack.AddContainer(container, ship.GetStackOnXAxisByStack(stack)))
                        {
                            containerCollection.Remove(container);
                            containerGeplaatst = true;
                            break;
                        }
                    }

                    if (containerGeplaatst)
                    {
                        break;
                    }
                }

                Tuple <int, int, bool> tuple = DetermineXRangePlacment.XRange(ship, containerGeplaatst, _minX, _maxX);
                _minX = tuple.Item1;
                _maxX = tuple.Item2;
                containerGeplaatst = tuple.Item3;
            }

            return(containerCollection);
        }