Мой идеальный Тетрис

Репозиторий проекта на GitHub



Что это такое

Тетрис — легендарная игра, которая мне очень нравится. Я действительно люблю эту игру и получаю удовольствие от её прохождения. Она отлично снимает стресс. В качестве забавного проекта на выходные я решил собрать игру как браузерное приложение, предназначенное как для десктопа, так и для мобильных устройств, используя принципы vibe coding. Мобильная часть этой версии была вдохновлена Play-Tetris, у которого очень удобная мобильная схема управления с управлением свайпами. Посмотрите и сыграйте в мою реализацию Тетриса здесь, это, по моему мнению, самая «идеальная» версия Тетрис.



геймплей моей версии Тетриса, сыграйте сами здесь

За пределами кода

Я не ставил целью создать клон Тетриса как проект для портфолио или чтобы чему-то научиться. Я сделал это, потому что мне это действительно нужно было. Когда я в стрессе — будь то тяжёлая неделя на работе или просто накопившиеся дела — Тетрис — одна из немногих здоровых вещей, которые действительно помогают мне перезагрузиться. В период стресса я склонен много есть, и это со временем сказывается, поэтому иметь что-то, что работает без побочных эффектов, для меня очень важно. Всего 10–30 минут сбрасывания блоков, и моему мозгу кажется, что его немного “прочистили”. Для меня это не просто способ расслабиться, это способ иметь что-то простое и сфокусированное, во что можно направить стресс. Существуют даже интересные исследования, показывающие, что Тетрис может влиять на то, как мозг справляется с навязчивыми воспоминаниями и стрессом, например, в экспериментах с травматическими фильмами, у людей, лечившихся после реальных несчастных случаев и в качестве дополнения к терапии с измеримыми изменениями в мозге. Я не пытаюсь превратить эту игру в медицинское лечение, но приятно видеть, что возможно существует реальная научная поддержка тому, что я уже чувствую — Тетрис действительно может помочь людям справляться со стрессом.

Итак, я стал искать хорошую версию Тетриса для игры, и проблема заключалась в том, что ничего из доступного не совсем соответствовало тому, как я хотел играть. Мобильные приложения в App Store на iOS полны рекламы и микротранзакций. Веб-версии тормозили или на телефоне ощущались ужасно. Классическая версия для NES отличная, но требует эмулятора и дополнительного оборудования. Я даже купил Miyoo Mini, думая, что это решит проблему, и в итоге просто носил с собой ещё одно устройство только для того, чтобы играть в Тетрис. В какой-то момент я понял, что трачу больше времени на поиски подходящей версии, чем потребовалось бы, чтобы просто создать свою.

С современными браузерами, инструментами LLM, такими как Claude Code, и рабочими процессами вроде vibe coding, наконец-то пришло подходящее время, чтобы сделать Тетрис, который я хотел сам. Быстро, минималистично, без рекламы, без аккаунтов, без App Store. Просто браузерная игра, которая работает на моём телефоне и ноутбуке и которой я полностью управляю. Примерно за день у меня получилась рабочая версия, а после недели периодической работы, чтобы сделать её надёжной и правильно настроить ощущения как на десктопе, так и на мобильном, я остался доволен.

Я делюсь ею потому, что если она поможет хотя бы одному человеку снять стресс так же, как помогает мне, это сделает меня очень счастливым. Это маленькая вещь, но иногда именно маленькая вещь — то, что нужно.

Особенности

  • Классическое поле Тетриса 10x20
  • Полное управление с клавиатуры на десктопе и сенсорными жестами на мобильных устройствах
  • Стандартный генератор фигур по системе семи мешков
  • Удержание фигуры и предпросмотр следующих фигур
  • Проекция призрачной фигуры, показывающая, куда упадёт фигура
  • Кривая скорости по уровням с динамической задержкой блокировки
  • Отслеживание очков, линий, уровня и рекорда с сохранением в локальном хранилище
  • Подсчёт очков за мягкое и жёсткое падение
  • Меню внутри игры с продолжением, перезапуском, выходом, отключением музыки/звук эффектов и ссылкой на исходный код
  • Анимация вспышки при очистке линии со звуковым эффектом
  • Поддержка безопасной области iOS (Dynamic Island, вырез, индикатор “Домой”)
  • Офлайн-поддержка через Service Worker (работает без интернета после первого посещения)
  • Возможность установки как PWA (добавить на главный экран на iOS/Android для опыта, похожего на приложение)

Управление

Десктоп (клавиатура)

Действие Клавиши
Перемещение или A D
Мягкое падение или S
Жёсткое падение Space
Поворот по часовой стрелке W X
Поворот против часовой стрелки Z
Удержание фигуры C или LShift
Меню Esc или M
Исходный код G (экран названия)

Мобильная версия (сенсор)

Действие Жест
Перемещение Смахивание влево / вправо
Мягкое падение Удерживать и тянуть вниз
Жёсткое падение Резкий свайп вниз
Поворот по часовой стрелке Нажатие
Удержание фигуры Быстрый свайп вверх

Кривая сложности

Кривая скорости и задержка блокировки в этой версии были настроены с учётом исследований того, как классические и современные игры Тетрис обрабатывают прогрессию сложности. В оригинальном NES Тетрисе гравитация достигает одного ряда за кадр на уровне 29, что стало знаменитым “экра́ном-убийцей”, где игра становится фактически непроходимой для большинства людей. Это не было задуманный финал, а скорее побочный эффект аппаратных ограничений и того, что DAS (Delayed Auto Shift) был слишком медленным, чтобы поспевать за скоростью падения. Уиллис Гибсон доказал это в 2024 году, когда он пробился дальше и сломал игру на уровне 157.



геймплей классического NES Тетриса 1989 года (оригинальный источник)

Современные игры, такие как TGM (Tetris: The Grand Master), решили эту проблему иначе. Вместо того чтобы просто увеличивать скорость падения до момента, когда игра ломается, TGM ограничивает гравитацию до 20G (моментальное падение), а затем сжимает другие временные окна, такие как задержка блокировки и DAS, чтобы повысить сложность. Стандарт Tetris Guideline использует задержку блокировки 500 мс с до 15 сбросами перемещения, чему следует эта версия. Исследования режима Death в TGM2 и TGM3 Shirase показали, что практический минимум для соревновательной игры составляет примерно 250 мс задержки блокировки при быстром DAS, в то время как всё, что ниже 133 мс, — это территория специалистов.

Основываясь на всём этом, кривая скорости здесь ограничивает гравитацию до 33 мс на ряд (похоже на уровни NES с 19 по 28) вместо перехода к моментальному падению, а DAS масштабируется от 170 мс до 100 мс на более высоких уровнях, чтобы вы могли перемещаться по полю во время задержки блокировки. Целью было сделать высокие уровни жестоко быстрыми, но всё ещё справедливыми — ближе к тому, как Tetris 99 и TGM обрабатывают финальную сложность, а не подходу оригинального NES, который просто позволял сырой скорости перегнать ваши вводы.

Под капотом

  • Адаптивный дизайн, оптимизированный как для десктопа, так и для мобильных устройств (портретная ориентация)
  • Предварительно отрисованные спрайты блоков и фон сетки для повышения производительности
  • Используется стиль ударов от стен в духе Super Rotation System (SRS) для поворота фигур
  • Обнаружение сенсорных жестов на основе скорости для надёжного разделения флика и перетаскивания
  • Система таймингов по уровням для скорости гравитации и задержки блокировки
  • Рекорды и настройки звука сохраняются с помощью localStorage
  • Источник фоновой музыки NmCCQxVBfyM
  • Источник звукового эффекта очистки линии UMViM2tHrOk
  • Проект полностью с открытым исходным кодом под Лицензией MIT
  • Создано с помощью следующих инструментов ИИ:
    • Claude Code CLI — кодирование/разработка
    • Gemini CLI — кодирование/разработка
    • Cha CLI — кодирование и написание текстов
    • xAI Grok — логотипы и иконки
    • Perplexity — исследование багов
    • Google Search — поиск SVG и других ресурсов
    • YouTube + yt-dlp — поиск аудиоклипов
    • FFmpeg — редактирование аудиофайлов

Заключительные мысли

Это был один из тех проектов, где мотивация была не технической, а личной. Я просто хотел версию Тетриса, которая работала бы так, как мне нужно: без рекламы, без дополнительного оборудования и без зависимости от чужого приложения, которое может исчезнуть или измениться в любой момент. Тот факт, что мне удалось пройти путь от идеи до отполированной игры примерно за неделю прерывистой работы, используя современные инструменты ИИ и кодинг по настроению, многое говорит о том, на каком уровне сейчас находится разработка программного обеспечения.

Я использую эту версию почти ежедневно с тех пор, как её создал, и она по-прежнему делает ровно то, что мне нужно. Она помогает мне отвлечься от того, что меня напрягает, сосредоточиться на чем-то простом на несколько минут и вернуться с более ясной головой. Если вы попробуете её, и она сделает то же самое для вас, это лучший результат, которого я мог бы желать. А если вы хотите создать ответвление, подправить кривую скорости, изменить управление или доработать её, — не стесняйтесь. Если вы найдёте ошибку или у вас есть предложение, не стесняйтесь создать обращение в репозитории на GitHub. В этом и заключается вся суть публикации проекта с открытым исходным кодом.