Важно: каждая задача выполняется в виде отдельного проекта с собственным GitHub репозиторием.
Важно: код должен проходить ESLint без ошибок.
Важно: тесты должны обеспечивать 100% покрытие тестируемых функций по строкам.
Важно: решения должны быть построены на базе шаблона Webpack.
В личном кабинете на сайте netology.ru в поле комментария к домашней работе вставьте ссылки на ваш GitHub-проекты.
В целях упрощения поддержки вашей игры и разрастающегося количества доступных персонажей, вы решили внедрить единые правила создания персонажей, и, конечно же, вам в этом помогут конструкторы.
Реализуйте функцию-конструктор персонажей:
function Character(name, type) {
// TODO: add logic here
this.name = name;
this.type = type;
}
Ваша функция-конструктор должна соответствовать следующим требованиям:
- name - строка, min - 2 символа, max - 10
- type - один из типов (строка): 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
Не забудьте написать unit-тесты, которые обеспечивают 100% покрытие функции, которую вы тестируете.
Теперь, когда у вас есть функция-конструктор, вы можете воспользоваться возможностями прототипов для реализации общих функций для разных объектов. Давайте реализуем функцию, которая наносит "урон" объекту в результате атаки на него
В качестве отправной точки используйте следующую реализацию:
function Character(name, type) {
this.name = name;
this.type = type;
this.health = 100;
this.attack = 10;
this.defence = 40;
}
Реализуйте в прототипе Character функцию damage(points)
, которая меняет внутреннее состояние объекта (points
- это урон, наносимый персонажу). Функция damage(points)
ничего не возвращает и рассчитывает итоговое изменение жизни персонажа (health
) по формуле: health -= points * (1 - defence / 100)
, учитывая, что значение health >= 0
.
Не забудьте написать unit-тесты, которые обеспечивают 100% покрытие функции, которую вы тестируете.
Важно: данная задача не является обязательной
Как только вы приступаете к решению вопросов организации своего кода, жёстко встаёт вопрос о его документировании для участников вашей команды. Для этого есть много инструментов, но вы ваш выбор остановился на JSDoc.
Установите JSDoc в вашей проект с помощью следующей команды:
npm install --save-dev jsdoc
Создайте конфигурационный файл JSDoc - jsdoc.conf.json:
{
"source": {
"include": ["src/js"]
},
"opts": {
"encoding": "utf8",
"destination": "docs",
"recurse": true
}
}
Создайте файл character.js с вашим приложением в каталоге js. В нём расположите заглушку функции:
/**
* <Общее описание>
*
* @param <описание параметра>
* @param <описание параметра>
*
* @throws <описание генерируемой ошибки>
*/
function Character(name, type) {
this.name = name;
this.type = type;
}
Задайте скрипт npm в package.json:
"doc": "jsdoc -c jsdoc.conf.json"
Задокументируйте поведение функции-конструктора Character с использованием следующих doc-комментариев:
- @param {<тип>} <имя> - описание параметра (см. документацию)
- @throws {<тип>} - описание генерируемого исключения (см. документацию)
Удостоверьтесь, что документация генирируется, запустив:
npm run doc
Добавьте каталог docs в .gitignore.