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