import numpy as np
class Fighter:
def __init__(self, name, power, defense, speed, health = 20):
self.name = name
self.power = power
self.defense = defense
self.speed = speed
self.max_health = health
self.health = health
self.cooldown = 0
def upkeep(self):
if self.cooldown > 0:
self.cooldown -= 1
def attack(self, other):
attack = np.random.choice(range(0,self.power + 1), 1)[0]
block = np.random.choice(range(0,other.defense + 1), 1)[0]
damage = max(attack - block, 0)
other.health -= damage
self.cooldown += 6 - self.speed
msg = self.name + ' attacks ' + other.name + ' for ' + str(attack) + ' damage. '
msg += other.name + ' blocks for ' + str(block) + ' and loses ' + str(damage) + ' health.'
return(msg)
def reset(self):
self.health = self.max_health
self.cooldown = 0
class Battle:
def __init__(self, fighter1, fighter2, verbose = 2):
self.turn = 0
self.fighter1 = fighter1
self.fighter2 = fighter2
while(self.finished() == False):
self.turn += 1
self.fighter1.upkeep()
self.fighter2.upkeep()
if(verbose == 2):
msg = '--- Turn ' + str(self.turn) + ' ('
msg += fighter1.name + ' has ' + str(fighter1.health) + ' health, '
msg += fighter2.name + ' has ' + str(fighter2.health) + ' health) ---'
print(msg)
msg1 = ''
msg2 = ''
if(self.fighter1.cooldown == 0):
msg1 = fighter1.attack(fighter2)
if(verbose == 2):
print(msg1)
if(self.fighter2.cooldown == 0):
msg2 = fighter2.attack(fighter1)
if(verbose == 2):
print(msg2)
if(msg1 == '' and msg2 == '' and verbose == 2):
print('Nothing happened.')
if(self.fighter1.health > 0):
self.winner = fighter1
self.loser = fighter2
else:
self.winner = fighter2
self.loser = fighter1
if(verbose > 0):
print('The winner is ' + self.winner.name + '!!')
fighter1.reset()
fighter2.reset()
def finished(self):
if(self.fighter1.health <= 0 or self.fighter2.health <= 0):
return True
return False
Thor = Fighter('Thor', 4, 3, 3, 20)
Hulk = Fighter('Hulk', 5, 3, 2, 20)
the_battle = Battle(Thor, Hulk, verbose=1)
hulk_wins = 0
for i in range(0, 1000):
a_battle = Battle(Thor, Hulk, verbose=0)
if(a_battle.winner.name == 'Hulk'):
hulk_wins += 1
hulk_perc = hulk_wins / 10
thor_perc = 100 - hulk_perc
print('Hulks\'s win percentage: ' + str(hulk_perc))
print('Thor\'s win percentage: ' + str(thor_perc))
Spidey = Fighter('Spider-Man', 2, 4, 5, 20)
Hulk = Fighter('Hulk', 5, 3, 2, 20)
the_battle = Battle(Spidey, Hulk, verbose=1)
hulk_wins = 0
for i in range(0, 1000):
a_battle = Battle(Spidey, Hulk, verbose=0)
if(a_battle.winner.name == 'Hulk'):
hulk_wins += 1
hulk_perc = hulk_wins / 10
spidey_perc = 100 - hulk_perc
print('Hulks\'s win percentage: ' + str(hulk_perc))
print('Spider-Man\'s win percentage: ' + str(spidey_perc))