Возвращаясь к 90-м годам. Я продолжаю выполнять 30-дневный ванильный javascript-вызов Уэса Боса. Сегодня мы собираемся внедрить Кодекс Konami. Вы можете попробовать это здесь (http://yortuc.com/konamicode/)
Что такое Konami Code?
Konami Code - это особая комбинация действий нажатия клавиш. Его можно увидеть во многих играх Konami и сторонних производителей. Пользователь нажимает кнопки на игровом контроллере в определенном порядке с максимальной временной задержкой между каждым нажатием клавиши. Исходный код Konami выглядит следующим образом:
Мы по-прежнему можем видеть реализации Konami Code даже на веб-сайтах.
Реализация
Учитывая, что это действительно забавная и небольшая задача, на этот раз, прежде чем посмотреть, как Уэс Бос кодировал эту задачу, я сначала попробовал ее. Также на этот раз, вместо того, чтобы начинать набирать код напрямую, я создал алгоритм на простом английском языке.
wait a key (waiting state, key_index = 0) if a key comes, check if seq[key_index] = keyCode if true, increase key_index by one, clear previous timeout if there is one setTimeout to 500 if timeout fires, set key_index to zero if false, set key_index to zero
Таким образом, абстрагируясь от деталей реализации, я легко понял последовательность действий. И преобразовать такой полный поток в код действительно гладко.
Разница
И мы снова увидели, что даже такая простая функция, как у меня и Уэса Боса, реализована двумя разными способами. Когда я впервые приступил к этой задаче, я разработал поведение, которое я помню из дней своего детства, поскольку между нажатиями клавиш есть таймауты. Если вы нажмете клавиши и в какой-то момент будете ждать дольше, чем следует, вы вернетесь к началу. Реализация Уэса с этим не справляется.
Вы можете получить полный исходный код здесь (https://gist.github.com/yortuc/309d730c7a9368675d09a2b2787fb329)
Возможные улучшения
Можно создать небольшую библиотеку для управления любым набором комбинаций клавиш. И может быть опубликован как пакет NPM.