Пример #1
0
        // CALCULO EL MENOR TEMPORARTIO
        private Temporarios calcularLlegadaCola()
        {
            double      menor        = 999999;
            Temporarios objeto_menor = new Temporarios();
            int         contador     = 0;
            int         puntero      = 0;

            foreach (var temp in lista_temporarios)
            {
                contador++;
                if (temp.tiempo < menor && !temp.utilizado)
                {
                    menor        = temp.tiempo;
                    objeto_menor = temp;
                    puntero      = contador;
                }
            }
            if (puntero != 0)
            {
                lista_temporarios[puntero - 1].utilizado = true;
            }
            else
            {
                lista_temporarios[puntero].utilizado = true;
            }
            return(objeto_menor);
        }
Пример #2
0
        private void calcularTiempos(Grupo grupo, int j, Simular sim, bool band)
        {
            Random random = new Random();

            // GENERO TEMPORARIO
            if (!band)
            {
                Temporarios temp = new Temporarios();
                if (sim.cola[0] == 0 || sim.cola[1] == 0 || sim.cola[2] == 0 && sim.cancha1 == 1 || sim.cancha2 == 1)
                {
                    if (sim.id_evento == 1)
                    {
                        if (sim.limpieza.ordena)
                        {
                            temp.id_estado     = sim.id_evento;
                            temp.nombre        = "Limpieza";
                            temp.tiempo_espera = 10.0;
                            temp.tiempo        = sim.reloj;
                            temp.utilizado     = false;
                        }
                        else
                        {
                            temp.id_estado     = sim.id_evento;
                            temp.nombre        = "Jugando";
                            temp.tiempo_espera = 0;
                            temp.tiempo        = sim.reloj;
                            temp.utilizado     = true;
                        }
                    }
                    else if (sim.cancha1 == 1 && sim.cancha2 == 1 && sim.id_evento == 2 || sim.id_evento == 0)
                    {
                        if (sim.limpieza.ordena)
                        {
                            temp.id_estado     = sim.id_evento;
                            temp.nombre        = "Limpieza";
                            temp.tiempo_espera = 10.0;
                            temp.tiempo        = sim.reloj;
                            temp.utilizado     = false;
                        }
                        else
                        {
                            temp.id_estado     = sim.id_evento;
                            temp.nombre        = "Jugando";
                            temp.tiempo_espera = 0;
                            temp.tiempo        = sim.reloj;
                            temp.utilizado     = true;
                        }
                    }
                }
                else
                {
                    if (sim.limpieza.ordena)
                    {
                        temp.id_estado     = sim.id_evento;
                        temp.nombre        = "Limpieza";
                        temp.tiempo_espera = 10;
                        temp.tiempo        = sim.reloj;
                        temp.utilizado     = false;
                    }
                    else
                    {
                        temp.id_estado     = sim.id_evento;
                        temp.nombre        = "Espera";
                        temp.tiempo_espera = 0;
                        temp.tiempo        = sim.reloj;
                        temp.utilizado     = false;
                    }
                }
                if (sim.id_evento <= 2)
                {
                    lista_temporarios.Add(temp);
                }
            }
            switch (j)
            {
            //FUTBOL LLEGADA
            case 0:
                grupo.timpoEntreLlegada = -600 * Math.Log(1 - grupo.random_1);
                grupo.random_1          = random.NextDouble();
                grupo.evento            = new Eventos();
                grupo.evento.id         = 0;
                grupo.evento.nombre     = "LlegadaFutbol";
                //FUTBOL FIN CUANDO LLEGA
                if (sim != null)
                {
                    sim.grupos[j].timpoEntreLlegada = -600 * Math.Log(1 - grupo.random_1);
                    sim.grupos[j].random_1          = random.NextDouble();
                    sim.grupos[j].evento            = new Eventos();
                    sim.grupos[j].evento.id         = 0;
                    sim.grupos[j].evento.nombre     = "LlegadaFutbol";
                    //SI PUEDE JUGAR
                    if (sim.cancha1 == 1 && sim.cancha2 == 1 && sim.cola[0] == 0)
                    {
                        //CUANDO UTILIZA UN RND NUEVO
                        if (sim.grupos[3].generoRandom == 2)
                        {
                            sim.grupos[3].random_1     = random.NextDouble();
                            sim.grupos[3].random_2     = random.NextDouble();
                            sim.grupos[3].generoRandom = 0;
                        }
                        //CUANDO UTILIZA EL 2 RANDOM
                        if (!sim.grupos[3].utilizaRandom)
                        {
                            sim.grupos[3].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[3].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[3].random_2) * 10) + 90;
                            sim.grupos[3].proximaLlegada    = sim.grupos[3].timpoEntreLlegada + sim.reloj;
                            sim.grupos[3].utilizaRandom     = true;
                            grupo.generoRandom++;
                        }
                        else
                        {
                            sim.grupos[3].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[3].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[3].random_2) * 10) + 90;
                            sim.grupos[3].proximaLlegada    = sim.grupos[3].timpoEntreLlegada + sim.reloj;
                            sim.grupos[3].utilizaRandom     = false;
                            grupo.generoRandom++;
                        }
                        sim.cancha1 = 2;
                        sim.cancha2 = 2;
                    }
                    //SUMO COLA
                    else
                    {
                        sim.cola[0]++;
                    }
                }
                break;

            //BASQUET LLEGADA
            case 1:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 1;
                grupo.evento.nombre = "LlegadaBasket";
                //CUANDO UTILIZA UN RND NUEVO
                if (grupo.generoRandom == 2)
                {
                    grupo.random_1     = random.NextDouble();
                    grupo.random_2     = random.NextDouble();
                    grupo.generoRandom = 0;
                }
                //CUANDO UTILIZA EL 2 RANDOM
                if (!grupo.utilizaRandom)
                {
                    grupo.timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(grupo.random_1)) * Math.Cos(2 * Math.PI * grupo.random_2) * 120) + 480;
                    grupo.utilizaRandom     = true;
                    grupo.generoRandom++;
                }
                else
                {
                    grupo.timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(grupo.random_1)) * Math.Sin(2 * Math.PI * grupo.random_2) * 120) + 480;
                    grupo.utilizaRandom     = false;
                    grupo.generoRandom++;
                }
                //FUTBOL FIN CUANDO LLEGA
                if (sim != null)
                {
                    sim.grupos[j].evento        = new Eventos();
                    sim.grupos[j].evento.id     = 1;
                    sim.grupos[j].evento.nombre = "LlegadaBasket";
                    //CUANDO UTILIZA UN RND NUEVO
                    if (sim.grupos[j].generoRandom == 2)
                    {
                        sim.grupos[j].random_1     = random.NextDouble();
                        sim.grupos[j].random_2     = random.NextDouble();
                        sim.grupos[j].generoRandom = 0;
                    }
                    //CUANDO UTILIZA EL 2 RANDOM
                    if (!sim.grupos[j].utilizaRandom)
                    {
                        sim.grupos[j].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[j].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[j].random_2) * 120) + 480;
                        sim.grupos[j].utilizaRandom     = true;
                        sim.grupos[j].generoRandom++;
                    }
                    else
                    {
                        sim.grupos[j].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[j].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[j].random_2) * 120) + 480;
                        sim.grupos[j].utilizaRandom     = false;
                        sim.grupos[j].generoRandom++;
                    }
                    //SI PUEDE JUGAR
                    if (sim.cancha1 == 1 || sim.cancha2 == 1 && sim.cola[0] == 0 && sim.cola[2] == 0)
                    {
                        sim.grupos[4].timpoEntreLlegada = 70 + (sim.grupos[4].random_1 * (130 - 70));
                        sim.grupos[4].random_1          = random.NextDouble();
                        sim.grupos[4].proximaLlegada    = sim.grupos[4].timpoEntreLlegada + sim.reloj;

                        if (sim.cancha1 == 1 && sim.cancha2 == 1)
                        {
                            sim.cancha1 = 2;
                            sim.cancha2 = 1;
                        }
                        else if (sim.cancha1 == 1 && sim.cancha2 == 2)
                        {
                            sim.cancha1 = 2;
                        }
                        else if (sim.cancha1 == 2 && sim.cancha2 == 1)
                        {
                            sim.cancha2 = 2;
                        }
                    }
                    //SUMO COLA
                    else
                    {
                        sim.cola[1]++;
                    }
                }
                break;

            //HANDBALL LLEGADA
            case 2:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 2;
                grupo.evento.nombre = "LlegadaHandBall";
                //CUANDO UTILIZA UN RND NUEVO
                if (grupo.generoRandom == 2)
                {
                    grupo.random_1     = random.NextDouble();
                    grupo.random_2     = random.NextDouble();
                    grupo.generoRandom = 0;
                }
                //CUANDO UTILIZA EL 2 RANDOM
                if (!grupo.utilizaRandom)
                {
                    grupo.timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(grupo.random_1)) * Math.Cos(2 * Math.PI * grupo.random_2) * 120) + 720;
                    grupo.utilizaRandom     = true;
                    grupo.generoRandom++;
                }
                else
                {
                    grupo.timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(grupo.random_1)) * Math.Sin(2 * Math.PI * grupo.random_2) * 120) + 720;
                    grupo.utilizaRandom     = false;
                    grupo.generoRandom++;
                }

                //HANDBALL FIN CUANDO LLEGA
                if (sim != null)
                {
                    sim.grupos[j].evento        = new Eventos();
                    sim.grupos[j].evento.id     = 2;
                    sim.grupos[j].evento.nombre = "LlegadaHandBall";
                    //CUANDO UTILIZA UN RND NUEVO
                    if (sim.grupos[j].generoRandom == 2)
                    {
                        sim.grupos[j].random_1     = random.NextDouble();
                        sim.grupos[j].random_2     = random.NextDouble();
                        sim.grupos[j].generoRandom = 0;
                    }
                    //CUANDO UTILIZA EL 2 RANDOM
                    if (!sim.grupos[j].utilizaRandom)
                    {
                        sim.grupos[j].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[j].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[j].random_2) * 120) + 720;
                        sim.grupos[j].utilizaRandom     = true;
                        sim.grupos[j].generoRandom++;
                    }
                    else
                    {
                        sim.grupos[j].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[j].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[j].random_2) * 120) + 720;
                        sim.grupos[j].utilizaRandom     = false;
                        sim.grupos[j].generoRandom++;
                    }
                    //SI PUEDE JUGAR
                    if (sim.cancha1 == 1 && sim.cancha2 == 1 && sim.cola[2] == 0)
                    {
                        //CUANDO UTILIZA UN RND NUEVO
                        if (sim.grupos[5].generoRandom == 2)
                        {
                            sim.grupos[5].random_1     = random.NextDouble();
                            sim.grupos[5].random_2     = random.NextDouble();
                            sim.grupos[5].generoRandom = 0;
                        }
                        //CUANDO UTILIZA EL 2 RANDOM
                        if (!sim.grupos[5].utilizaRandom)
                        {
                            sim.grupos[5].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[5].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[5].random_2) * 20) + 80;
                            sim.grupos[5].proximaLlegada    = sim.grupos[5].timpoEntreLlegada + sim.reloj;
                            sim.grupos[5].utilizaRandom     = true;
                            grupo.generoRandom++;
                        }
                        else
                        {
                            sim.grupos[5].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[5].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[3].random_2) * 20) + 80;
                            sim.grupos[5].proximaLlegada    = sim.grupos[5].timpoEntreLlegada + sim.reloj;
                            sim.grupos[5].utilizaRandom     = false;
                            grupo.generoRandom++;
                        }
                        sim.cancha1 = 2;
                        sim.cancha2 = 2;
                    }
                    //SUMO COLA
                    else
                    {
                        sim.cola[2]++;
                    }
                }
                break;

            //FIN FUTBOL
            case 3:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 3;
                grupo.evento.nombre = "FinFutbol";
                if (sim != null)
                {
                    sim.limpieza                   = new Limpieza();
                    sim.limpieza.ordena            = true;
                    sim.limpieza.acondicionamiento = 10.0;
                    sim.limpieza.finLimpieza       = sim.reloj + sim.limpieza.acondicionamiento;
                    sim.cancha1 = 3;
                    sim.cancha2 = 3;
                    sim.grupos[3].proximaLlegada = 9999999;
                }
                break;

            //FIN BASQUET
            case 4:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 4;
                grupo.evento.nombre = "FinBasquet";
                if (sim != null)
                {
                    sim.limpieza                   = new Limpieza();
                    sim.limpieza.ordena            = true;
                    sim.limpieza.acondicionamiento = 10.0;
                    sim.limpieza.finLimpieza       = sim.reloj + sim.limpieza.acondicionamiento;
                    sim.cancha1 = 3;
                    sim.cancha2 = 3;
                    sim.grupos[4].proximaLlegada = 9999999;
                }
                break;

            //FIN HANDBALL
            case 5:
                grupo.evento        = new Eventos();
                grupo.evento.id     = 5;
                grupo.evento.nombre = "FinHandball";
                if (sim != null)
                {
                    sim.limpieza                   = new Limpieza();
                    sim.limpieza.ordena            = true;
                    sim.limpieza.acondicionamiento = 10.0;
                    sim.limpieza.finLimpieza       = sim.reloj + sim.limpieza.acondicionamiento;
                    sim.cancha1 = 3;
                    sim.cancha2 = 3;
                    sim.grupos[5].proximaLlegada = 9999999;
                }
                break;

            //LIMPIEZA
            case 6:
                sim.cancha1 = 1;
                sim.cancha2 = 1;
                sim.grupos[3].proximaLlegada = 999999;
                sim.grupos[4].proximaLlegada = 999999;
                sim.grupos[5].proximaLlegada = 999999;
                if (sim != null)
                {
                    var temporario = calcularLlegadaCola();
                    if (temporario.nombre != "")
                    {
                        if (sim.cola[0] > 0 && temporario.id_estado == 0)
                        {
                            if (sim.grupos[3].generoRandom == 2)
                            {
                                sim.grupos[3].random_1     = random.NextDouble();
                                sim.grupos[3].random_2     = random.NextDouble();
                                sim.grupos[3].generoRandom = 0;
                            }
                            //CUANDO UTILIZA EL 2 RANDOM
                            if (!sim.grupos[3].utilizaRandom)
                            {
                                sim.grupos[3].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[3].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[3].random_2) * 10) + 90;
                                sim.grupos[3].proximaLlegada    = sim.grupos[3].timpoEntreLlegada + sim.reloj;
                                sim.grupos[3].utilizaRandom     = true;
                                sim.grupos[3].generoRandom++;
                            }
                            else
                            {
                                sim.grupos[3].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[3].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[3].random_2) * 10) + 90;
                                sim.grupos[3].proximaLlegada    = sim.grupos[3].timpoEntreLlegada + sim.reloj;
                                sim.grupos[3].utilizaRandom     = false;
                                sim.grupos[3].generoRandom++;
                            }
                            sim.cancha1 = 2;
                            sim.cancha2 = 2;
                            sim.cola[0]--;
                        }
                        else if (sim.cola[2] > 0 && temporario.id_estado == 2)
                        {
                            if (sim.grupos[5].generoRandom == 2)
                            {
                                sim.grupos[5].random_1     = random.NextDouble();
                                sim.grupos[5].random_2     = random.NextDouble();
                                sim.grupos[5].generoRandom = 0;
                            }
                            //CUANDO UTILIZA EL 2 RANDOM
                            if (!sim.grupos[5].utilizaRandom)
                            {
                                sim.grupos[5].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[5].random_1)) * Math.Cos(2 * Math.PI * sim.grupos[5].random_2) * 20) + 80;
                                sim.grupos[5].proximaLlegada    = sim.grupos[5].timpoEntreLlegada + sim.reloj;
                                sim.grupos[5].utilizaRandom     = true;
                                sim.grupos[5].generoRandom++;
                            }
                            else
                            {
                                sim.grupos[5].timpoEntreLlegada = (Math.Sqrt(-2 * Math.Log(sim.grupos[5].random_1)) * Math.Sin(2 * Math.PI * sim.grupos[3].random_2) * 20) + 80;
                                sim.grupos[5].proximaLlegada    = sim.grupos[5].timpoEntreLlegada + sim.reloj;
                                sim.grupos[5].utilizaRandom     = false;
                                sim.grupos[5].generoRandom++;
                            }
                            sim.cancha1 = 2;
                            sim.cancha2 = 2;
                            sim.cola[2]--;
                        }
                        else if (sim.cola[1] > 0 && temporario.id_estado == 1)
                        {
                            sim.grupos[4].timpoEntreLlegada = 70 + (sim.grupos[4].random_1 * (130 - 70));
                            sim.grupos[4].random_1          = random.NextDouble();
                            sim.grupos[4].proximaLlegada    = sim.grupos[4].timpoEntreLlegada + sim.reloj;

                            if (sim.cancha1 == 1 && sim.cancha2 == 1)
                            {
                                sim.cancha1 = 2;
                                sim.cancha2 = 1;
                            }
                            else if (sim.cancha1 == 1 && sim.cancha2 == 2)
                            {
                                sim.cancha1 = 2;
                            }
                            else if (sim.cancha1 == 2 && sim.cancha2 == 1)
                            {
                                sim.cancha2 = 2;
                            }
                            sim.cola[1]--;
                        }
                    }
                }

                break;
            }
        }