Вы пишете приложение, которое симулирует бойцовский клуб покемонов. Его функционал:
- Вычитывать показатели покемонов из внешнего REST-сервиса
- Инициировать бой
- Объявлять победителя
Это важно. Убедитесь, что вы знаете что такое REST-сервис, JSON, как происходит маппинг из JSON => Java object.
В этом задании мы будем использовать публичный PokeAPI. Это обыкновенный REST-сервис, который хранит в себе покемонов и их различные атрибуты. Его мы будем использовать в качестве источника наших данных.
Приведем пример алгоритма боя. У каждого покемона есть такие поля, как id
, hp
, attack
и defense
.
- Сначала по имени покемона мы формируем запрос к PokeApi и создаём объект
Pokemon
- Бой начинает покемон с наибольшим
id
. Он атакует своего противника на величину поляattack
и уменьшает числоhp
. При уменьшенииhp
, это число уменьшается в зависимости от параметраdefense
у противника по формуле:(входящий урон = attack - (attack * defense/100))
. Например: еслиpikachu
принял удар силой 100, а у него значениеdefense
равное 40, то он получит лишь 60 урона. - Покемон, число
hp
которого стало равным или меньшим 0, проигрывает - При победе бойцовский клуб оглашает победителя, скачивая его изображение в папку проекта (Картинка покемона берется
из объекта sprites с ключом
front_default
)
Это важно. PokeApi требует, чтобы при любых запросах к его апи присутствовал заголовок
User-Agent
, в противном случае, будет возвращён код ошибки403
PokeAPI/pokeapi#135
- Создайте ветку feature и продолжите разработку в ней.
- Добавьте зависимость
com.fasterxml.jackson.core.jackson-databind
- библиотека для маппинга JSON-файлов на объекты - Доработайте сущность
Pokemon
, для возможности маппинга JSON-документа. Если это необходимо, добавьте аннотации, конструктор или дополнительные методы. Названия полей изменять нельзя - Имплементируйте класс
ObjectMapperFactory
- он обязан возвращать объект, с помощью которого мы будем совершать маппинг - Имплементируйте
PokemonFethingService
иPokemonFightingClubService
. - В методе main напишите демо, которое демонстрирует простой бой между покемонами
Pikachu
иSlowpoke
. - *Имплементируйте юнит-тесты
PokemonFethingService
иPokemonFightingClubService
. Для заглушки сервиса Poke-api используйте Wiremock. Постарайтесь добиться максимального коверейджа - Запушьте все изменения на гитхаб и создайте pull-request в ветку master.