예제 #1
0
        public MainWindow()
        {
            InitializeComponent();
            Ascensore = new Ascensore(1);
            muovi     = new Thread(new ThreadStart(MuoviAscensore));
            mossa     = 10;
            sleep     = 100;

            x = new object();

            o0 = new Omino(p_0.Margin, 50);
            o1 = new Omino(p_1.Margin, 50);
            o2 = new Omino(p_2.Margin, 50);
            o3 = new Omino(p_3.Margin, 50);
            o4 = new Omino(p_4.Margin, 50);
            c0 = new OminoContrario(s0.Margin, 50);
            c1 = new OminoContrario(s1.Margin, 50);
            c2 = new OminoContrario(s2.Margin, 50);
            c3 = new OminoContrario(s3.Margin, 50);
            c4 = new OminoContrario(s4.Margin, 50);
        }
예제 #2
0
        private void MuoviAscensore()
        {
            //devo capire se scende o se sale
            //TODO : Animazione
            int       pSalite, pScese;
            Thickness t = new Thickness(0);

            this.Dispatcher.BeginInvoke(new Action(() =>
            {
                t = grdAscensore.Margin;
            }));

            Thread.Sleep(150);
            topCorrente     = t.Top;
            topDestinazione = Destinazione.MarginTop;
            //AnimazioneAscensore();
            Thread m = new Thread(new ThreadStart(AnimazioneAscensore));

            m.Start();
            m.Join();

            pScese  = Ascensore.QuantiScendono();
            pSalite = Ascensore.Arrivato();
            bool cancellaOmino = true;

            if (Ascensore.Piani[Ascensore.Piano].NPersone > 0)
            {
                cancellaOmino = false;
            }
            this.Dispatcher.BeginInvoke(new Action(() =>
            {
                if (cancellaOmino)
                {
                    switch (Ascensore.Piano)
                    {
                    case 0:
                        o0             = new Omino(new Thickness(0, o0.MarginTop, 0, 0), 50);
                        p_0.Visibility = Visibility.Hidden;
                        p_0.Margin     = new Thickness(0, o0.MarginTop, 0, 0);
                        break;

                    case 1:
                        o1             = new Omino(new Thickness(0, o1.MarginTop, 0, 0), 50);
                        p_1.Visibility = Visibility.Hidden;
                        p_1.Margin     = new Thickness(0, o1.MarginTop, 0, 0);
                        break;

                    case 2:
                        o2             = new Omino(new Thickness(0, o2.MarginTop, 0, 0), 50);
                        p_2.Visibility = Visibility.Hidden;
                        p_2.Margin     = new Thickness(0, o2.MarginTop, 0, 0);
                        break;

                    case 3:
                        o3             = new Omino(new Thickness(0, o3.MarginTop, 0, 0), 50);
                        p_3.Visibility = Visibility.Hidden;
                        p_3.Margin     = new Thickness(0, o3.MarginTop, 0, 0);
                        break;

                    case 4:
                        o4             = new Omino(new Thickness(0, o4.MarginTop, 0, 0), 50);
                        p_4.Visibility = Visibility.Hidden;
                        p_4.Margin     = new Thickness(0, o4.MarginTop, 0, 0);
                        break;
                    }
                }
                if (pScese > 0)
                {
                    Thread tr = new Thread(new ThreadStart(Scendi0));
                    switch (Ascensore.Piano)
                    {
                    case 0:
                        tr = new Thread(new ThreadStart(Scendi0));
                        break;

                    case 1:
                        tr = new Thread(new ThreadStart(Scendi1));
                        break;

                    case 2:
                        tr = new Thread(new ThreadStart(Scendi2));
                        break;

                    case 3:
                        tr = new Thread(new ThreadStart(Scendi3));
                        break;

                    case 4:
                        tr = new Thread(new ThreadStart(Scendi4));
                        break;
                    }
                    //MessageBox.Show("anima");
                    tr.Start();
                }
                t                     = grdAscensore.Margin;
                lbl4.Content          = Ascensore.Piani[4].NPersone;
                lbl3.Content          = Ascensore.Piani[3].NPersone;
                lbl2.Content          = Ascensore.Piani[2].NPersone;
                lbl1.Content          = Ascensore.Piani[1].NPersone;
                lbl0.Content          = Ascensore.Piani[0].NPersone;
                lblNumPersone.Content = Ascensore.Persone;
            }));

            while (true)
            {
                //MessageBox.Show(Ascensore.Count().ToString());
                if (Ascensore.Count() > 0 && (!Ascensore.AspettaPrenotazione || Ascensore.Persone == 0))
                {
                    try
                    {
                        string x = "";
                        foreach (int n in Ascensore.Fila)
                        {
                            x += n + ", ";
                        }
                        //MessageBox.Show(x);
                        Destinazione = Ascensore.Vai();
                        MuoviAscensore();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("errore");
                    }
                }
                Thread.Sleep(20);
            }
        }