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)
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)
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