Возвращаясь к 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.