Exemplo n.º 1
0
    def test_critico(self):
        """Verifica se o cálculo de golpes críticos está funcionando OK."""
        res = (2 * self.poke1.lvl + 5)/(self.poke1.lvl + 5)
        chance = self.poke1.spd/512
        maior_chance = chance + 0.001
        valores_menores = []
        valores_maiores = []

        # Novamente usamos valores conhecidos para testar a unidade do
        # batalha.critico que usa números pseudo-aleatórios. Os primeiros
        # 100 valores serão menores que a chance e os outros 100, maiores.
        for i in range(100):
            valores_menores.append(random.uniform(0.0, chance))
            valores_maiores.append(random.uniform(maior_chance, 1.0))
        valores = valores_menores + valores_maiores
        a = RandomPoke()
        ataque = Ataque(a.gera_ataque())
        with patch("batalha.random.uniform", side_effect=valores):
            # Em cada loop, a iteração chamará dano.critico duas
            # vezes, usando, então, dois valores do side_effect.
            for i in range(50):
                self.assertEqual(ataque.critico(self.poke1, 0), 1)
                self.assertEqual(ataque.critico(self.poke1,
                                         random.randint(1, 100)), res)
            for i in range(50):
                self.assertEqual(ataque.critico(self.poke1, 0), 1)
                self.assertEqual(ataque.critico(self.poke1,
                                         random.randint(1, 100)), 1)
        """
Exemplo n.º 2
0
    def test_efetividade(self):
        """Verifica se o cálculo de efetividade é feito corretamente."""
        # Novamente geramos um novo Pokémon para podermos realizar vários
        # testes com resultados diferentes.
        for i in range(100):
            a = RandomPoke()
            poke1 = Pokemon(a.gera())
            ataque = Ataque(a.gera_ataque())

            # Esta é a fórmula para calcular efetividade
            mult = ataque.typ.get_eff_contra(poke1.tipo1)
            if poke1.tipo2.nome != "Blank":
                mult *= ataque.typ.get_eff_contra(poke1.tipo2)

            self.assertEquals(mult, ataque.efetividade(poke1, False))
Exemplo n.º 3
0
    def test_efetividade(self):
        """Verifica se o cálculo de efetividade é feito corretamente."""
        # Novamente geramos um novo Pokémon para podermos realizar vários
        # testes com resultados diferentes.
        for i in range(100):
            a = RandomPoke()
            poke1 = Pokemon(a.gera())
            ataque = Ataque(a.gera_ataque())

            # Esta é a fórmula para calcular efetividade
            mult = ataque.typ.get_eff_contra(poke1.tipo1)
            if poke1.tipo2.nome != "Blank":
                mult *= ataque.typ.get_eff_contra(poke1.tipo2)

            self.assertEquals(mult, ataque.efetividade(poke1, False))
Exemplo n.º 4
0
 def test_verificar_matriz_de_daño(self):
     elementos = [
         Elemento.AGUA, Elemento.FUEGO, Elemento.TIERRA, Elemento.AIRE
     ]
     daños_esperados = [[10, 12, 8, 10], [8, 10, 12, 10], [10, 10, 10, 10],
                        [12, 8, 10, 10]]
     daños_calculados = []
     for elemento_ataque in range(0, 4):
         mi_ataque = Ataque(elementos[elemento_ataque])
         mi_ataque_daños = []
         for elemento_defensa in range(0, 4):
             mi_ataque_daños.append(
                 mi_ataque.calcular_danio([elementos[elemento_defensa]]))
         daños_calculados.append(mi_ataque_daños)
     self.assertEqual(daños_esperados, daños_calculados,
                      'algun calculo de daño esta fallando')
Exemplo n.º 5
0
    def __init__(self, dados, cpu=False):
        """Recebe uma lista contendo dados e cria um Pokémon."""
        aux = dados[9:]  # Dados dos ataques
        dados = dados[:9]  # Dados do Pokémon
        dados.reverse()  # Revertido para facilitar pop()

        # Atributos iniciais
        self._nome = dados.pop()
        self._lvl = int(dados.pop())
        self._hp = self._hp_max = int(dados.pop())
        self._atk = int(dados.pop())
        self._dfs = int(dados.pop())
        self._spd = int(dados.pop())
        self._spc = int(dados.pop())

        # Tipos do Pokémon
        t = int(dados.pop()), int(dados.pop())
        for i in range(2):
            if t[i] not in range(get_num_tipos() + 1):
                print("ERRO: Valor inválido (" + str(t) +
                      ") para tipo de Pokémon.")
                exit(1)
        self._tipo1 = get_tipo(t[0])
        self._tipo2 = get_tipo(t[1])

        # Ataques
        self._ataques = []
        while aux:
            ataque = Ataque(aux[:5])
            self.ataques.append(ataque)
            aux = aux[5:]

        self._cpu = cpu

        print("'" + self.nome + "' lido com sucesso!")
Exemplo n.º 6
0
 def setUp(self):
     """Inicializa os dois Pokémons aleatórios para os testes."""
     sys.stdout = open(os.devnull, "w")  # Suprime o output de batalha.py
     sys.stderr = sys.stdout
     self.a = RandomPoke()
     self.b = RandomPoke()
     self.poke1 = Pokemon(self.a.gera())
     self.poke2 = Pokemon(self.b.gera())
     self.struggle = Ataque(["Struggle", 0, 100, 50, 10])
Exemplo n.º 7
0
    def test_critico(self):
        """Verifica se o cálculo de golpes críticos está funcionando OK."""
        res = (2 * self.poke1.lvl + 5)/(self.poke1.lvl + 5)
        chance = self.poke1.spd/512
        maior_chance = chance + 0.001
        valores_menores = []
        valores_maiores = []

        # Novamente usamos valores conhecidos para testar a unidade do
        # batalha.critico que usa números pseudo-aleatórios. Os primeiros
        # 100 valores serão menores que a chance e os outros 100, maiores.
        for i in range(100):
            valores_menores.append(random.uniform(0.0, chance))
            valores_maiores.append(random.uniform(maior_chance, 1.0))
        valores = valores_menores + valores_maiores
        a = RandomPoke()
        ataque = Ataque(a.gera_ataque())
        with patch("batalha.random.uniform", side_effect=valores):
            # Em cada loop, a iteração chamará dano.critico duas
            # vezes, usando, então, dois valores do side_effect.
            for i in range(50):
                self.assertEqual(ataque.critico(self.poke1, 0), 1)
                self.assertEqual(ataque.critico(self.poke1,
                                         random.randint(1, 100)), res)
            for i in range(50):
                self.assertEqual(ataque.critico(self.poke1, 0), 1)
                self.assertEqual(ataque.critico(self.poke1,
                                         random.randint(1, 100)), 1)
        """
Exemplo n.º 8
0
    def test_realiza_ataque_e_calcula_dano(self):
        """Verifica se ataque e suas consequências ocorrem sem problemas."""
        batalha.input = Mock(return_value="ok")

        # Geramos novos Pokémons para podermos realizar vários
        # testes sem acabar com todo o HP deles.
        for i in range(100):
            a = RandomPoke()
            b = RandomPoke()
            poke3 = poke1 = Pokemon(a.gera())
            poke4 = poke2 = Pokemon(b.gera())

            # Assumindo que o ataque sempre vai acertar
            with patch('batalha.random.uniform', return_value=1.0):
                # Aqui começa o cálculo do dano
                lvl = poke1.lvl
                ataque = Ataque(a.gera_ataque())
                if ataque.typ.especial:
                    atk = poke1.spc
                    dfs = poke2.spc
                else:
                    atk = poke1.atk
                    dfs = poke2.dfs

                pp = ataque.pp
                hp = poke2.hp
                base = ataque.pwr
                eff = efetividade(ataque, poke2, False)

                dano = (2 * lvl + 10) / 250 * atk / dfs * base + 2
                dano *= (stab(ataque, poke1) * critico(poke1, eff) * eff *
                         aleatorio())
                dano = int(dano)
                #Testa o dano.calcula_dano
                self.assertEqual(dano, calcula_dano(ataque, poke1, poke2))
                if (dano > 0):
                    poke1.remove_hp(dano)
                if ataque == self.struggle:
                    dano //= 2
                    poke2.remove(hp.dano)

                # Verficamos se o Pokemon.realiza_ataque está
                # aplicando corretamente o dano conforme a fórmula.
                pokemon.input = Mock(return_value="\n")
                poke3.realiza_ataque(ataque, poke4)
                self.assertEquals(pp - 1, ataque.pp)
                self.assertEquals(poke1.hp, poke3.hp)
                self.assertEquals(poke2.hp, poke4.hp)
Exemplo n.º 9
0
    def gera_poke(self):
        """Gera pokemons tais que os ataques estão ordenados em ordem
        crescente de pwr e acu."""
        t = RandomPoke()
        dados = t.gera()
        dados = dados[:9]  #Tiramos a lista de ataques aleatórios
        ataque = []
        rand_num = randint(1, 97)
        for i in range(4):  #Criamos ataques ordenados
            ataque.append(
                self.gera_ataque(i + rand_num, i + rand_num, randint(1, 255)))

        ataques = [Ataque(ataque[i]) for i in range(4)]
        dados.append(ataques)
        poke = Pokemon(dados)  #Agora nosso pokemón contém os ataques ordenados
        return poke
Exemplo n.º 10
0
    def __init__(self):
        """Inicializa os dados para teste."""
        le_tipos("tipos.txt")

        self._nome = ''.join(
            choice(ascii_lowercase + ascii_uppercase)
            for x in range(randint(2, 20)))
        self._lvl = randint(0, 100)
        self._hp = randint(10, 255)
        self._atk = randint(1, 255)
        self._dfs = randint(1, 255)
        self._spd = randint(0, 255)
        self._spc = randint(1, 255)
        self._tipo1 = randint(0, 15)
        while True:
            self._tipo2 = randint(0, 16)
            if (self._tipo2 != self._tipo1):
                break

        # Esta lista conterá os atributos do pokemon no formato linear, o que
        # é normalmente passado pela entrada padrão. Será útil para o
        # teste_multiplayer
        self.dados_linear = [
            self._nome, self._lvl, self._hp, self._atk, self._dfs, self._spd,
            self._spc, self._tipo1, self._tipo2
        ]

        self._ataques = []
        num_ataques = randint(1, 4)
        self.dados_linear.append(num_ataques)
        for i in range(num_ataques):
            gera_ataque = self.gera_ataque()
            self._ataques.append(gera_ataque)
            for att in gera_ataque:
                self.dados_linear.append(att)

        self.dados = [
            self._nome, self._lvl, self._hp, self._atk, self._dfs, self._spd,
            self._spc, self._tipo1, self._tipo2,
            [Ataque(self._ataques[i]) for i in range(num_ataques)]
        ]
Exemplo n.º 11
0
 def test_se_puede_crear_un_ataque_de_cada_elemento(self):
     a = Ataque(Elemento.FUEGO)
     b = Ataque(Elemento.AGUA)
     c = Ataque(Elemento.TIERRA)
     d = Ataque(Elemento.AIRE)
Exemplo n.º 12
0
 def test_verificando_recibir_ataque_basico_disminuido(self):
     #El monstruo es tipo fuego y agua, por ende al recibir agua deberia recibir ataque de 10-20% = 8
     ataque_impactado = Ataque(Elemento.TIERRA)
     self.monster.recibir_ataque(ataque_impactado)
     self.assertEqual(self.monster.__estado_vital__, 100 - 8)
Exemplo n.º 13
0
 def test_verificando_recibir_ataque_basico_aumentado(self):
     #El monstruo es tipo fuego y agua, por ende al recibir agua deberia recibir ataque de 10+20% = 12
     ataque_impactado = Ataque(Elemento.AGUA)
     self.monster.recibir_ataque(ataque_impactado)
     self.assertEqual(self.monster.__estado_vital__, 100 - 12)
Exemplo n.º 14
0
 def test_verificando_recibir_ataque_basico_disminuye_vida(self):
     ataque_impactado = Ataque(Elemento.AGUA)
     self.monster.recibir_ataque(ataque_impactado)
     self.assertLess(self.monster.__estado_vital__, 100)
Exemplo n.º 15
0
import pygame
from player import Player
from inimigo import Inimigo
from ataque import Ataque

pygame.init()
janela_principal = pygame.display.set_mode((1600, 1200))
pygame.display.set_caption("Jogo do Pipi atirador")

jogador = Player()
inimigo = Inimigo()
disparo = Ataque(jogador)
angle = 0

janela_aberta = True
while janela_aberta:

    pygame.time.delay(10)

    for evento in pygame.event.get():
        if evento.type == pygame.QUIT:
            janela_aberta = False

    comando = pygame.key.get_pressed()

    if comando[pygame.K_UP]:
        angle = 180
        jogador.cima()

    if comando[pygame.K_DOWN]:
        angle = 0
Exemplo n.º 16
0
            if alive(a) == True:

                try:

                    attack(IP())

                except:

                    continue

    elif numero == 2:

        ip = str(input("Insert the IP: "))
        loadAtaque()
        Ataque(1, ip, 0, "None")

    elif numero == 3:

        ip = str(input("Insert the IP: "))
        loadAtaque()
        Ataque(2, ip, 0, "None")

    elif numero == 4:

        ip = str(input("Insert the IP: "))
        puerto = str(input("Select the port: "))

        loadAtaque()
        Ataque(3, ip, puerto, "-S")