Что нужно сделать
Вы работаете в команде разработчиков мобильной игры, и вам досталась такая часть от ТЗ заказчика:
Есть два юнита, каждый из них называется «Воин». Каждому устанавливается здоровье в 100 очков. Они бьют друг друга в случайном порядке. Тот, кто бьёт, здоровье не теряет. У того, кого бьют, оно уменьшается на 20 очков от одного удара. После каждого удара надо выводить сообщение, какой юнит атаковал и сколько у противника осталось здоровья. Как только у кого-то заканчивается ресурс здоровья, программа завершается сообщением о том, кто одержал победу.
Реализуйте такую программу.
Что оценивается
- Результат вычислений корректен.
- Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
- Сообщения о процессе получения результата осмысленны и понятны для пользователя.
- Переменные, функции и собственные методы классов имеют значащие имена, не
a
,b
,c
,d
.
import random
class Warrior:
def __init__(self, name, health=100, power=20):
self.name = name
self.health = health
self.power = power
def duel(warrior_1, warrior_2):
print('Дуэль началась:\n')
while warrior_1.health > 0 and warrior_2.health > 0:
hit = random.randint(1, 2)
if hit == 1:
hit = warrior_1
warrior_2.health -= warrior_1.power
print(f'{warrior_1.name}({warrior_1.health}) '
f'атаковал {warrior_2.name}({warrior_2.health}).')
else:
hit = warrior_2
warrior_1.health -= warrior_2.power
print(f'{warrior_2.name}({warrior_2.health}) '
f'атаковал {warrior_1.name}({warrior_1.health}).')
print(f'\nПобеду одержал {hit.name}')
viking = Warrior('Викинг')
knight = Warrior('Рыцарь')
duel(viking, knight)