Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }