Esempio n. 1
0
def nuevo_mapa(app):
    with open('mapa fix.txt', 'r', encoding='utf8') as arch:
        dimension = arch.readline().strip()
        dimension = dimension.split('x')
        grilla_simulacion = GrillaSimulacion(app, rows=int(dimension[0]), cols=(int(dimension[1]) + 1))
        linea1 = arch.readline().strip()
        lista_vacios = []
        lista_casas = []
        lista_calle_entrada = []
        lista_calle_salida = []
        principio = True
        mapa_calles = []
        for i in range(int(dimension[0])):
            mapa_calles.append([''] * (int(dimension[1]) + 1))
        while principio is True:
            lista = linea1.split(' ')
            cordenadas = lista[0].split(',')
            cordenadas_bien = [int(cordenadas[0]) + 1, int(cordenadas[1]) + 1]
            if lista[1] == 'calle':
                grilla_simulacion.agregar_calle(cordenadas_bien[0], cordenadas_bien[1])
                calle = Calle(lista[2], cordenadas_bien)
                mapa_calles[int(cordenadas[0])][int(cordenadas[1])] = calle
                if int(cordenadas[0]) == 0:
                    if lista[2] == 'arriba':
                        lista_calle_salida.append(calle)
                    elif lista[2] == 'abajo':
                        lista_calle_entrada.append(calle)
                elif int(cordenadas[1]) == 0:
                    if lista[2] == 'izquierda':
                        lista_calle_salida.append(calle)
                    elif lista[2] == 'derecha':
                        lista_calle_entrada.append(calle)
                elif int(cordenadas[0]) == int(dimension[0]):
                    if lista[2] == 'abajo':
                        lista_calle_salida.append(calle)
                    elif lista[2] == 'arriba':
                        lista_calle_entrada.append(calle)
                elif int(cordenadas[1]) == int(dimension[1]):
                    if lista[2] == 'derecha':
                        lista_calle_salida.append(calle)
                    elif lista[2] == 'izquierda':
                        lista_calle_entrada.append(calle)
            elif lista[1] == 'casa':
                grilla_simulacion.agregar_casa(cordenadas_bien[0], cordenadas_bien[1])
                ladrones = [int(lista[4][1:3]), int(lista[5][0:2])]
                casa = Casa(lista[3], ladrones, cordenadas_bien)
                lista_casas.append(casa)
            elif lista[1] == 'vacio':
                lista_vacios.append(cordenadas_bien)
            linea1 = arch.readline().strip()
            if linea1 == '':
                principio = False
    esquinas = encontrar_esquinas(mapa_calles, lista_calle_salida)
    return lista_casas, mapa_calles, lista_vacios, lista_calle_entrada, lista_calle_salida, grilla_simulacion, esquinas
Esempio n. 2
0
def main():
    # Aquí se inicializa el sistema de ventanas de PyQt4. Es importante
    # tener claro que aquí aún NO se muestra la ventana de la simulación.
    app = QtGui.QApplication([])

    # Inicializamos la ventana propiamente tal, aún sin mostrarla. Le pasamos
    # una referencia al objeto instanciado más arriba para poder actualizar
    # la interfaz en cada cambio realizado.
    grilla_simulacion = GrillaSimulacion(app, 30)

    # Mostramos la ventana.
    grilla_simulacion.show()
Esempio n. 3
0
    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)
Esempio n. 4
0
def main():
    # Aquí se inicializa el sistema de ventanas de PyQt4. Es importante
    # tener claro que aquí aún NO se muestra la ventana de la simulación.
    app = QtGui.QApplication([])

    # Inicializamos la ventana propiamente tal, aún sin mostrarla. Le pasamos
    # una referencia al objeto instanciado más arriba para poder actualizar
    # la interfaz en cada cambio realizado.
    grilla_simulacion = GrillaSimulacion(app, 30)

    # Mostramos la ventana.
    grilla_simulacion.show()

    # Como la simulación es por eventos discretos (muy rápida), es
    # recomendable esperar algún intervalo de tiempo entre actualizaciones
    # de la interfaz. Es importante detallar en el README.md si se decide

    for i in range(1, 21):
        grilla_simulacion.agregar_calle(i, 13)
        grilla_simulacion.agregar_calle(13, i)

    for x in range(1, 21):
        for y in range(1, 31):
            # Esto es equivalente a llamar a grilla_simulacion.agregar_auto
            nuevo_auto = rnd.choice([
                grilla_simulacion.agregar_convertible,
                grilla_simulacion.agregar_sedan,
                grilla_simulacion.agregar_pickup
            ])
            nuevo_auto(x, y, 0, y % 2 == 0)

    # Además existe el parámetro `tiempo_intervalo` de `GrillaSimulacion` que
    # controla el intervalo de tiempo entre actualizaciones. Por defecto parte
    # con un valor igual a 0, para inicializar la iterfaz rápido, pero luego
    # deben modificarlo para que la simulación muestre los cambios a una
    # velocidad más amigable.
    grilla_simulacion.tiempo_intervalo = 0.5

    for x in range(1, 21):
        for y in range(1, 31):
            grilla_simulacion.quitar_imagen(x, y)

    # Bloqueamos el thread principal para que la ventana permanezca abierta.
    # Cuando se cierra la ventana, el thread principal se libera y se termina
    # la ejecución del programa.
    app.exec_()
Esempio n. 5
0
def main():
    dim, calles, vacios, casas = leer_mapa('mapa fix.txt')
    app = QtGui.QApplication([])
    grilla_simulacion = GrillaSimulacion(app, *dim)
    estado_inicial(grilla_simulacion, calles, casas)
    # grilla_simulacion.agregar_ambulancia(1, 1, 0, True)
    # grilla_simulacion.agregar_auto(2, 2, 90, False)
    # grilla_simulacion.agregar_casa(3, 3)
    # grilla_simulacion.agregar_cuartel_bomberos(4, 4)
    # grilla_simulacion.agregar_carro_bomba(5, 5, 180, True)
    # grilla_simulacion.agregar_comisaria(6, 6)
    # grilla_simulacion.agregar_enfermo(20, 5)
    # grilla_simulacion.agregar_hospital(8, 8)
    # grilla_simulacion.agregar_incendio(9, 9)
    # grilla_simulacion.agregar_patrulla(10, 10, 0, False)
    # grilla_simulacion.agregar_robo(11, 11)
    # grilla_simulacion.agregar_taxi(12, 13, 0, True)
    # grilla_simulacion.quitar_imagen(3, 3)

    # for i in range(1, 21):
    #     grilla_simulacion.agregar_calle(i, 13)
    #     grilla_simulacion.agregar_calle(13, i)
    grilla_simulacion.actualizar()
    grilla_simulacion.show()
    app.exec_()
Esempio n. 6
0
def main():
    # Aquí se inicializa el sistema de ventanas de PyQt4. Es importante
    # tener claro que aquí aún NO se muestra la ventana de la simulación.
    app = QtGui.QApplication([])

    # Inicializamos la ventana propiamente tal, aún sin mostrarla. Le pasamos
    # una referencia al objeto instanciado más arriba para poder actualizar
    # la interfaz en cada cambio realizado.
    grilla_simulacion = GrillaSimulacion(app)

    # Mostramos la ventana.
    grilla_simulacion.show()

    # Como la simulación es por eventos discretos (muy rápida), es
    # recomendable esperar algún intervalo de tiempo entre actualizaciones
    # de la interfaz. Es importante detallar en el README.md si se decide

    for i in range(1, 21):
        grilla_simulacion.agregar_calle(i, 13)
        grilla_simulacion.agregar_calle(13, i)

    for x in range(1, 21):
        for y in range(1, 21):
            grilla_simulacion.agregar_auto(x, y, 0, y % 2 == 0)

    # Además existe el parámetro `tiempo_intervalo` de `GrillaSimulacion` que
    # controla el intervalo de tiempo entre actualizaciones. Por defecto parte
    # con un valor igual a 0, para inicializar la iterfaz rápido, pero luego
    # deben modificarlo para que la simulación muestre los cambios a una
    # velocidad más amigable.
    grilla_simulacion.tiempo_intervalo = 0.5

    for x in range(1, 21):
        for y in range(1, 21):
            grilla_simulacion.quitar_imagen(x, y)

    # Bloqueamos el thread principal para que la ventana permanezca abierta.
    # Cuando se cierra la ventana, el thread principal se libera y se termina
    # la ejecución del programa.
    app.exec_()
Esempio n. 7
0
def mostrar_plano(ciudad):

    app = QtGui.QApplication([])
    grilla_simulacion = GrillaSimulacion(app, ciudad.dim[1], ciudad.dim[0])
    grilla_simulacion.show()

    for i in range(ciudad.dim[0]):
        for j in range(ciudad.dim[1]):

            if type(ciudad.plano[i][j]) is Casa:
                grilla_simulacion.agregar_casa(i + 1, j + 1)
            if type(ciudad.plano[i][j]) is Calle:
                grilla_simulacion.agregar_calle(i + 1, j + 1)

    app.exec_()
Esempio n. 8
0
def nuevo_mapa(app):
    with open('mapa fix.txt', 'r', encoding='utf8') as arch:
        dimension = arch.readline().strip()
        dimension = dimension.split('x')
        grilla_simulacion = GrillaSimulacion(app,
                                             rows=int(dimension[0]),
                                             cols=(int(dimension[1]) + 1))
        linea1 = arch.readline().strip()
        lista_vacios = []
        lista_casas = []
        lista_calle_entrada = []
        lista_calle_salida = []
        principio = True
        mapa_calles = []
        for i in range(int(dimension[0])):
            mapa_calles.append([''] * (int(dimension[1]) + 1))
        while principio is True:
            lista = linea1.split(' ')
            cordenadas = lista[0].split(',')
            cordenadas_bien = [int(cordenadas[0]) + 1, int(cordenadas[1]) + 1]
            if lista[1] == 'calle':
                grilla_simulacion.agregar_calle(cordenadas_bien[0],
                                                cordenadas_bien[1])
                calle = Calle(lista[2], cordenadas_bien)
                mapa_calles[int(cordenadas[0])][int(cordenadas[1])] = calle
                if int(cordenadas[0]) == 0:
                    if lista[2] == 'arriba':
                        lista_calle_salida.append(calle)
                    elif lista[2] == 'abajo':
                        lista_calle_entrada.append(calle)
                elif int(cordenadas[1]) == 0:
                    if lista[2] == 'izquierda':
                        lista_calle_salida.append(calle)
                    elif lista[2] == 'derecha':
                        lista_calle_entrada.append(calle)
                elif int(cordenadas[0]) == int(dimension[0]):
                    if lista[2] == 'abajo':
                        lista_calle_salida.append(calle)
                    elif lista[2] == 'arriba':
                        lista_calle_entrada.append(calle)
                elif int(cordenadas[1]) == int(dimension[1]):
                    if lista[2] == 'derecha':
                        lista_calle_salida.append(calle)
                    elif lista[2] == 'izquierda':
                        lista_calle_entrada.append(calle)
            elif lista[1] == 'casa':
                grilla_simulacion.agregar_casa(cordenadas_bien[0],
                                               cordenadas_bien[1])
                ladrones = [int(lista[4][1:3]), int(lista[5][0:2])]
                casa = Casa(lista[3], ladrones, cordenadas_bien)
                lista_casas.append(casa)
            elif lista[1] == 'vacio':
                lista_vacios.append(cordenadas_bien)
            linea1 = arch.readline().strip()
            if linea1 == '':
                principio = False
    esquinas = encontrar_esquinas(mapa_calles, lista_calle_salida)
    return lista_casas, mapa_calles, lista_vacios, lista_calle_entrada, lista_calle_salida, grilla_simulacion, esquinas
Esempio n. 9
0
def main():
    app = QtGui.QApplication([])
    grilla_simulacion = GrillaSimulacion(app)
    grilla_simulacion.agregar_ambulancia(1, 1, 0, True)
    grilla_simulacion.agregar_auto(2, 2, 90, False)
    grilla_simulacion.agregar_casa(3, 3)
    grilla_simulacion.agregar_cuartel_bomberos(4, 4)
    grilla_simulacion.agregar_carro_bomba(5, 5, 180, True)
    grilla_simulacion.agregar_comisaria(6, 6)
    grilla_simulacion.agregar_enfermo(20, 5)
    grilla_simulacion.agregar_hospital(8, 8)
    grilla_simulacion.agregar_incendio(9, 9)
    grilla_simulacion.agregar_patrulla(10, 10, 0, False)
    grilla_simulacion.agregar_robo(11, 11)
    grilla_simulacion.agregar_taxi(12, 13, 0, True)
    grilla_simulacion.quitar_imagen(3, 3)

    for i in range(1, 21):
        grilla_simulacion.agregar_calle(i, 13)
        grilla_simulacion.agregar_calle(13, i)

    grilla_simulacion.show()
    app.exec_()
Esempio n. 10
0
                else:
                    self.cambiar_semaforos('horizontal')
            # self.interface.actualizar()

    def __str__(self):
        string = '⚹  ' + ' '.join(
            str(i).ljust(2) for i in range(1, len(self.matrix[0]) + 1)) + '\n'
        for i, j in zip(self.matrix, range(1, len(self.matrix) + 1)):
            string += str(j).ljust(2) + ' '.join(str(j) for j in i) + '\n'
        return string[:-1]


if __name__ == '__main__':
    datos = leer_mapa('mapa fix.txt')
    app = QtGui.QApplication([])
    interfaz = GrillaSimulacion(app, *datos[0])
    city = Ciudad(interfaz, datos[0][0], datos[0][1],
                  datos[1], datos[3], datos[2])
    print(city.max_autos)
    city.agregar_autos()
    city.interface.actualizar()
    print([i.posicion for i in city.autos])
    city.interface.show()
    print(len(city.autos))
    # print(city)
    city.interface.tiempo_intervalo = 0.5
    city.posibles()
    # print(city)
    # city.interface.actualizar()
    app.exec_()
Esempio n. 11
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)
Esempio n. 12
0
def main():
    app = QtGui.QApplication([])
    grilla_simulacion = GrillaSimulacion()
    grilla_simulacion.agregar_ambulancia(1, 1, 0, True)
    grilla_simulacion.agregar_auto(2, 2, 90, False)
    grilla_simulacion.agregar_casa(3, 3)
    grilla_simulacion.agregar_cuartel_bomberos(4, 4)
    grilla_simulacion.agregar_carro_bomba(5, 5, 180, True)
    grilla_simulacion.agregar_comisaria(6, 6)
    grilla_simulacion.agregar_enfermo(20, 5)
    grilla_simulacion.agregar_hospital(8, 8)
    grilla_simulacion.agregar_incendio(9, 9)
    grilla_simulacion.agregar_patrulla(10, 10, 0, False)
    grilla_simulacion.agregar_robo(11, 11)
    grilla_simulacion.agregar_taxi(12, 13, 0, True)
    grilla_simulacion.quitar_imagen(3, 3)

    for i in range(1, 21):
        grilla_simulacion.agregar_calle(i, 13)
        grilla_simulacion.agregar_calle(13, i)

    grilla_simulacion.show()
    app.exec_()