Skip to content

Commit 7c3df0d

Browse files
committed
Create davidrguez98.py
1 parent 11bc625 commit 7c3df0d

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
""" /*
2+
* EJERCICIO:
3+
* ¡El último videojuego de Dragon Ball ya está aquí!
4+
* Se llama Dragon Ball: Sparking! ZERO.
5+
*
6+
* Simula un Torneo de Artes Marciales, al más puro estilo
7+
* de la saga, donde participarán diferentes luchadores, y el
8+
* sistema decidirá quién es el ganador.
9+
*
10+
* Luchadores:
11+
* - Nombre.
12+
* - Tres atriotasobutos: velocidad, ataque y defensa
13+
* (con valores entre 0 a 100 que tú decidirás).
14+
* - Comienza cada batalla con 100 de salud.
15+
* Batalla:
16+
* - En cada batalla se enfrentan 2 luchadores.
17+
* - El luchador con más velocidad comienza atacando.
18+
* - El daño se calcula restando el daño de ataque del
19+
* atacante menos la defensa del oponente.
20+
* - El oponente siempre tiene un 20% de posibilidad de
21+
* esquivar el ataque.
22+
* - Si la defensa es mayor que el ataque, recibe un 10%
23+
* del daño de ataque.
24+
* - Después de cada turno y ataque, el oponente pierde salud.
25+
* - La batalla finaliza cuando un luchador pierde toda su salud.
26+
* Torneo:
27+
* - Un torneo sólo es válido con un número de luchadores
28+
* potencia de 2.
29+
* - El torneo debe crear parejas al azar en cada ronda.
30+
* - Los luchadores se enfrentan en rondas eliminatorias.
31+
* - El ganador avanza a la siguiente ronda hasta que sólo
32+
* quede uno.
33+
* - Debes mostrar por consola todo lo que sucede en el torneo,
34+
* así como el ganador.
35+
*/ """
36+
37+
#EJERCICIO
38+
39+
import random
40+
41+
class Fighter:
42+
43+
def __init__(self, name: str, speed: int, attack: int, defense: int):
44+
self.name = name
45+
self.speed = speed
46+
self.attack = attack
47+
self.defense = defense
48+
self.health = 100
49+
50+
def reset_health(self):
51+
self.health = 100
52+
53+
def is_alive(self) -> bool:
54+
return self.health > 0
55+
56+
def take_damage(self, damage: int):
57+
58+
attack_damage = 0
59+
60+
if random.random() < 0.2:
61+
print(f"{self.name} ha esquivado el ataque.")
62+
else:
63+
if self.defense >= damage:
64+
attack_damage = damage * 0.1
65+
else:
66+
attack_damage = damage - self.defense
67+
68+
attack_damage = int(attack_damage)
69+
70+
self.health = max(self.health - attack_damage, 0)
71+
print(f"El luchador {self.name} recibe {attack_damage} de daño.")
72+
print(f"Salud restante {self.health}")
73+
74+
class Battle:
75+
76+
def __init__(self, fighter1: Fighter, fighter2: Fighter):
77+
self.fighter1 = fighter1
78+
self.fighter2 = fighter2
79+
80+
def fight(self) -> Fighter:
81+
82+
print(f"\n=== {self.fighter1.name} vs {self.fighter2.name} ===")
83+
84+
while self.fighter1.is_alive() and self.fighter2.is_alive():
85+
86+
if self.fighter1.speed > self.fighter2.speed:
87+
self.turn(self.fighter1, self.fighter2)
88+
if self.fighter2.is_alive():
89+
self.turn(self.fighter2, self.fighter1)
90+
else:
91+
self.turn(self.fighter2, self.fighter1)
92+
if self.fighter1.is_alive():
93+
self.turn(self.fighter1, self.fighter2)
94+
95+
if self.fighter1.is_alive():
96+
print(f"\nEl luchador {self.fighter1.name} ha ganado la batalla.")
97+
return self.fighter1
98+
else:
99+
print(f"\nEl luchador {self.fighter2.name} ha ganado la batalla.")
100+
return self.fighter2
101+
102+
def turn(self, attacker: Fighter, defender: Fighter):
103+
print(f"\n{attacker.name} ataca a {defender.name}")
104+
defender.take_damage(attacker.attack)
105+
106+
class Tournament:
107+
108+
def __init__(self, fighters: list):
109+
if not self.is_power_of_two(len(fighters)):
110+
raise ValueError("El número de luchadores debe de ser una potencia de 2.")
111+
self.fighters = fighters
112+
113+
def start(self):
114+
round = 1
115+
while len(self.fighters) > 1:
116+
117+
print(f"\n=== Ronda: {round} ===")
118+
119+
random.shuffle(self.fighters)
120+
121+
winners = []
122+
123+
for index in range(0, len(self.fighters), 2):
124+
fighter1 = self.fighters[index]
125+
fighter2 = self.fighters[index + 1]
126+
127+
battle = Battle(fighter1, fighter2)
128+
winner = battle.fight()
129+
winners.append(winner)
130+
131+
self.fighters = winners
132+
round += 1
133+
134+
print(f"\nEl ganador del torneo es {self.fighters[0].name}")
135+
136+
def is_power_of_two(self, n) -> bool:
137+
if n <= 0:
138+
return False
139+
while n % 2 == 0:
140+
n //= 2
141+
return n == 1
142+
143+
144+
145+
146+
147+
fighters = [
148+
Fighter("Goku", 90, 95, 80),
149+
Fighter("Vegeta", 95, 90, 82),
150+
Fighter("Piccolo", 80, 85, 90),
151+
Fighter("Freezer", 95, 90, 75),
152+
Fighter("Krillin", 95, 90, 75),
153+
Fighter("Célula", 92, 70, 73),
154+
Fighter("Gohan", 97, 95, 70),
155+
Fighter("Trunks", 88, 88, 88)
156+
]
157+
158+
tournament = Tournament(fighters)
159+
tournament.start()

0 commit comments

Comments
 (0)