예제 #1
0
    def test_arma(self):
        self.arma1 = Arma('CA', imp=2, her=5, dmg=dado.d2, ap=-1)

        # El único parámetro obligatorio es el nombre
        self.arma2 = Arma('BA')
        jugador = jugadorm.Asalto("A", "CS")

        # Arma con efecto pasivo; se ejecuta al equipar
        self.arma3 = Arma('CR',
                          dmg=dado.und2,
                          ap=-2,
                          efectopas=jugador.duplicarAcciones)

        # Arma con efecto activo; se ejecuta al golpear
        # Reduce el atributo herir del enemigo en 1
        self.arma4 = Arma('L',
                          imp=0,
                          her=5,
                          dmg=dado.und3,
                          ap=-1,
                          efectoact=partial(combate.aplicar_efecto,
                                            mod=lambda x: x - 1,
                                            ats=["resistencia"]))

        # Comprobamos que el string, daño y efecto son los esperados
        self.assertEqual(str(self.arma1),
                         "Arma  \tI\tH\tD\tAP\nCA\t2\t5\t2\t-1")
        self.assertEqual(self.arma1.damage(), 2)
        self.assertEqual(self.arma1.efecto_pasivo(), None)

        self.assertEqual(str(self.arma2),
                         "Arma  \tI\tH\tD\tAP\nBA\t3\t4\t1\t0")
        self.assertEqual(self.arma2.damage(), 1)
        self.assertEqual(self.arma2.efecto_pasivo(), None)

        self.assertEqual(str(self.arma3),
                         "Arma  \tI\tH\tD\tAP\nCR\t3\t4\tD2\t-2")
        self.assertTrue(1 <= self.arma3.damage() <= 2)
        # Comprobamos el correcto funcionamiento del efecto pasivo
        self.arma3.efecto_pasivo()
        self.assertEqual(jugador.acciones, 8)

        self.assertEqual(str(self.arma4),
                         "Arma \tI\tH\tD\tAP\nL\t0\t5\tD3\t-1")
        self.assertTrue(1 <= self.arma4.damage() <= 3)
        self.assertEqual(self.arma4.efecto_pasivo(), None)

        # Comprobamos el efecto activo. Necesita atacar a un enemigo.
        enemigo = enemigos.H()
        self.assertEqual(enemigo.resistencia, 3)
        self.testTactico.arma_dis = self.arma4
        combate.resolver_ataque(self.testTactico.arma_dis, enemigo)
        self.assertEqual(enemigo.resistencia, 2)  # Reduce el valor en 1
예제 #2
0
 def atacar(self, part):
     for i in range(self.ataques):
         print("Ataque {}".format(i + 1))
         combate.resolver_ataque(self.arma, part.jugador)
예제 #3
0
    def test_combate(self):
        # Un 1+ triunfa siempre, un 7+ fracasa siempre
        self.assertTrue(combate.x_o_mas(1))
        self.assertFalse(combate.x_o_mas(7))

        # Una salvación de 1+ sería siempre favorable
        self.assertTrue(combate.salva(1, 0))
        # Las siguientes combinaciones de SV y AP fallarán siempre
        self.assertFalse(combate.salva(6, -1))
        self.assertFalse(combate.salva(5, -2))
        self.assertFalse(combate.salva(4, -3))
        self.assertFalse(combate.salva(3, -4))
        # El resto dependen de la tirada

        # hiere() nunca devuelve un resultado fijo.
        # No obstante, podemos comprobar la tirada que realiza según los valores recibidos
        self.assertEqual(combate.calcular_prop(4, 4), 4)
        self.assertEqual(combate.calcular_prop(5, 4), 3)
        self.assertEqual(combate.calcular_prop(4, 5), 5)
        self.assertEqual(combate.calcular_prop(8, 4), 2)
        self.assertEqual(combate.calcular_prop(4, 8), 6)

        enemigo = enemigos.G()
        jugador = self.testAsalto
        self.testAsalto.elegir_arma_cc(1)

        co = self.capturePrint()
        combate.resolver_ataque(jugador.arma_cc, None)
        self.assertEqual(
            co.getvalue(),
            "En un arrebato de furia, atacas el mobiliario de la sala. "
            "Un acto que no provee de mayor gloria al CENSURADO PARA DESCLASIFICACIÓN.\n"
        )

        # Hagamos que fracase el impacto
        co = self.capturePrint()
        self.testAsalto.arma_cc.impacto = 7
        combate.resolver_ataque(jugador.arma_cc, enemigo)
        self.assertEqual(co.getvalue(), "No se ha conseguido impactar al G.\n")
        self.testAsalto.arma_cc.impacto = 1

        # El herir. Siempre tiene una posibilidad de herir, así que realizamos un bucle.
        co = self.capturePrint()
        enemigo.resistencia = 8
        loop = 0
        while co.getvalue() != "No se ha conseguido herir al G.\n":
            co = self.capturePrint()
            combate.resolver_ataque(jugador.arma_cc, enemigo)
            loop += 1
            self.assertTrue(
                loop < 1000,
                "Se han realizado demasiados intentos exitosos de herir."
                "Debería tener una probabilidad de fallo de 5/6")
        self.assertEqual(co.getvalue(), "No se ha conseguido herir al G.\n")

        co = self.capturePrint()
        enemigo.resistencia = 1
        enemigo.save = -10
        loop = 0
        while co.getvalue() != "Se ha impactado y herido al G.\n" \
                               "El G regenera sus tejidos celulares y salva sus heridas.\n":
            co = self.capturePrint()
            combate.resolver_ataque(jugador.arma_cc, enemigo)
            loop += 1
            self.assertTrue(
                loop < 1000,
                "Se han realizado demasiados intentos fallidos de herir."
                "Debería tener una probabilidad de éxito de 5/6")
        self.assertEqual(
            co.getvalue(), "Se ha impactado y herido al G.\n"
            "El G regenera sus tejidos celulares y salva sus heridas.\n")

        # Impacta, hiere y no salva
        enemigo.save = 7
        loop = 0
        while co.getvalue() != "Se ha impactado y herido al G.\n" \
                               "El G recibe 3 heridas.\n":
            co = self.capturePrint()
            combate.resolver_ataque(jugador.arma_cc, enemigo)
            loop += 1
            self.assertTrue(
                loop < 1000,
                "Se han realizado demasiados intentos fallidos de herir."
                "Debería tener una probabilidad de éxito de 5/6")
        self.assertEqual(
            co.getvalue(), "Se ha impactado y herido al G.\n"
            "El G recibe 3 heridas.\n")
예제 #4
0
 def accion_disparar(self, part):  # name_mangling
     self.acciones -= 1  # Consume una acción
     print("Atacando a distancia con {}.".format(self.arma_dis.nombre))
     combate.resolver_ataque(self.arma_dis, part.enemigo)
예제 #5
0
 def accion_golpear(self, part):  # name_mangling
     self.acciones -= 1  # Consume una acción
     print("Atacando cuerpo a cuerpo con {}.".format(self.arma_cc.nombre))
     combate.resolver_ataque(self.arma_cc, part.enemigo)