예제 #1
0
        /// <summary>
        /// Voorbeeldfunctie waarmee aan het Liftsysteem kenbaar wordt gemaakt dat er een
        /// nieuw doel moet toegevoegd worden aan de wachtrij. Wordt aangeroepen door de binnenbediening.
        /// </summary>
        /// <param name="doelVerdieping"></param>
        public void VerdiepingAanvragen(int doelverdieping)
        {
            Beweging b = new Beweging();

            b.Verdiep = doelverdieping;
            q.Enqueue(b);
        }
예제 #2
0
        /// <summary>
        /// Voorbeeldfunctie waarmee aan het Liftsysteem kenbaar wordt gemaakt dat er bepaalde richting
        /// wordt aangevraagd op een verdieping. Wordt aangeroepen door de buitenbediening.
        /// </summary>
        /// </summary>
        /// <param name="aanvragendeVerdieping"></param>
        /// <param name="richting"></param>
        public void RichtingAanvragen(int aanvragendeVerdieping, LiftDirection richting)
        {
            Beweging b = new Beweging();

            b.Verdiep  = aanvragendeVerdieping;
            b.Richting = (int)richting;
            q.Enqueue(b);
        }
예제 #3
0
        int DoelverdiepHerzoeken(int doelverdiep, Queue <object> q)
        {
            Beweging b = new Beweging();

            b = (Beweging)q.Peek();

            doelverdiep = b.Verdiep;
            return(doelverdiep);
        }
예제 #4
0
        public Queue <object> Prio1(Queue <object> q, string huidigeRichting, int positieLift)
        {
            Queue <object> que = new Queue <object>();

            if (q.Count != 0)
            {
                Beweging b = (Beweging)q.Dequeue();
                que.Enqueue(b);
                if (q.Count != 0)
                {
                    for (int i = 0; i < q.Count; i++)
                    {
                        b = ((Beweging)q.ElementAt(i));
                        int controle = 0;

                        if (que.Count != 0)
                        {
                            for (int n = 0; n < que.Count; n++)
                            {
                                Beweging be = new Beweging();
                                be = (Beweging)que.ElementAt(n);
                                if (be.Verdiep == b.Verdiep)
                                {
                                    controle++;
                                }
                            }
                            if (controle == 0)
                            {
                                que.Enqueue(b);
                            }
                        }
                    }
                }
            }
            que = Prio2(que, huidigeRichting, positieLift);
            return(que);
        }
예제 #5
0
        public void PositieBepalen()
        {
            var arg     = new PositieLiftEventArgs();
            int positie = 1;

            DoelVerdieping = 1;
            Beweging b = new Beweging();

            b.Verdiep = 1;
            q.Enqueue(b);

            while (true)
            {
                if (q.Count != 0)
                {
                    Beweging v = (Beweging)q.Peek();
                    this.DoelVerdieping = v.Verdiep;
                    {
                        while (DoelVerdieping != positie)
                        {
                            Positie(this, arg);

                            if (DoelVerdieping > positie)
                            {
                                arg.Deuren  = " De deuren sluiten";
                                arg.Positie = positie;
                                Positie(this, arg);
                                Thread.Sleep(4000);
                                arg.Richting = "\u23F6";

                                Positie(this, arg);
                                while (DoelVerdieping > positie)
                                {
                                    q = prioriteit.Prio1(q, arg.Richting, arg.Positie);
                                    DoelVerdieping = DoelverdiepHerzoeken(DoelVerdieping, q);
                                    arg.Deuren     = "";
                                    Positie(this, arg);
                                    Thread.Sleep(4000);
                                    positie += 1;

                                    arg.Positie = positie;

                                    Positie(this, arg);
                                }
                            }
                            else if (DoelVerdieping < positie)
                            {
                                arg.Deuren  = " De deuren sluiten";
                                arg.Positie = positie;
                                Positie(this, arg);
                                Thread.Sleep(4000);
                                arg.Richting = "\u23F7";

                                Positie(this, arg);
                                while (DoelVerdieping < positie)
                                {
                                    q = prioriteit.Prio1(q, arg.Richting, arg.Positie);
                                    DoelVerdieping = DoelverdiepHerzoeken(DoelVerdieping, q);
                                    arg.Deuren     = "";
                                    Positie(this, arg);
                                    Thread.Sleep(4000);
                                    positie -= 1;

                                    arg.Positie = positie;

                                    Positie(this, arg);
                                }
                            }
                        }
                        if (DoelVerdieping == positie)
                        {
                            arg.Positie  = positie;
                            arg.Richting = "";

                            Positie(this, arg);
                        }
                    }
                }

                if (q.Count != 0)
                {
                    Beweging v = (Beweging)q.Dequeue();
                    this.DoelVerdieping = v.Verdiep;
                }

                arg.Deuren = "Stop";
                Positie(this, arg);
                Thread.Sleep(1000);
            }
        }
예제 #6
0
        public Queue <object> Prio2(Queue <object> q, string huidigeRichting, int positieLift)
        {
            Queue <object> que = new Queue <object>();
            Beweging       b   = new Beweging();

            if (huidigeRichting != null)
            {
                if (q.Count > 1)
                {
                    if (huidigeRichting == "\u23F6")
                    {
                        for (int i = positieLift + 1; i <= 2; i++)
                        {
                            foreach (Beweging be in q)
                            {
                                if (be.Verdiep == i && (be.Richting == 1 || be.Richting == 0))
                                {
                                    que.Enqueue(be);
                                }
                            }
                        }

                        for (int i = positieLift; i <= 2; i++)
                        {
                            foreach (Beweging be in q)
                            {
                                if (be.Verdiep == i && be.Richting == 2)
                                {
                                    que.Enqueue(be);
                                }
                            }
                        }

                        for (int i = positieLift - 1; i >= -1; i--)
                        {
                            foreach (Beweging be in q)
                            {
                                if (be.Verdiep == i && (be.Richting == 2 || be.Richting == 0))
                                {
                                    que.Enqueue(be);
                                }
                            }
                        }
                    }

                    if (huidigeRichting == "\u23F7")
                    {
                        for (int i = positieLift - 1; i >= -1; i--)
                        {
                            foreach (Beweging be in q)
                            {
                                if (be.Verdiep == i && (be.Richting == 2 || be.Richting == 0))
                                {
                                    que.Enqueue(be);
                                }
                            }
                        }
                        for (int i = positieLift; i >= -1; i--)
                        {
                            foreach (Beweging be in q)
                            {
                                if (be.Verdiep == i && be.Richting == 1)
                                {
                                    que.Enqueue(be);
                                }
                            }
                        }
                        for (int i = positieLift + 1; i <= 2; i++)
                        {
                            foreach (Beweging be in q)
                            {
                                if (be.Verdiep == i && (be.Richting == 1 || be.Richting == 0))
                                {
                                    que.Enqueue(be);
                                }
                            }
                        }
                    }
                }
                else
                {
                    que.Enqueue((Beweging)q.Dequeue());
                }
            }
            return(que);
        }