public void CambiarEstado()
        {
            GC.Collect();
            List <Parqueo> parqueosFake = Parqueos;

            for (int i = 0; i < parqueosFake.Count(); i++)
            {
                Parqueo parqueo = parqueosFake.ElementAt(i);
                if (parqueo.Estados != Estado.Ocupado)
                {
                    parqueosFake.ElementAt(i).Estados = EstadoRandom();
                }
            }
            Parqueos = parqueosFake;
            DGV.Rows.Clear();
            foreach (var item in Parqueos)
            {
                AddDetalle(item);
            }
        }
        private void EmpezarSimulacion_Click(object sender, EventArgs e)
        {
            GC.Collect();
            EstadotextBox.Clear();
            int           CantidadCasos = CantidadCasosTextBox.Text.ToInt();
            int           iterador      = 0;
            StringBuilder stb           = new StringBuilder();

            for (int j = 0; j < CantidadCasos; j++)
            {
                GC.Collect();
                if (HayParqueoLibre())
                {
                    if (iterador == Vehiculos.Count() - 1)
                    {
                        iterador = 0;
                    }

                    Vehiculo vehiculo = Vehiculos.ElementAt(iterador);

                    stb.AppendLine("Caso: " + (j + 1));
                    stb.AppendLine("Vehiculo: " + (iterador + 1));
                    stb.AppendLine("\tTomo la calle: " + CalleRandom().Numero);
                    for (int x = 0; x < 4; x++)
                    {
                        GC.Collect();
                        Parqueo parqueo = Parqueos.ElementAt(x);
                        stb.AppendLine($"\t\tPaso al parqueo:{(x + 1)} y estaba {parqueo.Estados.ToString()}");

                        if (parqueo.Estados == Estado.Libre)
                        {
                            stb.AppendLine($"\t\tEntro al parqueo al {x + 1}");
                            Parqueos.ElementAt(x).Estados        = Estado.Ocupado;
                            Vehiculos.ElementAt(iterador).Estado = EstadoVehiculo.Parqueado;
                            Parqueos.ElementAt(x).Vehiculo       = Vehiculos.ElementAt(iterador);
                            break;
                        }
                        else
                        {
                            if (x + 1 == 4)
                            {
                                stb.AppendLine($"\t\tNo encontro parqueo y se fue");
                            }
                            else
                            {
                                stb.AppendLine($"\t\tPaso al siguiente parqueo");
                            }
                        }
                    }
                    iterador++;
                    CambiarEstado();
                }
                else
                {
                    stb.AppendLine("No hay parqueo libre, la simulacion ha terminado");
                    break;
                }
            }
            if (HayParqueoLibre())
            {
                stb.AppendLine("Quedaron libre los parqueos");
                for (int x = 0; x < Parqueos.Count(); x++)
                {
                    if (Parqueos[x].Estados == Estado.Libre || Parqueos[x].Estados == Estado.OcupadoFake)
                    {
                        stb.AppendLine($"{Parqueos.ElementAt(x).Numero}");
                    }
                }
            }
            EstadotextBox.Text = stb.ToString();
            DGV.Columns["Vehiculo"].Visible = true;
        }
 public void AddDetalle(Parqueo item)
 {
     DGV.Rows.Add(item.Numero, item.Probabilidad, item.Estados.ToString(), item.Vehiculo.Numero);
 }
        static void Main(string[] args)
        {
            int     opcion = 0;
            Parqueo solar  = new Parqueo("El Solar", new Ubicacion("Camargo ", 71), 3, 10);

            // DAtos inciales
            solar.ingresarAuto(Color.rojo, Marca.Fiat, Tipo.camioneta, "2355-TUP");
            solar.ingresarAuto(Color.negro, Marca.Toyota, Tipo.auto, "2178-UPX");
            solar.ingresarAuto(Color.azul, Marca.Nissan, Tipo.vagonenta, "1138-TAI");

            while (opcion != 5)
            {
                Console.Clear();
                Console.WriteLine("************************************************");
                Console.WriteLine(solar);
                Console.WriteLine("************************************************");

                Console.WriteLine("1. Ingresar al Parqueo");
                Console.WriteLine("2. Salir del Parqueo");
                Console.WriteLine("3. Mostrar Parqueo");
                Console.WriteLine("4. Historial de Funcionamiento");

                Console.WriteLine("5. Salir");

                opcion = int.Parse(Console.ReadLine());
                switch (opcion)
                {
                case 1:
                    Console.WriteLine("Introduzca Color[rojo,azul,negro,blanco]");
                    String srtColor = Console.ReadLine();
                    Color  color;
                    Enum.TryParse(srtColor, out color);

                    Console.WriteLine("Introduzca Marca[ Toyota, Nissan, Susuki,Ford, Fiat]");
                    String srtMarca = Console.ReadLine();
                    Marca  marca;
                    Enum.TryParse(srtMarca, out marca);

                    Console.WriteLine("introduzca Tipo[vagonenta, camioneta,auto,camion,motocicleta]");
                    String strTipo = Console.ReadLine();
                    Tipo   tipo;
                    Enum.TryParse(strTipo, out tipo);

                    Console.WriteLine("introduzca Placa");
                    String placa = Console.ReadLine();

                    Console.WriteLine(solar.ingresarAuto(color, marca, tipo, placa));
                    Console.ReadKey();
                    break;

                case 2:
                    Console.WriteLine("introduzca Placa");
                    String p = Console.ReadLine();
                    Console.WriteLine(solar.SalirAuto(p));
                    Console.ReadKey();
                    break;

                case 3:
                    solar.getDatos();
                    Console.ReadKey();
                    break;

                case 4:
                    Console.WriteLine("introduzca el nrode puesto del cual obtener el historial");
                    int indice = int.Parse(Console.ReadLine());
                    solar.getHistorial(indice);
                    Console.ReadKey();
                    break;
                }
            }
        }