def contagio(self, infec):
     aprox = max(1,self.infectados//1000000)
     contagio = 0
     for i in range(int(aprox)):
         contagio += randint(0,6)
     contagio /= int(aprox)
     proba_muerte = min(max(0.2, (self.dias ** 2) / 100000) *
                        infec.mortalidad, 1)
     self.muertes += int(proba_muerte*self.infectados)
     muertes_diaria = int(proba_muerte*self.infectados)
     self.poblacion -= int(proba_muerte*self.infectados)
     if self.mask:
         infec_diarios = int(contagio * 0.3 * self.infectados)
         self.infectados += int(contagio * 0.3*self.infectados)
     else:
         infec_diarios = int(contagio * self.infectados)
         self.infectados += int(contagio*self.infectados)
     if self.poblacion <= 0:
         self.poblacion = 0
         self.infectados = self.pob_inicial
         self.clasificacion = "Muerto"
         self.muertes = self.pob_inicial
         print(self.nombre, "ha muerto")
     if self.infectados >= self.pob_inicial:
         self.infectados = self.pob_inicial
     self.pob_anterior = jhlist()
     self.pob_anterior.agregar(infec_diarios)
     self.pob_anterior.agregar(muertes_diaria)
     return jhlist(infec_diarios, muertes_diaria)
 def aeropuertos(self):
     entrada = open("random_airports.csv", "r")
     leer = entrada.readlines()
     x = jhlist()
     y = jhlist()
     for i in leer:
         b = i.strip().split(",")
         if b[0] == self.nombre and not x.existe(b[1]):
             x.agregar(b[1])
         elif b[1] == self.nombre and not x.existe(b[0]):
             x.agregar(b[0])
     self.aero = x
     if len(x) > 0:
         self.aeropuerto = True
 def border(self):
     entrada = open("borders.csv", "r")
     leer = entrada.readlines()
     x = jhlist()
     y = jhlist()
     for i in leer:
         b = i.strip().split(";")
         if b[0] == self.nombre and not x.existe(b[1]):
             x.agregar(b[1])
         elif b[1] == self.nombre and not x.existe(b[0]):
             x.agregar(b[0])
     self.paises_vecinos = x
     if len(x) > 0:
         self.frontera = True
 def traslado(self, mundo):
     poblacion = 0
     infectados = 0
     infectados_del_dia = jhlist()
     for inf in mundo:
         infectados += inf.valor.infectados
         poblacion += inf.valor.pob_inicial
     if self.frontera and (self.infectados / self.poblacion) >= 0.2:
         proba_traslado = min(((0.07 * self.infectados) /
                               (self.poblacion * len(self.paises_vecinos))),
                              1)
         for i in self.paises_vecinos:
             if mundo[mundo.finder(i.valor)].valor.frontera and mundo[
                 mundo.finder(i.valor)].valor.clasificacion == "Limpio":
                 if proba_traslado * 100 >= randint(0, 100):
                     mundo[mundo.finder(i.valor)].valor.clasificacion \
                         = "Infectado"
                     mundo[mundo.finder(i.valor)].valor.infectados += 1
                     print(mundo[mundo.finder(i.valor)],
                           "se infecto TERRESTREMENTE")
                     infectados_del_dia.agregar(mundo[mundo.finder(i.valor)])
     if self.aeropuerto and (infectados / poblacion) >= 0.04:  # via aerea
         proba_traslado = min(((0.07 * self.infectados) /
                               (self.poblacion * len(self.aero))), 1)
         for b in self.aero:
             if mundo[mundo.finder(b.valor)].valor.frontera and mundo[
                 mundo.finder(b.valor)].valor.clasificacion == "Limpio":
                 if proba_traslado * 100 >= randint(0, 100):
                     mundo[mundo.finder(b.valor)].valor.clasificacion = \
                         "Infectado"
                     mundo[mundo.finder(b.valor)].valor.infectados += 1
                     print(mundo[mundo.finder(b.valor)],
                           "se infecto AEREAMENTE")
                     infectados_del_dia.agregar(mundo[mundo.finder(b.valor)])
     return infectados_del_dia
def big_bang():
    mundo = jhlist()
    entrada = open("population.csv", "r")
    for i in entrada.readlines():
        b = i.strip().split(",")
        if b[0] != "Pais":
            mundo.agregar(Pais(b[0], b[1]))
            mundo[mundo.finder(b[0])].valor.gobierno = Gobierno(
                mundo[mundo.finder(b[0])].valor)
    for i in range(len(mundo)):
        mundo[i].valor.border()
        mundo[i].valor.aeropuertos()
    return mundo
 def __init__(self, nombre, poblacion):
     self.nombre = nombre
     self.pob_anterior = jhlist(0,0)
     self.poblacion = int(poblacion)
     self.pob_inicial = int(poblacion)
     self.muertes = 0
     self.aeropuerto = False
     self.clasificacion = "Limpio"
     self.paises_vecinos = None
     self.aero = None
     self.infectados = 0
     self.mask = False
     self.dias = 0
     self.frontera = False
     self.cura = False
     self.gobierno = None
Example #7
0
 def progreso(self, infecciones, muertes, mundo):
     self.gente_sana -= infecciones
     self.gente_infectada += infecciones - muertes
     self.gente_muerta += muertes
     self.dia += 1
     self.progress -= +self.gente_sana / (2 * self.pob_inicial)
     if (self.progress % 1) != 0:
         self.progress = int(self.progress) + 1
     else:
         self.progress = int(self.progress)
     print("\nProgreso:", "|" * self.progress, " " * (98 - self.progress),
           "|\n")
     if self.progress >= 100:
         self.progress = 100
         self.cura = True
         vivos = jhlist()
         for i in mundo:
             if i.valor.clasificacion != "Muerto":
                 vivos.agregar(i)
         pais = randint(0, len(vivos) - 1)
         print("Se ha descubierto la CURA\nEsta se encuentra en",
               vivos[pais], "y comenzará inmediatamente a repartirla")
def menu(mundo):
    xdia = jhlist()
    dia = 0
    print("Bienvenido a PANDEMIC")
    while True:
        try:
            tipo = int(
                input("Elija el tipo de infeccion: " +
                      "\n1-Bacteria\n2-Virus\n3-Parásito\n--->  "))
            if tipo == 1:
                infec = Infeccion("Bacteria")
            elif tipo == 2:
                infec = Infeccion("Virus")
            elif tipo == 3:
                infec = Infeccion("Parásito")
            break
        except:
            print("Elija un numero entre 1 y 3")
    while True:
        inicio = input("En que pais quiere comenzar a infectar: ")
        if not mundo.finder(inicio):
            print("Elija un pais existente en la base de datos")
            continue
        else:
            mundo[mundo.finder(inicio)].valor.infectados = 1
            mundo[mundo.finder(inicio)].valor.pob_anterior = jhlist(1, 0)
            mundo[mundo.finder(inicio)].valor.clasificacion = "Infectado"
            break
    pob_inicial = 0
    for i in mundo:
        pob_inicial += i.valor.pob_inicial
    cura = Cura(pob_inicial, infec)
    Juego = True
    paises_diario = jhlist()
    muertes_diario = 0
    infectados_diario = 0
    while Juego:
        while True:
            try:
                op = int(
                    input("MENU dia:" + str(dia) + "\n1--Pasar de Dia\n"
                          "2--Estadisticas\n"
                          "3--Guardar Partida\n"
                          "4--Salir del Juego\n"
                          "---> "))
                if op != 1 and op != 2 and op != 3 and op != 4:
                    raise IndexError
                else:
                    break
            except:
                print("Escoja un menu válido")
        if op == 1:
            paises_diario = jhlist()
            muertes_diario = 0
            infectados_diario = 0
            dia += 1
            cola = jhlist()
            for pais in mundo:
                if pais.valor.clasificacion == "Infectado":
                    cerrar_f = (pais.valor.infectados / pais.valor.pob_inicial)\
                               > 0.5 or\
                        (pais.valor.muertes / pais.valor.pob_inicial) > 0.25
                    cerrar_a = (pais.valor.infectados / pais.valor.pob_inicial)\
                               > 0.8 or\
                        (pais.valor.muertes / pais.valor.pob_inicial) > 0.2
                    if cerrar_f and pais.valor.frontera:
                        cola.agregar(pais.valor.gobierno.agregar(mundo, 1))
                    if cerrar_a and pais.valor.aeropuerto:
                        cola.agregar(pais.valor.gobierno.agregar(mundo, 2))
                    if (pais.valor.poblacion / pais.valor.pob_inicial) < (2 /
                                                                          3):
                        cola.agregar(pais.valor.gobierno.agregar(mundo, 3))
                    if cura.cura and not pais.valor.aeropuerto:
                        cola.agregar(pais.valor.gobierno.agregar(mundo, 4))
                        cola.agregar(pais.valor.gobierno.agregar(mundo, 5))
                    if len(cola) > 0:
                        cola.sort()
                    paises_diario.suma(pais.valor.traslado(mundo))
                    aux = pais.valor.contagio(infec)
                    infectados_diario += aux[0].valor
                    muertes_diario += aux[1].valor
                    mundo[mundo.finder(str(pais))].valor.dias += 1
                    if pais.valor.cura:
                        mundo[mundo.finder(str(pais))].\
                            valor.repartir_cura(mundo)
                        mundo[mundo.finder(str(pais))].valor.curar()
            if not cura.descubierto and not cura.cura:
                cura.descubrimiento(infectados_diario, muertes_diario)
            elif cura.descubierto and not cura.cura:
                cura.progreso(infectados_diario, muertes_diario, mundo)
            string = "Dia " + str(dia) + "\n--> Infectados: " + \
                     str(infectados_diario) + "\n--> Muertos: " + \
                     str(muertes_diario)
            xdia.agregar(string)
            if len(cola) >= 3:
                for i in range(3):
                    mundo[mundo.finder(cola[i].valor[2])].valor.gobierno.\
                        ejecutar(cola[i].valor[1], mundo)
            elif len(cola) < 3 and len(cola) > 0:
                for i in cola:
                    mundo[mundo.finder(i.valor[2])].valor.gobierno.\
                        ejecutar(i.valor[1], mundo)
        elif op == 2:
            while True:
                try:
                    est = int(
                        input("---MENU ESTADISTICAS---\n"
                              "1-Resumen del dia\n"
                              "2-Por pais\n"
                              "3-Global\n"
                              "4-Muertes e infecciones por dia\n"
                              "5-Promedio muertes e infecciones\n--->"))
                    if est != 1 and est != 2 and est != 3 and est != 4 and \
                                    est != 5:
                        raise IndexError
                    break
                except:
                    print("Elija un numero valido")
            if est == 1:
                print(" >> RESUMEN DEL DIA ", dia, "<<")
                print("-" * 20 + "+" + "-" * 5)
                print("Gente infectada" + " " * 5 + "| " +
                      str(infectados_diario))
                print("-" * 20 + "+" + "-" * 5)
                print("Gente muerta" + " " * 8 + "| " + str(muertes_diario))
                print("-" * 20 + "+" + "-" * 5)
                print("Paises infectados" + " " * 3 + "| " +
                      str(paises_diario))
                print("-" * 20 + "+" + "-" * 5)
            elif est == 2:
                while True:
                    paisest = input("Que pais quiere elegir: ")
                    if not mundo.finder(paisest):
                        print("Elija un pais existente en la base de datos")
                        continue
                    else:
                        break
                paisest = mundo[mundo.finder(paisest)].valor
                print("\nRESUMEN DEL DIA", dia, "--", paisest)
                print("-" * 20 + "+" + "-" * 10)
                print("Gente viva", " " * 8, "|", paisest.poblacion)
                print("-" * 20 + "+" + "-" * 10)
                print("Gente infectada", " " * 3, "|", paisest.pob_anterior[0])
                print("-" * 20 + "+" + "-" * 10)
                print("Gente muerta", " " * 6, "|", paisest.pob_anterior[1])
                print("-" * 20 + "+" + "-" * 10)
            elif est == 3:
                while True:
                    opest = int(
                        input("1-Mostrar paises limpios\n"
                              "2-Mostrar paises infectados\n"
                              "3-Mostrar paises muertos\n--> "))
                    if opest != 1 and opest != 2 and opest != 3:
                        raise IndexError
                    else:
                        break
                cont = 1
                total_vivo = 0
                total_muerta = 0
                total_infectada = 0
                total_sana = 0
                for i in mundo:
                    total_vivo += i.valor.poblacion
                    total_muerta += i.valor.muertes
                    total_infectada += i.valor.infectados
                    total_sana += i.valor.pob_inicial
                    if opest == 1 and i.valor.clasificacion == "Limpio":
                        print(cont, ")", i.valor)
                        cont += 1
                    elif opest == 2 and i.valor.clasificacion == "Infectado":
                        print(cont, ")", i.valor)
                        cont += 1
                    elif opest == 3 and i.valor.clasificacion == "Muerto":
                        print(cont, ")", i.valor)
                        cont += 1
                total_sana -= total_infectada
                print("--------------")
                print("Total vivos:", total_vivo, "\nTotal muertos:",
                      total_muerta, "\nTotal infectados:", total_infectada,
                      "\nTotal sana:", total_sana, "\n")
            elif est == 4:
                print("")
                for i in xdia:
                    print(i)
                print("")
            elif est == 5:
                while True:
                    try:
                        tasa = int(
                            input("1-Tasa del dia\n2-Tasa acumulada\n"
                                  "--> "))
                        break
                    except:
                        print("Elija una opcion valida")
                total_muerta = 0
                total_vivo = 0
                for i in mundo:
                    total_vivo += i.valor.poblacion
                    total_muerta += i.valor.muertes
                print("Muertos" + " " * len(str(muertes_diario)) + "/ Vivos")
                if tasa == 1:
                    print(muertes_diario, " " * 5, "/", total_vivo)
                if tasa == 2:
                    print(total_muerta, " " * 5, "/", total_vivo)
        elif op == 3:
            carpeta = os.getcwd() + "/Partidas Guardadas"
            if not os.path.exists(carpeta):
                os.mkdir("Partidas Guardadas")
            nombre = input("Como le quiere llamar a la partida: ")
            carpeta = os.getcwd() + "/Partidas Guardadas/" + nombre
            if not os.path.exists(carpeta):
                os.mkdir("Partidas Guardadas/" + nombre)
            archivo = open("Partidas Guardadas/" + nombre + "/Partida", "w")
            srcfile = "random_airports.csv"
            dstroot = "Partidas Guardadas/" + nombre + "/"
            shutil.copy(srcfile, dstroot)
            print("Guardando su partida...")
            archivo.close()

        elif op == 4:
            Juego = False