コード例 #1
0
        /// <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;
            }
        }
コード例 #2
0
 /// <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>();
 }
コード例 #3
0
 /// <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;
 }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
 /// <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();
 }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
 /// <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);
 }
コード例 #9
0
 /// <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));
 }
コード例 #10
0
 /// <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));
 }