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
def atacar(self, part): for i in range(self.ataques): print("Ataque {}".format(i + 1)) combate.resolver_ataque(self.arma, part.jugador)
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")
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)
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)