Exemplo n.º 1
0
    def __init__(self, app, repeticiones):
        self.app = app
        self.repeticiones = repeticiones
        self.var = {"t": 0, "t_max": 1209600, "t_incendio": 0,
                    "n_incendio": 0, "n_atrapado": 0, "n_escapo": 0,
                    "n_robos": 0, "t_ambulancia": 0, "n_enfermos": 0}
        self.grilla = None
        self.dimx = None
        self.dimy = None
        self.calles = dict()
        self.casas = dict()
        self.vacios = dict()
        self.cargar_archivos()
        self.arbol = Arbol(self.calles)
        self.cargar_gui()
        self.transito = Transito(
            self.calles, self.grilla, self.dimx, self.dimy)
        self.transito.cargar()
        self.transito.actualizar_transito()

        # refresh mas lento
        self.grilla.tiempo_intervalo = 0.5

        self.combinaciones()
Exemplo n.º 2
0
class Simulacion:

    def __init__(self, app, repeticiones):
        self.app = app
        self.repeticiones = repeticiones
        self.var = {"t": 0, "t_max": 1209600, "t_incendio": 0,
                    "n_incendio": 0, "n_atrapado": 0, "n_escapo": 0,
                    "n_robos": 0, "t_ambulancia": 0, "n_enfermos": 0}
        self.grilla = None
        self.dimx = None
        self.dimy = None
        self.calles = dict()
        self.casas = dict()
        self.vacios = dict()
        self.cargar_archivos()
        self.arbol = Arbol(self.calles)
        self.cargar_gui()
        self.transito = Transito(
            self.calles, self.grilla, self.dimx, self.dimy)
        self.transito.cargar()
        self.transito.actualizar_transito()

        # refresh mas lento
        self.grilla.tiempo_intervalo = 0.5

        self.combinaciones()

    def dim(self, linea):
        x = int(linea[:linea.find(",")])
        y = int(linea[linea.find(",") + 1:])
        return x, y

    def cargar_archivos(self):
        with open("mapa.txt", "r") as f:
            linea = f.readline()
            self.dimx = int(linea[:linea.find("x")])
            self.dimy = int(linea[linea.find("x") + 1:])
            linea = f.readline()
            while linea != "":
                linea = linea.replace("\n", "")
                lineas = linea.split(" ")
                x, y = self.dim(lineas[0])
                if "calle" in linea:
                    self.calles[lineas[0]] = Calle(x, y, lineas[2])
                elif "casa" in linea:
                    tipo = lineas[3]
                    t_min = int(lineas[4][1:-1])
                    t_max = int(lineas[5][:-2])
                    self.casas[lineas[0]] = Casa(tipo, x, y, t_min, t_max)
                else:
                    self.vacios[lineas[0]] = None
                linea = f.readline()

    def cargar_gui(self):
        self.grilla = GrillaSimulacion(self.app, rows=25, cols=23)
        self.grilla.show()

        # cargar
        for casa in self.casas.values():
            self.grilla.agregar_casa(casa.y + 1, casa.x + 1)

        for calle in self.calles.values():
            self.grilla.agregar_calle(calle.y + 1, calle.x + 1)

    def combinaciones(self):
        lista = [Cuartel(), Comisaria(), Hospital(), None]
        permutaciones = list(permutations(lista))
        for combinacion in permutaciones:
            combinacion = list(combinacion)
            for k in self.vacios:
                self.vacios[k] = combinacion.pop()
            self.emergencias_gui()
            self.simular()

    def emergencias_gui(self):
        self.grilla.tiempo_intervalo = 0
        self.borrar_emergencias()
        for k, v in self.vacios.items():
            x, y = self.dim(k)
            if v is not None:
                if v.tipo == "Cuartel":
                    self.grilla.agregar_cuartel_bomberos(y + 1, x + 1)
                elif v.tipo == "Comisaria":
                    self.grilla.agregar_comisaria(y + 1, x + 1)
                elif v.tipo == "Hospital":
                    self.grilla.agregar_hospital(y + 1, x + 1)
        self.grilla.tiempo_intervalo = 0.5

    def borrar_emergencias(self):
        for k in self.vacios:
            x, y = self.dim(k)
            self.grilla.quitar_imagen(y + 1, x + 1)

    def simular(self):
        time.sleep(1)