Пример #1
0
 public void Show(Rij r)
 {
     Console.ForegroundColor = r.IsOpen ? ConsoleColor.Green : r.Count > 0 ? ConsoleColor.DarkGreen : ConsoleColor.DarkGray;
     Console.Write(" {0}: ", r.Naam);
     foreach (Klant k in r.klanten)
     {
         Show(k);
     }
     Console.Write(Environment.NewLine);
     Console.ResetColor();
 }
Пример #2
0
        /// <summary>
        /// Besluit op basis van de huidige rij en de kortste rij wat te doen
        /// </summary>
        /// <param name="huidig"></param>
        /// <param name="kortst"></param>
        /// <returns></returns>
        static public KlantActie Besluit(Klant k, Rij huidig, Rij kortst)
        {
            //TODO complexer maken
            if (huidig == null)
            {
                return(KlantActie.WisselNaarKortste);
            }

            if (huidig.RijPositie(k) > (kortst.Count - (k.Geduld)))
            {
                return(KlantActie.WisselNaarKortste);
            }

            return(KlantActie.Blijf);
        }
Пример #3
0
        /// <summary>
        /// Besluit op basis van de huidige rij en de kortste rij wat te doen
        /// </summary>
        /// <param name="huidig"></param>
        /// <param name="kortst"></param>
        /// <returns></returns>
        static public KlantActie Besluit(Klant k, Rij huidig, Rij kortst)
        {
            //TODO complexer maken
            if (k.Opgeven <= 0 && k.ID != huidig.Head.ID)
            {
                return(KlantActie.GeefOp);
            }

            if (huidig == null)
            {
                return(KlantActie.WisselNaarKortste);
            }

            //if (huidig.RijPositie(k) > (kortst.Count - (k.Geduld)))
            if (k.Geduld < huidig.RijPositie(k) - kortst.Count)
            {
                return(KlantActie.WisselNaarKortste);
            }

            return(KlantActie.Blijf);
        }
Пример #4
0
        /// <summary>
        /// Update de huidige staat met een tijdstap
        /// </summary>
        public void Step()
        {
            List <Klant> verwijder = new List <Klant>();

            // Klanten
            for (int i = 0; i < IntroductionTimes[CurrentTime]; i++)
            {
                Klanten.Add(new Klant(R.Next(0, 150), R.Next(0, 1), 40)); //TODO Hardcoded Value!!!
            }
            foreach (Klant k in Klanten)
            {
                k.Opgeven -= 1;
                if (k.Opgeven == 0)
                {
                    verwijder.Add(k);
                }
                Rij huidig = null;
                try
                {
                    huidig = Rijen.Find(r => r.Bevat(k));
                }
                catch (ArgumentNullException) { /* huidig blijft null */ }


                switch (Klant.Besluit(k, huidig, Kortste))
                {
                case Klant.KlantActie.Blijf:
                    break;

                case Klant.KlantActie.WisselNaarKortste:

                    Kortste.Push(k);
                    if (huidig != null)
                    {
                        huidig.Pop(k);
                    }

                    break;
                }
            }

            // Rijen
            // Ik heb de voortgang nu gedaan voor het wisselen van de klanten, anders krijg je rare situaties waar er 3 mensen in 1 rij staan terwijl er ook een rij leeg is.

            foreach (Rij r in Rijen)
            {
                r.Step();
                if (r.klanten.Count < 3)
                {
                }
                if (r.klanten.Count != 0)       //Zodat head niet aangeroepen word op een lege lijst
                {
                    if (r.Head.Voortgang >= 10) //Aangezien de voortang alleen omhoog gaat moeten we poppen op een standaard hoge value, ipv op 0
                    {
                        verwijder.Add(r.Head);
                    }
                }

                foreach (Klant kl in verwijder) // Ga langs alle klanten in de verwijder lijst en haal ze uit de rijen, een probleempje ik weet niet of self-checkout kassas in de rijen lijst mogen
                {
                    if (r.Bevat(kl))
                    {
                        r.Pop(kl);
                        Klanten.Remove(kl);
                    }
                }
            }

            // Tijd
            CurrentTime += 1;
        }