public bool MoverAscensorAbajo(Pisos piso) { PictureBox PisoParada = NivelEdificio(piso); if (AscensorPictureBox.Location.Y >= PisoParada.Location.Y) { ImagenPersona ImagenInterna = Lista.Find(x => x.PisoDireccion == piso) ?? new ImagenPersona(); PointAscensor.Y = PisoParada.Location.Y; AscensorPictureBox.Location = PointAscensor; MoverAscensor = false; if (ImagenInterna.Id > 0) { StateTextBox.AppendText($"Salieron {ListaSalida.Where(x => x.PisoDireccion == piso).ToList().Count() } personas del elevador{Environment.NewLine}"); EliminarControles(ListaSalida.Where(x => x.PisoDireccion == piso).ToList()); } Lista.Remove(Lista.Find(x => x.PisoDireccion == piso)); PisoActual = piso; ListaSalida.RemoveAll(x => x.PisoDireccion == piso); ListaSalida.RemoveAll(x => x.PisoDireccion == Pisos.SinPiso); CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); CantidadPersonasLabel.Text = ListaSalida.Count(x => x.Peso > 0).ToString(); PesoElevadorLabel.Text = ListaSalida.Sum(x => x.Peso).ToString(); return(true); } return(false); }
public void EliminarControles(List <ImagenPersona> Lista) { foreach (var item in Lista) { ImagenPersona imagenPersona = Lista.Find(x => x.Id == item.Id); Controls.RemoveByKey(imagenPersona.PictureBox.Name); } }
public MainForm() { InitializeComponent(); OnTimer.Stop(); PointPersona = PrimeraPersonaPictureBox.Location; PointAscensor = AscensorPictureBox.Location; AgregarImagenes(PrimeraPersonaPictureBox, "Piso1", 9); AgregarImagenes(SegundaPersonaPictureBox, "Piso2", 4); AgregarImagenes(TerceraPersonaPictureBox, "Piso3", 4); AgregarImagenes(CuartaPersonaPictureBox, "Piso4", 4); ImagenPersona imagenPersona = new ImagenPersona { PictureBox = PrimeraPersonaPictureBox, PisoOrigen = Pisos.PrimerPiso, Id = Lista.Count() + 1, Peso = ObtenerPesoRandom() }; Lista.Add(imagenPersona); imagenPersona = new ImagenPersona { PictureBox = SegundaPersonaPictureBox, PisoOrigen = Pisos.SegundoPiso, Id = Lista.Count() + 1, Peso = ObtenerPesoRandom() }; Lista.Add(imagenPersona); imagenPersona = new ImagenPersona { PictureBox = TerceraPersonaPictureBox, PisoOrigen = Pisos.TercerPiso, Id = Lista.Count() + 1, Peso = ObtenerPesoRandom() }; Lista.Add(imagenPersona); imagenPersona = new ImagenPersona { PictureBox = CuartaPersonaPictureBox, PisoOrigen = Pisos.CuartoPiso, Id = Lista.Count() + 1, Peso = ObtenerPesoRandom() }; Lista.Add(imagenPersona); ListaBotones.Add(PrimerPisoButton); ListaBotones.Add(SegundoPisoButton); ListaBotones.Add(TercerPisoButton); ListaBotones.Add(CuartoPisoButton); }
public void AgregarImagenes(PictureBox picture, string Piso, int CantidadImagenes) { ImagenPersona ImagenPerson; Point PisoLocation = picture.Location; for (int i = 1; i <= CantidadImagenes; i++) { Id++; ImagenPerson = new ImagenPersona(); PisoLocation.X += picture.Size.Width; ImagenPerson.PictureBox.SizeMode = PictureBoxSizeMode.StretchImage; ImagenPerson.PictureBox.Size = picture.Size; ImagenPerson.PictureBox.Image = picture.Image; ImagenPerson.PictureBox.Location = PisoLocation; ImagenPerson.PisoOrigen = ObtenerPiso(Piso.Last().ToInt()); ImagenPerson.PictureBox.Name = $"Persona{Piso}{i}"; ImagenPerson.Id = Id; ImagenPerson.Peso = ObtenerPesoRandom(); Lista.Add(ImagenPerson); Controls.Add(ImagenPerson.PictureBox); } this.Refresh(); }
public void CapturarPersona(Pisos piso) { PersonaGlobal = ObtenerImagenPorPisoControles(piso); }
private void OnTimer_Tick(object sender, EventArgs e) { if (Lista.Sum(x => x.Peso) <= 0) { OnTimer.Stop(); } if (CapturarGente) { PesoTotalAcumulado = ListaSalida.Sum(x => x.Peso); PersonaGlobal = ObtenerImagenPorPisoControles(PisoActual) ?? new ImagenPersona(); if (PesoTotalAcumulado + PersonaGlobal.Peso >= PesoTotal) { StateTextBox.AppendText($"La persona que intento ingresar tenia {PersonaGlobal.Peso} sobrepasando el limite con {(PesoTotalAcumulado + PersonaGlobal.Peso) - PesoTotal} {Environment.NewLine}"); CambiarLabel("Ascensor Lleno.", Color.White, Color.Red); CapturarGente = false; MoverAscensor = true; ListaBotones.ForEach(x => x.Enabled = true); ObtenerButton(PisoActual).Enabled = false; } else { PersonaGlobal.PisoDireccion = AquePiso; if (PersonaGlobal.Id != 0) { if (!ListaSalida.Exists(x => x.Id == PersonaGlobal.Id)) { ListaSalida.Add(PersonaGlobal); } } else { ListaSalida.Add(new ImagenPersona() { PisoDireccion = AquePiso, Peso = 0 }); } StateTextBox.AppendText($"Peso Agregado {PersonaGlobal.Peso} {Environment.NewLine}"); CantidadPersonasLabel.Text = ListaSalida.Count(x => x.Peso > 0).ToString(); PesoElevadorLabel.Text = ListaSalida.Sum(x => x.Peso).ToString(); CapturarGente = false; MoverPersonas = true; MoverAscensor = false; CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); } } if (MoverPersonas) { AnimarImagen(PersonaGlobal.PictureBox); if (MoverPersonaHorizontal(PersonaGlobal.PictureBox, 25)) { AsignarPosicionPersona(PersonaGlobal.PictureBox); if (PesoTotalAcumulado <= PesoTotal) { CapturarGente = false; MoverPersonas = false; if (ListaSalida.Count(x => x.PisoOrigen == PisoActual) == Lista.Count(x => x.PisoOrigen == PisoActual)) { MoverPersonas = false; MoverAscensor = true; } else { ListaBotones.ForEach(x => x.Enabled = true); ObtenerButton(PisoActual).Enabled = false; } CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); } else { MoverPersonas = false; MoverAscensor = true; } } else { CambiarLabel("Persona en movimiento", Color.Black, Color.Yellow); } } if (MoverAscensor) { if ((int)PisoActual <= (int)AquePiso) { Pisos ppp; if (ListaSalida.Count == 0) { ppp = AquePiso; } else { ppp = ListaSalida.FirstOrDefault().PisoDireccion; } if (!MoverAscensorArriba(ppp)) { MoverPersonaVertical(ListaSalida, DecrementoEnY); MoverAscensorVertical(DecrementoEnY); CambiarLabel("Ascensor en movimiento, no presione nada", Color.White, Color.Red); } else { ListaBotones.ForEach(x => x.Enabled = true); ObtenerButton(PisoActual).Enabled = false; CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); } } else { Pisos ppp; if (ListaSalida.Count == 0) { ppp = AquePiso; } else { ppp = ListaSalida.FirstOrDefault().PisoDireccion; } if (!MoverAscensorAbajo(ppp)) { MoverPersonaVertical(ListaSalida, DecrementoEnY); MoverAscensorVertical(DecrementoEnY); CambiarLabel("Ascensor en movimiento, no presione nada", Color.White, Color.Red); } else { ListaBotones.ForEach(x => x.Enabled = true); ObtenerButton(PisoActual).Enabled = false; CambiarLabel("Esperando que seleccione un piso", Color.White, Color.Green); } } } Invalidate(); }