Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
I am Moving Everything Into the Classes solution in Clear category for The Vampires by Stensen
class Warrior:
def __init__(self): self.health = 50; self.attack = 5
@property
def is_alive(self): return self.health > 0
def strike(self, enemy): enemy.health -= enemy.damage(self.attack)
def damage(self, enemy_attack): return enemy_attack
class Knight(Warrior):
def __init__(self): super().__init__(); self.attack = 7
def fight(agonist, enemy):
while True:
agonist.strike(enemy)
if enemy.health <= 0: return True
enemy.strike(agonist)
if agonist.health <= 0: return False
class Defender(Warrior):
def __init__(self):
self.health = 60; self.attack = 3; self.defense = 2
def damage(self, enemy_attack): return max(0, enemy_attack - self.defense)
class Vampire(Warrior):
def __init__(self):
self.health = 40; self.attack = 4; self.vampirism = 0.5
def strike(self, enemy):
super().strike(enemy)
self.health += enemy.damage(self.attack) * self.vampirism
class Army:
def __init__(self): self.army = []
def add_units(self, unit, q): self.army += [unit() for _ in range(q)]
def __len__(self): return len(self.army)
class Battle:
@staticmethod
def fight(army1, army2):
assert type(army1) == Army; assert type(army2) == Army
while len(army1) > 0 and len(army2) > 0:
if fight(army1.army[0], army2.army[0]): army2.army.pop(0)
else: army1.army.pop(0)
return len(army1) > 0
Oct. 8, 2020