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(); }
/// <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); }
/// <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); }
/// <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; }