fork download
  1. class Unit:
  2. """В этом классе определим нашего героя
  3. заметим, что если он ничего не наследует то и скобки можно не ставить"""
  4. def __init__(self, name, hp, position, **kwargs):
  5. """инициализируем наш класс основными параметрами, имя, здоровье, позиция"""
  6. self.name = name
  7. self.hp = hp
  8. self.position = position
  9. self.disabled = False
  10.  
  11. def show_unit(self):
  12. """Печатает все основные параметры юнита"""
  13. print('The unit {0}, has {1} hp, and its coordinate is {2}'.format(str(self.name), str(self.hp), str(self.position)))
  14.  
  15. def move(self, distance):
  16. """Перемещает юнит, если он не disabled"""
  17. if self.disabled:
  18. print('Unit is disabled and can\'t move')
  19. else:
  20. self.position = self.position + distance
  21.  
  22.  
  23. class Archer(Unit):
  24. """Этот класс наследует класс Unit, он описывает лучнка"""
  25. def __init__(self, name, hp, position, **kwargs):
  26. """Инициализируем лучника, помимо основных параметров - позиция, здоровье и имя,
  27. у него ещё есть параметр: урон"""
  28. super().__init__(name, hp, position) # берём инициализатор из родительского класса
  29. if kwargs['damage'] is not None:
  30. self.damage = kwargs['damage'] # каждому лучнику можно установить свой урон
  31. else:
  32. self.damage = 15 # если урон не указали
  33.  
  34. def attack(self, obj):
  35. """метод атаки другого юнита, атакует, если не disabled"""
  36. if self.disabled:
  37. print('Unit is disabled and can\'t shoot')
  38. else:
  39. obj.hp = obj.hp - self.damage
  40.  
  41.  
  42. class Magician(Unit):
  43. """Описываем волшебника, который также может атаковать"""
  44. def __init__(self, name, hp, position, mp, **kwargs):
  45. super().__init__(name, hp, position)
  46. self.damage = 5
  47. self.mp = mp
  48.  
  49. def disable(self, obj):
  50. """Описываем заклинание заморозки юнита"""
  51. if self.mp < 30:
  52. print('Недостаточно маны')
  53. else:
  54. obj.disabled = True
  55. self.mp = self.mp - 40
  56.  
  57.  
  58. class Hero(Archer, Magician):
  59. def __init__(self, name, hp, position, mp, **kwargs):
  60. super().__init__(name, hp, position, mp)
Success #stdin #stdout 0.01s 28384KB
stdin
Standard input is empty
stdout
Standard output is empty