Тестовое задание:
В ночной клуб приходят мальчики и девочки. Некоторые из них любят, могут или умеют танцевать. Каждый персонаж, пришедший в ночной клуб, может обладать разными навыками танцевать под разную музыку.
Когда играет Rnb на танцполе танцуют те, кто танцует хип-хоп, рнб. Когда играет Electrohouse на танцполе танцуют те, кто танцует Electrodance, house. Когда играет Поп-музыка танцуют те, кто умеет танцевать под поп-музыку. Если человек не умеет танцевать под данную музыку, он идет в бар и пьет водку.
Танцы представляют из себя движения телом, руками, ногами, головой. В разных танцах они задействованы по-разному:
- в хип хопе покачивания телом вперед и назад, ноги в полу-присяде, руки согнуты в локтях, головой вперед-назад.
- в электродэнс покачивание туловищем вперед-назад, почти нет движения головой, круговые движения - вращения руками, ноги двигаются в ритме.
- в танцах под поп-музыку в основном плавные движения туловищем, руками, ногами и головой.
Необходимо эмулировать ночной клуб с произвольным количеством разных персонажей и с произвольным набором умений танцевать у каждого из них. В то время, когда они слышат музыку, персонажи должны соответствующим образом себя вести: танцевать или пить водку в баре.
Необходимо реализовать код, с помощью которого можно собрать в клуб определенную публику, и запустить определенный набор музыкальных композиций. Желательно, чтобы код был расширяем. Поведение персонажей (что происходит в клубе) следует выводить на экран текстом. Результат должен быть проверяемым: в любой момент времени должно быть понятно, какая музыка играет, и какой конкретно персонаж какие действия выполняет.
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ Яков Бобров - Burn My Passion [00:00 / 00:03] │
│ ♪ Жанр: Hip-hop │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ Танцпол │
│ │
│ o o o │
│ \ \ / \ \ / \ \ / │
│ \ / \ / \ / │
│ Аким Нонна Эльвира │
│ Дроздов Молчановa Мамонтовa │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ Бар │
│ │
│ 0 \ 0 \ │
│ | ‾ | ‾ │
│ П \ П \ │
│ Антонина Руслан │
│ Тимофеевa Маслов │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ │
│ Антонина Тимофеевa: Electrohouse │
│ Аким Дроздов: R&B,Electrohouse,Hip-hop │
│ Руслан Маслов: House │
│ Нонна Молчановa: Hip-hop,Electrohouse │
│ Эльвира Мамонтовa: Electrodance,Electrohouse,Hip-hop │
│ │
│ Hip-hop: Hip-hop,R&B │
│ Electrodance: Electrodance,Electrohouse,House │
│ Pop: Pop │
│ │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
$ cd nightclub/docker/local
$ docker-compose up --build
$ docker exec -it nightclub_app bash
$ php artisan nightclub:init
// Или с указанием кол-ва гостей и треков
$ php artisan nightclub:show --guests=5 --tracks=5
$ vendor/phpunit/phpunit/phpunit --filter=Nightclub --verbose --testdox
// Или вне контейнера
$ cd nightclub/src
$ ./run_tests.sh