Важно: каждая задача выполняется в виде отдельного проекта с собственным GitHub репозиторием.
Важно: код должен проходить ESLint без ошибок.
Важно: тесты должны обеспечивать 100% покрытие тестируемых функций по строкам.
Важно: решения должны быть построены на базе шаблона Webpack.
В личном кабинете на сайте netology.ru в поле комментария к домашней работе вставьте ссылки на ваш GitHub-проекты.
Вы решили перейти на классы и реализовать иерархию, выделив в качестве базового класса класс Character
, а для остальных персонажей создать классы, наследующиеся от него.
Реализуйте описанную иерархию классов: класс Character
является родительским для всех остальных, 6 дочерних классов Bowerman
, Swordsman
, Magician
, Daemon
, Undead
, Zombie
от него наследуются, сами задавая свои характеристики.
Свойства, которые должны быть у объектов класса Character
:
name
- имяtype
- типhealth
- уровень жизниlevel
- уровень персонажаattack
- атакаdefence
- защита
Конструктор класса должен соответствовать следующим требованиям:
name
- строка, min - 2 символа, max - 10type
- один из типов (строка): Bowman, Swordsman, Magician, Daemon, Undead, Zombie
В случае, если передаются некорректные значения, должна выбрасываться ошибка (throw new Error(...)
).
В вашей функции автоматически должны устанавливаться значения следующих полей:
- health: 100
- level: 1
- Атака/защита:
- Bowman: 25/25
- Swordsman: 40/10
- Magician: 10/40
- Undead: 25/25
- Zombie: 40/10
- Daemon: 10/40
Поскольку вы создавали классы для того, чтобы хранить в одном месте свойства объекта и его поведение, то пришла пора реализовать соответствующие методы.
Реализуйте в классе Character
метод levelUp
, который работает следующим образом:
- На 1 повышает поле
level
; - На 20% повышает показатели
attack
иdefence
; - Приводит показатель
health
к значению 100.
Метод должен работать только если показатель жизни не равен 0. В противном случае генерируется ошибка (нельзя повысить левел умершего).
Реализуйте в класса Character
метод damage(points)
, который меняет внутреннее состояние объекта (points
- это урон, наносимый персонажу). Метод damage(points)
ничего не возвращает и рассчитывает итоговое изменение жизни персонажа (health
) по формуле: health -= points * (1 - defence / 100)
, учитывая, что значение health >= 0
.
Не забудьте написать unit-тесты, которые обеспечивают 100% покрытие функций и классов, которые вы тестируете.