/// <summary> /// roep deze functie aan als een kamer schoongemaakt moet worden /// </summary> /// <param name="needscleaning">Geef de kamer mee die schoongemaakt moet worden</param> public void CleanRoom(AbstractRoom needscleaning) { //verander de properties this.Destination = needscleaning; this.CurrentPosition.Weight = 0; //maak een pad aan this.SetPath(); bool reached = false; //zolang je nog niet bij je bestemming bent is reached false while (this.CurrentPosition != this.Destination) { reached = false; } reached = true; //als de bestemming is bereikt roep de timer aan if (reached) { _cleanTimer.Enabled = true; } }
/// <summary> /// constructor /// </summary> public AbstractRoom() { //zet je last op null Last = null; //zet de weight heel hoog Weight = Int32.MaxValue / 2; //maak de dictionary aan Neighbours = new Dictionary <AbstractRoom, int>(); }
/// <summary> /// constructor /// </summary> /// <param name="room">geef de room mee waar de schoonmaker moet beginnen</param> public Maid(AbstractRoom room) : base() { SetTimer(); sprite = "maid"; CurrentPosition = room; Destination = room; working = false; ReturningToBase = false; Reception = room; }
/// <summary> /// deze functie maakt de daadwerkelijke path /// </summary> /// <param name="thisRoom">de room die je wilt toevoegen aan de path</param> /// <returns>deze functie returnd het path</returns> private void MakePath(AbstractRoom thisRoom) { //als de propertie last van de room niet null is dan moeten we daar eerst naar toe if (thisRoom.Last != null) { MakePath(thisRoom.Last); } //zet de room in de list _path.Add(thisRoom); }
/// <summary> /// constructor /// </summary> /// <param name="current">geef de room mee wat de huidige positie is van de gast</param> /// <param name="wish">Geef een wens mee(deze komt uit de dll)</param> /// <param name="checkin">Geef de kamer mee waar de gast naar toe moet(deze kamer komt van de receptie)</param> /// <param name="Id">Geef een id mee(komt uit de dll)</param> public Guest(AbstractRoom current, string wish, AbstractRoom checkin, string Id) : base() { //zet alle parameters die je mee krijgt in je properties Wish = wish; MyRoom = checkin; sprite = "Sim"; CurrentPosition = current; Destination = checkin; inElevator = false; waiting = false; GuestId = Int32.Parse(Regex.Match(Id, @"\d+").Value); //maak een pad this.SetPath(); }
/// <summary> /// De functie bezoekt daadwerkelijk de room /// </summary> /// <param name="thisRoom">De room die je wilt bezoeken</param> /// <param name="end">de eindbestemmings room</param> /// <returns>return true als het einde bereikt is anders false</returns> private bool Visit(AbstractRoom thisRoom, AbstractRoom end) { //als de room die we bezoeken hetzelfde is al het einde die we willen bereiken return true if (thisRoom == end) { return(true); } //als de room die je bezoekt in de _open lijst staat haal hem erdan uit if (_open.Contains(thisRoom)) { //haal de huidige room uit de _open lijst _open.Remove(thisRoom); //zet kamer in een reset lijst _reset.Add(thisRoom); } //voor elke buur die de huidige room heeft bekijken foreach (KeyValuePair <AbstractRoom, int> x in thisRoom.Neighbours) { //een nieuwe afstand bereken voor de totalte afstand int newWeight = thisRoom.Weight + x.Value; //als de nieuwe afstand kleiner is dan die er al berekend is ga dan de if in if (newWeight < x.Key.Weight) { //zet de nieuwe afstand in de room x.Key.Weight = newWeight; //zet in de buur dat dit de vorige room is voor het path maken x.Key.Last = thisRoom; //zet kamer in een reset lijst _reset.Add(x.Key); //zet de buur in de list van rooms die we nog moeten bezoeken _open.Add(x.Key); } } //als de room niet het einde is dan return false return(false); }
/// <summary> /// Deze functie moet je aanroepen als je kortste pad wilt hebben /// </summary> /// <param name="start">Geef het begin punt mee</param> /// <param name="end">Geef het eind punt mee</param> /// <returns>return een list met het path erin</returns> public List <AbstractRoom> DijkstraFunction(AbstractRoom start, AbstractRoom end) { //leeg de _reset lijst en _path lijst _reset.Clear(); _path.Clear(); //voeg start van de dijkstra toe aan reset lijst _reset.Add(start); //maak een tijdelijke variabele van een abstractroom die je wilt "bezoeken" AbstractRoom thisRoom = start; //bekijk de abstractroom en als dit niet het einde is dat ga de while loop in while (!Visit(thisRoom, end)) { if (_open.Any()) { //verander je tijdelijke variabele naar de volgende room die je wilt bezoeken thisRoom = _open.Aggregate((l, r) => l.Weight < r.Weight ? l : r); } } //maak het pad MakePath(end); //reset de waardes van de kamers foreach (AbstractRoom r in _reset) { r.Last = null; r.Weight = Int32.MaxValue / 2; } //stuur het pad terugs return(_path); }
/// <summary> /// roep deze functie aan als je een neighbour wilt toevoegen /// </summary> /// <param name="neighbour">geef de daad werkelijke neighbour mee(de room die je wilt koppelen)</param> /// <param name="distance">geef mee hoe groot de afstand is voor het dijktra algortime</param> public void AddNeighbour(ref AbstractRoom neighbour, int distance) { //voor de neighbour toe aan de dictionary Neighbours.Add(neighbour, distance); }
/// <summary> /// deze functie geeft een nieuwe maid terug /// </summary> /// <param name="_room">Geef de room mee waar de maid gemaakt moet worden</param> /// <returns>een new Maid object met de gegeven parameter</returns> public AbstractHuman CreateMaid(AbstractRoom _room) { //return een maid object return(new Maid(_room)); }
/// <summary> /// deze functie geeft een nieuwe gast terug /// </summary> /// <param name="_current">Geef de room mee waar hij nu is</param> /// <param name="_wish">Geef de wish mee die die heeft(dat is nu hoeveel sterren kamer hij wilt die uit de dll komt)</param> /// <param name="_checkIn">Geef de room mee die hij krijgt van de receptie</param> /// <param name="_id">Geef een id mee(deze wordt gegeven door de dll)</param> /// <returns>een new guest object met al de gegeven parameters</returns> public AbstractHuman CreateGuest(AbstractRoom _current, string _wish, AbstractRoom _checkIn, string _id) { //return een guest object return(new Guest(_current, _wish, _checkIn, _id)); }