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
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_()
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) grilla_simulacion.actualizar() # 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_()
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 y in range(1, 21): for x 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(y, x, 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 y in range(1, 21): for x in range(1, 31): grilla_simulacion.quitar_imagen(y, x) # 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_()
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_()
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_()
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)