1- from abc import ABC , abstractmethod # para clases abstractas y metodos
2- import random # Para crear números random
3- import time # para crear lapso de tiempo 1 seg
1+ from abc import ABC , abstractmethod
2+ import random
3+ import time
44
55
6- class Interfaz (ABC ): # interfaz que seguiran mis superheroes
6+ class Interfaz (ABC ):
77 @abstractmethod
8- def __init__ (self ) -> None : # atributos
9- self .vida = None
8+ def __init__ (self , vida ) -> None :
9+ self .vida = vida
1010
1111 @abstractmethod
12- def atacar (self ) -> int : # metodo para atacar que devuelve valor
12+ def atacar (self ) -> int :
13+ pass
14+
15+ @abstractmethod
16+ def evadir (self ) -> bool :
1317 pass
1418
1519 @abstractmethod
16- def evadir (self ) -> bool : # metodo para evadir que devuelve true o false
20+ def devolver_vida (self ) -> int :
1721 pass
1822
1923 @abstractmethod
20- def mostrar_vida (self ) -> int : # metodo para mostrar la vida
24+ def recibir_daño (self , daño ) -> None :
2125 pass
2226
2327
2428class Wolverine (Interfaz ):
25- def __init__ (self ) -> None :
26- self .vida = 300
29+ def __init__ (self , vida ) -> None :
30+ self .vida = vida
2731
2832 def atacar (self ) -> int :
29- daño_aleatorio = random .randint (10 , 120 ) # genera un rango aleatorio
33+ daño_aleatorio = random .randint (10 , 120 )
3034 return daño_aleatorio
3135
3236 def evadir (self ) -> bool :
33- num_evasion = random .randint (
34- 0 , 100
35- ) # si sale menor que la probabilidad de evadir, True
37+ num_evasion = random .randint (0 , 100 )
3638 return num_evasion < 20
3739
38- def mostrar_vida (self ) -> int : # devuelve la vida actual
40+ def devolver_vida (self ) -> int :
3941 return self .vida
4042
43+ def recibir_daño (self , daño ) -> None :
44+ self .vida -= daño
45+
4146
4247class Deadpool (Interfaz ):
43- def __init__ (self ) -> None :
44- self .vida = 300
48+ def __init__ (self , vida ) -> None :
49+ self .vida = vida
4550
4651 def atacar (self ) -> int :
4752 daño_aleatorio = random .randint (10 , 100 )
@@ -51,47 +56,84 @@ def evadir(self) -> bool:
5156 num_evasion = random .randint (0 , 100 )
5257 return num_evasion < 25
5358
54- def mostrar_vida (self ) -> int :
59+ def devolver_vida (self ) -> int :
5560 return self .vida
5661
62+ def recibir_daño (self , daño ) -> None :
63+ self .vida -= daño
5764
58- wolverine = Wolverine ()
59- deadpool = Deadpool ()
65+
66+ wolverine = Wolverine (500 )
67+ deadpool = Deadpool (500 )
6068
6169
62- # Faltaría hacer que simule hasta que uno gane, con un bucle
6370class Simulador :
6471 def __init__ (self ) -> None :
6572 self .turno = 0
6673
6774 def siguiente_turno (self ):
75+ print ("Cambio de turno" )
76+ time .sleep (1 )
6877 self .turno += 1
69- # agregar la espera de 1 seg
7078
7179 def omitir_turno (self ):
80+ print ("Turno omitido por golpe critico" )
81+ time .sleep (1 )
7282 self .turno += 2
73- # agregar la espera de 1 seg
7483
7584 def simular (self ):
76-
77- if self .turno % 2 == 0 :
78- daño = wolverine .atacar ()
79- exito_evadir = deadpool .evadir ()
80- if exito_evadir :
81- print ("Deadpool ha evadido con exito" )
82- Simulador .siguiente_turno (self )
83-
85+ """Si la vida de uno es menor a 0 finaliza el combate,
86+ si el turno es par ataca Wolverino, si no Deadpool"""
87+
88+ while True :
89+ vida_wolverine = wolverine .devolver_vida ()
90+ vida_deadpool = deadpool .devolver_vida ()
91+ if vida_deadpool <= 0 :
92+ print ("Wolverine derroto a su oponente" )
93+ break
94+ elif vida_wolverine <= 0 :
95+ print ("Deadpool derroto a su oponente" )
96+ break
8497 else :
85- if daño == 120 :
86- print ("Wolverine ha inflingido golpe critico" )
87- print ("Volverá a atacar en el siguiente turno" )
88- Simulador .omitir_turno (self )
89-
90- print (f"Wolverine ha inflingido { daño } puntos de daño." )
91- Simulador .siguiente_turno (self )
92- else :
93- daño = deadpool .atacar ()
94- exito_evadir = wolverine .evadir ()
98+ print (
99+ f"Puntos de vida\n Wolverine: { vida_wolverine } \n Deadpool: { vida_deadpool } "
100+ )
101+ print (f"\n Turno { self .turno } " )
102+
103+ if self .turno % 2 == 0 :
104+ daño = wolverine .atacar ()
105+ exito_evadir = deadpool .evadir ()
106+ if exito_evadir :
107+ print ("Deadpool ha evadido con exito" )
108+ Simulador .siguiente_turno (self )
109+
110+ else :
111+ deadpool .recibir_daño (daño )
112+
113+ if daño == 120 :
114+ print ("Wolverine inflinge golpe critico" )
115+ print ("Volverá a atacar en el siguiente turno" )
116+ Simulador .omitir_turno (self )
117+
118+ print (f"Wolverine inflinge { daño } puntos de daño." )
119+ Simulador .siguiente_turno (self )
120+
121+ else :
122+ daño = deadpool .atacar ()
123+ exito_evadir = wolverine .evadir ()
124+ if exito_evadir :
125+ print ("Wolverine ha evadido con exito" )
126+ Simulador .siguiente_turno (self )
127+
128+ else :
129+ wolverine .recibir_daño (daño )
130+ if daño == 100 :
131+ print ("Deadpool inflinge golpe critico" )
132+ print ("Volverá a atacar en el siguiente turno" )
133+ Simulador .omitir_turno (self )
134+
135+ print (f"Deadpool inflinge { daño } puntos de daño." )
136+ Simulador .siguiente_turno (self )
95137
96138
97139simulador = Simulador ()
0 commit comments