def priorizar(self): if len(self.colaprioridades) == 0: return a = self.colaprioridades c = sorted(a, key=lambda a: a[1], reverse=True) b = li.ListaLigada() for lista in c: aux2 = li.ListaLigada(*lista) b.append(aux2) #print(b) for i in range(0, 3): try: if b[i][2] == "Abrir Frontera": print("se ha abierto la frontera de {}".format( b[i][0].nombre)) b[i][0].frontera_cerrada = False if b[i][2] == "Cerrar Frontera": print("se ha cerrado la frontera de {}".format( b[i][0].nombre)) b[i][0].frontera_cerrada = True self.fronteras_cerradas_dia.append(b[i][0].nombre) if b[i][2] == "Cerrar Aeropuertos": print("se ha cerrado el aeropuerto de {}".format( b[i][0].nombre)) b[i][0].aeropuerto_cerrado = True self.aeropuertos_cerrados_dia.append(b[i][0].nombre) if b[i][2] == "Abrir Aeropuertos": print("se ha abierto el aeropuerto de {}".format( b[i][0].nombre)) b[i][0].aeropuerto_cerrado = False if b[i][2] == "Entregar Mascarillas": b[i][0].mascarillas = True self.mascaras_dia.append(b[i][0].nombre) if b[i][2] == "Abrir Aeropuertos y Fronteras": print("se ha abierto todo de {}".format(b[i][0].nombre)) b[i][0].frontera_cerrada = False b[i][0].aeropuerto_cerrado = False except IndexError: print()
def emitir_proposicion(self, factor, encabezado): prioridad = (factor * self.infectados) / self.poblacion proposicion = li.ListaLigada() proposicion.append(self) proposicion.append(prioridad) proposicion.append(encabezado) proposicion.append(self.nombre) self.proposiciones.append(proposicion) return proposicion
def simular(self): print("Estamos en el dia {}".format(self.dias)) print() self.cura() #print("paises infectados") #print(self.paises_infectados) self.aeropuertos_cerrados_dia = li.ListaLigada() self.fronteras_cerradas_dia = li.ListaLigada() self.mascaras_dia = li.ListaLigada() self.colaprioridades = li.ListaLigada() self.paises_infectados_dia = li.ListaLigada() self.muertes_dia = 0 self.infecciones_dia = 0 #print("las muertes globales son {0}, las infecciones globales son {1}".format(self.muertes, self.infecciones)) self.dias += 1 for pais in self.paises: #print(pais.__dict__) if pais.status == "infectado" and pais.nombre not in self.paises_infectados_dia: pais.infectar(self) #print( #"stats del pais {0} infectados, {1} muertos, {2} sanos y {3} de poblacion inicial, nombre {4}".format( # pais.infectados, pais.muertos, pais.sanos, (pais.infectados + pais.muertos + pais.sanos), # pais.nombre)) pais.curar() pais.infectar_vecinos(self) pais.matar(self) #print( #"stats del pais {0} infectados, {1} muertos, {2} sanos y {3} de poblacion inicial, nombre {4}".format( # pais.infectados, pais.muertos, pais.sanos, (pais.infectados + pais.muertos + pais.sanos), # pais.nombre)) self.poblacion_actual -= self.muertes_dia self.priorizar() self.estadisticaspordia.append("En el dia " + str(self.dias) + " se murieron " + str(self.muertes_dia) + " personas y se infectaron " + str(self.infecciones_dia) + " personas") self.check()
def __init__(self, nombre, aeropuerto=None, vecinos=None, poblacion=None, status="limpio"): self.nombre = nombre self.aeropuertos = li.ListaLigada() self.vecinos = li.ListaLigada() self.poblacion = poblacion self.status = status self.infectados = 0 self.infectados_dia = 0 self.sanos = self.poblacion self.muertos = 0 self.muertos_dia = 0 self.mascarillas = False self.infeccion = None self.aeropuerto_cerrado = False self.frontera_cerrada = False self.cura = False self.cura_descubierta = False self.proposiciones = li.ListaLigada()
def __init__(self): self.infeccion = None self.paises = li.ListaLigada() self.poblacion_inicial = 0 self.colaprioridades = li.ListaLigada() self.poblar() self.poblar2() self.dias = 0 self.poblacion_actual = self.poblacion_inicial self.paises_infectados_dia = li.ListaLigada() self.muertes_dia = 0 self.infecciones_dia = 0 self.aeropuertos_cerrados_dia = li.ListaLigada() self.fronteras_cerradas_dia = li.ListaLigada() self.mascaras_dia = li.ListaLigada() self.muertes = 0 self.infecciones = 0 self.buscar_cura = False self.avance_cura = 0 self.cura_encontrada = False self.paises_infectados = li.ListaLigada() self.estadisticaspordia = li.ListaLigada( "En el dia 0 se murieron 0 personas y se infectaron 1 personas")
def cura(self): if not self.buscar_cura: proba = (self.infeccion.visibilidad * self.infecciones * (self.muertes)**2) / (self.poblacion_inicial)**3 azar = random.randint(0, 100) #print("la proba es {0} y el azar es {1}".format(proba, azar)) if proba * 100 >= azar: print("Se ha comenzado a trabajar en la cura") self.buscar_cura = True if self.buscar_cura: if self.avance_cura >= 1: if not self.cura_encontrada: print("se ha encontrado la cura") self.cura_encontrada = True indice = random.randint(0, len(self.paises) - 1) self.paises[indice].cura_descubierta = True self.paises[indice].cura = True print("la cura se inserto en {}".format( self.paises[indice])) return if self.cura_encontrada: paises_ya_curados = li.ListaLigada( ) # esto es para ir guardando los paises vecinos que ya se curaron y no repetirlos for pais in self.paises: if pais.cura == True and pais not in paises_ya_curados: for pa in pais.aeropuertos: if not pa.aeropuerto_cerrado: pa.cura = True print( "la cura se extendio a {0}".format(pa)) paises_ya_curados.append(pa) elif self.avance_cura < 1: self.avance_cura += (self.poblacion_inicial - self.muertes - self.infecciones) / ( 2 * self.poblacion_inicial)
def checkmuerto(self): if self.muertos >= self.poblacion: self.status = "muerto" #self.updatecontador() self.proposiciones = li.ListaLigada() print("{} ha muerto".format(self.nombre))
def poblar2(self): listaaux = li.ListaLigada() listacompilada = li.ListaLigada() l_conexion_pais = li.ListaLigada() listafronteras = li.ListaLigada() with open("borders.csv", newline='') as g: reader = csv.reader(g) for row in reader: row = row[0].split(";") row = ",".join(row) row = row.split(",") aux2 = li.ListaLigada(*row) listaaux.append(aux2) ultimo = li.ListaLigada() ultimo.append( "neverland" ) # Estas 3 lineas son para que mi algoritmo agarre el ultimo item de la lista bien listaaux.append(ultimo) del listaaux[0] actual = '' for item in listaaux: if actual == '': # Para asi poder compilar las fronteras del primer pais de la lista actual = item[1] listacompilada.append(actual) l_conexion_pais.append(item[0]) elif actual != '': if actual == item[1]: l_conexion_pais.append(item[0]) if actual != item[1]: listacompilada.append(l_conexion_pais) listafronteras.append(listacompilada) l_conexion_pais = li.ListaLigada() listacompilada = li.ListaLigada() actual = item[1] listacompilada.append(actual) l_conexion_pais.append(item[0]) for pais in self.paises: for pais2 in listafronteras: if pais.nombre == pais2[0]: # pais.vecinos = pais2[1] Note to self: si es mejor operar con los vecinos como str, descomentar # esta loinea y borrar abajo for paisfronterizo in pais2[1]: for paistotal in self.paises: if paisfronterizo == paistotal.nombre and paistotal not in pais.vecinos: pais.vecinos.append(paistotal) with open("random_airports.csv", newline='' ) as f: # Linea extraida de la libreria online de python listaaux = li.ListaLigada() l_conexion_pais = li.ListaLigada() listaaux = li.ListaLigada() listafronteras = li.ListaLigada() reader = csv.reader(f) for row in reader: aux2 = li.ListaLigada(*row) listaaux.append(aux2) del (listaaux[0]) ultimo = li.ListaLigada() ultimo.append( "neverland" ) # Estas 3 lineas son para que mi algoritmo agarre el ultimo item de la lista bien listaaux.append(ultimo) actual = '' for item in listaaux: if actual == '': # Para asi poder compilar las fronteras del primer pais de la lista actual = item[1] listacompilada.append(actual) l_conexion_pais.append(item[0]) elif actual != '': if actual == item[1]: l_conexion_pais.append(item[0]) if actual != item[1]: listacompilada.append(l_conexion_pais) listafronteras.append(listacompilada) l_conexion_pais = li.ListaLigada() listacompilada = li.ListaLigada() actual = item[1] listacompilada.append(actual) l_conexion_pais.append(item[0]) for pais in self.paises: for pais2 in listafronteras: if pais.nombre == pais2[0]: # pais.vecinos = pais2[1] Note to self: si es mejor operar con los vecinos como str, descomentar esta linea y borrar abajo for paisfronterizo in pais2[1]: for paistotal in self.paises: if paisfronterizo == paistotal.nombre and paistotal not in pais.aeropuertos: pais.aeropuertos.append(paistotal)
def cargar_tablero(self, nombre): oripath = os.getcwd() os.chdir(os.getcwd() + "/Partidas Guardadas/" + nombre) archivo = open(nombre + ".txt", "r") lista = '' for line in archivo: line = line.strip("[") line = line.strip("]") line = line.split(",") lista = li.ListaLigada(*line) #print(lista) if lista[0] == "Virus": self.infeccion = Virus() if lista[0] == "Bacteria": self.infeccion = Bacteria() if lista[0] == "Parasito": self.infeccion = Parasito() self.poblacion_inicial = int(lista[1]) self.dias = int(lista[2]) self.poblacion_actual = int(lista[3]) aux = int(lista[4]) num = 5 for i in range(5, 5 + aux): self.paises_infectados_dia.append(lista[i]) num += 1 self.muertes_dia = lista[num] self.infecciones_dia = lista[num + 1] aux = int(lista[num + 2]) num = num + 3 for i in range(num, num + aux): self.aeropuertos_cerrados_dia.append(lista[i]) num += 1 aux = int(lista[num]) num = num + 1 for i in range(num, num + aux): self.fronteras_cerradas_dia.append(lista[i]) num += 1 aux = int(lista[num]) num = num + 1 for i in range(num, num + aux): self.mascaras_dia.append(lista[i]) num += 1 self.muertes = int(lista[num]) self.infecciones = int(lista[num + 1]) if lista[num + 2] == "False": self.buscar_cura = False if lista[num + 2] == "True": self.buscar_cura = True self.avance_cura = float(lista[num + 3]) if lista[num + 4] == "False": self.cura_encontrada = False if lista[num + 4] == "True": self.cura_encontrada = True aux = int(lista[num + 5]) num = num + 6 for i in range(num, num + aux): self.paises_infectados.append(lista[i]) num += 1 num += 1 for i in range(num, len(lista)): self.estadisticaspordia.append(lista[i]) archivo = open(nombre + "_paises.txt", "r") lista = li.ListaLigada() for line in archivo: line = line.strip("[") line = line.strip("]") line = line.replace("'", "") line = line.split(",") pais = li.ListaLigada(*line) lista.append(pais) #print(lista) for pais in self.paises: for linea in lista: #for item in linea: # print() if pais.nombre == linea[0]: pais.status = linea[1][1:] pais.infectados = int(linea[2]) pais.infectados_dia = int(linea[3]) pais.sanos = int(linea[4]) pais.muertos = int(linea[5]) pais.muertos_dia = int(linea[6]) if linea[7] == " False": pais.mascarillas = False if linea[7] == " True": pais.mascarillas = True #print("esta es la infeccion {}".format(linea[7])) if linea[8] == " None": pais.infeccion = None elif linea[8] == " Virus": pais.infeccion = Virus() elif linea[8] == " Bacteria": pais.infeccion = Bacteria() elif linea[8] == " Parasito": pais.infeccion = Parasito() if linea[9] == " False": pais.aeropuerto_cerrado = False if linea[9] == " True": pais.aeropuerto_cerrado = True if linea[10] == " False": pais.frontera_cerrada = False if linea[10] == " True": pais.frontera_cerrada = True if linea[11] == " True": pais.cura = True if linea[11] == " False": pais.cura = False if linea[12] == " True": pais.cura_descubierta = True if linea[12] == " False": pais.cura_descubierta = False os.chdir(oripath) '''for pais in self.paises:
def guardar_tablero(self): name = input("nombre de partida") path2 = os.getcwd( ) + "/Partidas Guardadas/" + name # Creador de carpeta if not os.path.exists(path2): os.mkdir("Partidas Guardadas/" + name) oripath = os.getcwd() path1 = os.getcwd() + "/random_airports.csv" path2 = os.getcwd( ) + "/Partidas Guardadas/" + name + "/random_airports.csv" os.rename(path1, path2) shutil.copyfile( oripath + "/borders.csv", oripath + "/Partidas Guardadas/" + name + "/borders.csv") shutil.copyfile( oripath + "/population.csv", oripath + "/Partidas Guardadas/" + name + "/population.csv") guardar = li.ListaLigada() guardar.append(self.infeccion) guardar.append(self.poblacion_inicial) guardar.append(self.dias) guardar.append(self.poblacion_actual) guardar.append(len(self.paises_infectados_dia)) for pais in self.paises_infectados_dia: guardar.append(pais) guardar.append(self.muertes_dia) guardar.append(self.infecciones_dia) guardar.append(len(self.aeropuertos_cerrados_dia)) for pais in self.aeropuertos_cerrados_dia: guardar.append(pais) guardar.append(len(self.fronteras_cerradas_dia)) for pais in self.fronteras_cerradas_dia: guardar.append(pais) guardar.append(len(self.mascaras_dia)) for pais in self.mascaras_dia: guardar.append(pais) guardar.append(self.muertes) guardar.append(self.infecciones) guardar.append(self.buscar_cura) guardar.append(self.avance_cura) guardar.append(self.cura_encontrada) guardar.append(len(self.paises_infectados)) for pais in self.paises_infectados: guardar.append(pais) guardar.append(len(self.estadisticaspordia)) for item in self.estadisticaspordia: guardar.append(item) #print(guardar) os.chdir(os.getcwd() + "/Partidas Guardadas/" + name) archivo = open(name + ".txt", "w") print(guardar, file=archivo) archivo.close() os.chdir(oripath) infopaises = li.ListaLigada() infopais = li.ListaLigada() for pais in self.paises: infopais.append(pais.nombre) infopais.append(pais.status) infopais.append(pais.infectados) infopais.append(pais.infectados_dia) infopais.append(pais.sanos) infopais.append(pais.muertos) infopais.append(pais.muertos_dia) infopais.append(pais.mascarillas) if pais.infeccion != None: infopais.append(pais.infeccion.nombre) if pais.infeccion == None: infopais.append(pais.infeccion) infopais.append(pais.aeropuerto_cerrado) infopais.append(pais.frontera_cerrada) infopais.append(pais.cura) infopais.append(pais.cura_descubierta) #for i in pais.proposiciones: # infopais.append(i) infopaises.append(infopais) infopais = li.ListaLigada() #print(infopais) os.chdir(os.getcwd() + "/Partidas Guardadas/" + name) archivo = open(name + "_paises.txt", "w") for line in infopaises: print(line, file=archivo) archivo.close() os.chdir(oripath)
print("Que desea hacer?") print("1. Jugar nueva partida") print("2. Cargar partida") opcion = input("-->") if opcion == "1": generador.generate_connections() mundo = inf.Tablero() #print(mundo.paises[0].vecinos) #print(mundo.paises[0].aeropuertos) print("Elige tu infeccion predilecta para eliminar a la humanidad") print("1. Virus") print("2. Bacteria") print("3. Parasito") infeccion = (input("-->")) check = True opcione = li.ListaLigada("1", "2", "3") while check: if infeccion not in opcione: print("esa opcion no esta disponible") infeccion = (input("-->")) if infeccion in opcione: check = False mundo.infectar(infeccion) if opcion == "2": check = True while check: try: name = input("Ingresa el nombre de la partida") origi = os.getcwd() os.chdir(os.getcwd() + "/Partidas Guardadas/" + name) mundo = inf.Tablero()