Ограничение времени: 10 секунд
Ограничение памяти: 640Mb
Ввод: input.js
Вывод: output.png
Любимое развлечение всех посетителей бара «На краю Вселенной» — попытка обыграть неизвестно откуда здесь взявшегося и уже сотни лет никуда не девающегося депрессивного робота Мартина в одну странную игру.
Правила игры простые:
- карта может состоять из стенок, пустых полей, подвижной фигуры и зафиксированных фигур;
- подвижная фигура может перемещаться на одно поле влево, вправо и вниз с помощью кнопок управления: arrow-left arrow-down arrow-right;
- список доступных подвижных фигур (с учётом порядка при изменении):
‘
[
‘o‘,
‘
oo
oo
‘,
‘
o.
oo
‘,
‘
.o
oo
‘,
‘
oo
o.
‘,
‘
o
o
o
‘
]
‘;
- после движения вправо или влево подвижная фигура дополнительно двигается вниз на одно поле, это считается одним ходом;
- если движение вправо или влево невозможны из-за близости стен или зафиксированных фигур, то действие игнорируется (при этом дополнительное движение вниз всё равно происходит, ход случается);
- когда подвижная фигура при движении вниз упирается в стенку или зафиксированную фигуру, она фиксируется;
- после фиксации подвижной фигуры все полные горизонтальные линии зафиксированных фигур исчезают;
- после каждого хода левая и правая стенки изменяются в ширине на 1 клетку;минимальная ширина стен 1 клетка (начальное положение), максимальная ширина стен 5 клеток;
- после достижения максимальной ширины стенки начинают уменьшаться, после достижения минимальной ширины — увеличиваться;
- в том месте, где при увеличении ширины стена пересекается с подвижной фигурой, стенка обволакивает подвижную фигуру (не расширяется на её клетки);
- после фиксации подвижной фигуры (и исчезновения полных горизонтальных линий, если таковые были) следующая по порядку фигура появляется вверху карты так, что верхний первый слева квадратик располагается посредине по горизонтали (все карты нечётной ширины);
- если новой фигуре негде появиться (из-за накопившихся зафиксированных фигур), игра заканчивается — все зафиксированные фигуры превращаются в стены.
Вам нужно реализовать интерфейс игры, чтобы посетители бара могли тренироваться в свободное от игры с Марвином время.
Формат ввода
Карта игры доступна в поле window.map типа String.Специальные символы:
# — стенка;
. — пустое место;
o — часть подвижной фигуры;
O — зафиксированная часть фигуры.
Каждая строка, содержащая хотя бы один специальный символ, является линией карты, каждый символ является полем карты. Любые другие символы не имеют значения и должны быть проигнорированы при построении карты.Например,
window.map = ‘
#..o..#
#.....#
#.....#
#..OO.#
#######
‘;
должно дать такой результат:
Примечания
Все карты в наших тестах имеют прямоугольную форму (нечётной ширины) и ограничены стенками по бокам и снизу.
Решение должно представлять из себя один HTML-файл, содержащий все нужные скрипты и стили.
После того как игра будет проинциализирована, надо вызывать глобальную функцию window.onGameReady(). Только после этого будет запущено автоматическое тестирование вашего решения. Если вызов функции не произойдёт в течение 2 минут, то задание считается невыполненным.
Контейнер с игровым полем должен иметь CSS-класс map.Кнопки управления должны реагировать на событие click и иметь следующие CSS-классы:
влево — control_action_left;
вниз — control_action_down;
вправо — control_action_right.
Значения цвета для разных элементов карты:
задний фон: 35004d;
декоративная сетка: 6c4080;
стенка: ffb971, ff7a00, ffa03f;
фигура: c100ff, dd71ff;
зафиксированная фигура: 00434d, 00e0ff.
Обратите внимание, ваше решение будет тестироваться в браузере Google Chrome 69.