class Warrior:
def __init__(self, *args, **kwargs):
self.health = 50
self.dmg = 5
self.defence = 0
self.is_alive = self.health > 0
class Rookie(Warrior):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.health = 50
self.dmg = 1
class Knight(Warrior):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.dmg = 7
class Defender(Warrior):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.health = 60
self.dmg = 3
self.defence = 2
class Army:
def __init__(self, *args, **kwargs):
self.units = []
def add_units(self, unit_type, unit_number):
for i in range(unit_number):
self.units.append(unit_type())
class Battle:
def __init__(self):
battle_status = False
def fight(self, army1, army2):
battle_status = True
while battle_status:
if len(army1.units) > 0 and len(army2.units) > 0:
if fight(army1.units[0], army2.units[0]):
army2.units.pop(0)
else:
army1.units.pop(0)
elif len(army1.units) == 0:
return False
elif len(army2.units) == 0:
return True
def fight(unit_1, unit_2):
ans = bool
damage1 = unit_1.dmg - unit_2.defence
if damage1 < 0:
damage1 = 0
damage2 = unit_2.dmg - unit_1.defence
if damage2 < 0:
damage2 = 0
while unit_1.health > 0 and unit_2.health > 0:
unit_2.health -= damage1
if unit_2.health <= 0:
unit_2.is_alive = False
ans = True
break
unit_1.health -= damage2
if unit_1.health <= 0:
ans = False
unit_1.is_alive = False
break
return ans
if __name__ == '__main__':
unit_1 = Defender()
unit_2 = Rookie()
fight(unit_1, unit_2)
print(unit_1.health)
print(unit_2.health)
unit_1 = Knight()
unit_2 = Rookie()
fight(unit_1, unit_2)
print(unit_1.health)
print(unit_2.health)
Created at: 2019/10/25 23:25; Updated at: 2019/10/26 06:11
The question is resolved.