Exemplo n.º 1
0
    def teste_melhor_ataque(self):
        """ Vamos testar se a função melhor_ataque dá realmente o
            ataque com a melhor relação dano x acurácia testando
            todos os ataques do pokemon atacante no pokemon defensor."""

        for j in range(100):
            # Cria um pokemon atacante e um defensor
            dados_atk = RandomPoke()
            dados_def = RandomPoke()
            atacante = Pokemon(dados_atk.gera())
            defensor = Pokemon(dados_def.gera())

            melhor = melhor_ataque(atacante, defensor)
            danos = []
            if atacante.hp < atacante.hp_max / 5:
                estado_critico = True
            else:
                estado_critico = False
            for ataque in atacante.ataques:
                if ataque.pp > 0 and estado_critico is False:
                    dano = ataque.calcula_dano(atacante, defensor, basico=True)
                    danos.append(dano * (ataque.acu * ataque.acu) / 10000)
                elif ataque.pp > 0 and estado_critico is True:
                    dano = ataque.calcula_dano(atacante, defensor, basico=True)

            # Caso não tire todo o hp, escolhe o que causa (em média) o maior
            # dano usando a relação dano x acurácia.
            if max(danos) < defensor.hp:
                melhor_dano = melhor.calcula_dano(atacante,
                                                  defensor,
                                                  basico=True)
                self.assertEqual(atacante.get_ataque(danos.index(max(danos))),
                                 melhor, 1)
Exemplo n.º 2
0
    def teste_melhor_ataque(self):
        """ Vamos testar se a função melhor_ataque dá realmente o 
            ataque com a melhor relação dano x acurácia testando 
            todos os ataques do pokemon atacante no pokemon defensor."""

        for j in range(100):
            # Cria um pokemon atacante e um defensor
            dados_atk = RandomPoke()
            dados_def = RandomPoke()
            atacante = Pokemon(dados_atk.gera())
            defensor = Pokemon(dados_def.gera())
           
            melhor = melhor_ataque(atacante, defensor)
            danos = []
            if atacante.hp < atacante.hp_max/5:
                estado_critico = True
            else:
                estado_critico = False
            for ataque in atacante.ataques:
                if ataque.pp > 0 and estado_critico is False:
                    dano = ataque.calcula_dano(atacante, defensor, is_basico=True)
                    danos.append(dano * (ataque.acu*ataque.acu)/10000)  
                elif ataque.pp > 0 and estado_critico is True:
                    dano = ataque.calcula_dano(atacante, defensor, is_basico=True)    
            
            # Caso não tire todo o hp, escolhe o que causa (em média) o maior
            # dano usando a relação dano x acurácia.
            if max(danos) < defensor.hp:
                melhor_dano = melhor.calcula_dano(atacante, defensor, is_basico=True)
                self.assertEqual(atacante.get_ataque(danos.index(max(danos))), melhor, 1)
Exemplo n.º 3
0
    def calculo_damage(self, atacante: Pokemon, receptor: Pokemon,
                       datos_ataque):
        """
        Devuelve una lista que contiene:
        0 -> un entero con la cantidad de daño que ocasiona el ataque.
        1 -> 'Es muy eficaz' , 'Es poco eficaz', ''
        """
        ####################ALGORITMO DAÑO######################
        elemento_ataque = datos_ataque['tipo']
        elemento_atacante = atacante.get_tipo()
        elemento_receptor = receptor.get_tipo()

        B = 1.5 if elemento_atacante.get_elemento(
        ) == elemento_ataque.get_elemento() else 1

        if elemento_receptor.get_elemento() in elemento_ataque.get_eficaz():
            E = 2
            eficacia = ' ->  Es muy eficaz'
        elif elemento_receptor.get_elemento() in elemento_ataque.get_no_eficaz(
        ):
            E = 0.5
            eficacia = ' ->  Es poco eficaz'
        else:
            E = 1
            eficacia = ''

        V = random.randint(85, 100)
        N = 100  #Nivel del pokemon
        A = atacante.get_ataque()
        P = datos_ataque['potencia']
        D = receptor.get_defensa()

        damage = [
            int(0.01 * B * E * V * (((0.2 * N + 1) * A * P) / (25 * D) + 2)),
            eficacia
        ]
        return damage