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)
Esempio n. 11
0
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()