Meu Tetris Perfeito

Repositório GitHub do Projeto



O Que É Isto

Tetris é um jogo lendário e um dos que eu mais gosto. Eu realmente adoro o jogo e gosto de jogá-lo. É um ótimo alívio de estresse. Para um projeto divertido de fim de semana, decidi construir o jogo como um jogo/aplicativo para navegador projetado para Desktop e Mobile, usando os princípios do vibe coding. O lado móvel desta versão foi inspirado por Play-Tetris, que tem uma configuração móvel muito boa com seus controles baseados em swipe. Confira e jogue minha implementação de Tetris aqui, é o que eu considero a versão mais “perfeita” de Tetris.



jogabilidade da minha versão do Tetris, jogue você mesmo aqui

Além do Código

Eu não comecei a construir um clone de Tetris como um projeto de portfólio ou para aprender algo novo. Eu o construí porque realmente precisava dele. Quando estou estressado, seja por uma semana difícil no trabalho ou apenas a vida acumulando, Tetris é uma das poucas coisas saudáveis que realmente me ajudam a resetar. Quando estou estressado costumo comer muito, o que se acumula com o tempo, então ter algo que funciona sem efeitos colaterais é muito importante para mim. Apenas 10 a 30 minutos de deixar as peças caírem e meu cérebro parece que foi um pouco limpo. Não é apenas um relaxamento casual para mim, é uma maneira de ter algo simples e focado para canalizar aquele estresse. Há até algumas pesquisas interessantes mostrando que Tetris pode afetar como o cérebro lida com memórias intrusivas e estresse, por exemplo em experimentos com filmes traumáticos, em pessoas tratadas após acidentes reais, e como suplemento à terapia com mudanças cerebrais mensuráveis. Não estou tentando transformar este jogo em um tratamento médico, mas é legal ver que pode haver ciência real apoiando o que eu já sinto, que Tetris pode genuinamente ajudar as pessoas a lidar com o estresse.

Então fui procurar uma boa versão de Tetris para jogar, e o problema era que nada por aí realmente se encaixava em como eu queria jogar. Apps móveis na App Store do iOS estão cheios de anúncios e microtransações. Versões web eram lentas ou pareciam terríveis no telefone. A versão clássica do NES é ótima, mas precisa de um emulador e hardware extra. Eu até comprei um Miyoo Mini achando que resolveria o problema, e tudo que acabei fazendo foi carregar um segundo dispositivo só para jogar Tetris. Em determinado momento percebi que estava gastando mais tempo procurando a versão certa do que levaria para simplesmente construir uma.

Com navegadores modernos, ferramentas LLM como Claude Code e fluxos de trabalho como vibe coding, finalmente pareceu o momento certo para construir o Tetris que eu queria. Rápido, minimalista, sem anúncios, sem contas, sem loja de apps. Apenas um jogo de navegador que funciona no meu telefone e no meu laptop e que eu controlo completamente. Em cerca de um dia eu tinha uma versão funcional, e depois de cerca de uma semana de trabalho intermitente para torná-la robusta e acertar a sensação tanto no desktop quanto no mobile, fiquei satisfeito.

Estou compartilhando porque se isso acabar ajudando mesmo que só mais uma pessoa a desestressar do jeito que me ajuda, isso já me deixaria muito feliz. É uma coisa pequena, mas às vezes uma coisa pequena é exatamente o que você precisa.

Recursos

  • Tabuleiro clássico de Tetris 10x20
  • Controles completos por teclado no Desktop e controles por gestos de toque no Mobile
  • Randomizador padrão do tipo seven-bag (sete sacos)
  • Peça de hold e pré-visualização da próxima peça
  • Projeção de peça fantasma mostrando onde as peças vão cair
  • Curva de velocidade baseada em nível com lock delay dinâmico
  • Rastreamento de pontuação, linhas, nível e recorde persistido no armazenamento local
  • Pontuação por queda suave (soft drop) e queda dura (hard drop)
  • Menu dentro do jogo com retomar, reiniciar, sair, silenciar música/Efeitos Sonoros e link para o código-fonte
  • Animação de flash ao limpar linhas com efeito sonoro
  • Suporte à área segura do iOS (Dynamic Island, notch, indicador da tela inicial)
  • Suporte offline via Service Worker (funciona sem internet após a primeira visita)
  • Instalável como PWA (adicione à tela inicial no iOS/Android para experiência semelhante a um app)

Controles

Computador (Teclado)

Ação Teclas
Mover ou A D
Queda Suave ou S
Queda Dura Space
Girar CW W X
Girar CCW Z
Hold C ou LShift
Menu Esc ou M
Código-Fonte G (tela de título)

Móvel (Toque)

Ação Gesto
Mover Deslizar para esquerda / direita
Queda Suave Segurar e arrastar para baixo
Queda Dura Flick rápido para baixo
Girar CW Tocar
Hold Flick rápido para cima

Curva de Dificuldade

A curva de velocidade e o lock delay nesta versão foram ajustados usando pesquisas sobre como jogos clássicos e modernos de Tetris lidam com a progressão de dificuldade. No Tetris do NES original, a gravidade alcança uma linha por frame no nível 29, o que tornou-se a famosa “tela de morte” onde o jogo se torna efetivamente injogável para a maioria das pessoas. Isso não foi realmente um fim planejado, foi mais um efeito colateral do hardware e de como o DAS (Delayed Auto Shift) era lento demais para acompanhar a velocidade de queda. Willis Gibson provou isso em 2024 quando ultrapassou isso e travou o jogo no nível 157.



jogabilidade do clássico Tetris do NES de 1989 (fonte original)

Jogos modernos como TGM (Tetris: The Grand Master) resolveram isso de forma diferente. Em vez de apenas fazer as peças caírem mais rápido até o jogo quebrar, o TGM limita a gravidade a 20G (queda instantânea) e então aperta outras janelas de tempo como lock delay e DAS para aumentar a dificuldade. O padrão Tetris Guideline usa 500ms de lock delay com até 15 resets de movimento, o que esta versão segue. Pesquisas sobre o modo Death do TGM2 e o TGM3 Shirase mostraram que o piso prático para jogo competitivo está em torno de 250ms de lock delay com DAS rápido, enquanto qualquer coisa abaixo de 133ms é território de especialistas.

Com base em tudo isso, a curva de velocidade aqui limita a gravidade em 33ms por linha (semelhante aos níveis 19 a 28 do NES) em vez de ir para queda instantânea, e o DAS escala de 170ms até 100ms em níveis mais altos para que você possa atravessar o tabuleiro durante o lock delay. O objetivo foi fazer os níveis altos parecerem brutalmente rápidos, mas ainda justos, mais próximos de como Tetris 99 e o TGM lidam com a dificuldade final do que a abordagem original do NES de simplesmente deixar a velocidade bruta ultrapassar seus inputs.

Sob o Capô

  • Design responsivo otimizado tanto para Desktop quanto para Mobile (retrato)
  • Sprites de blocos pré-renderizadas e fundo de grade para performance
  • Utiliza Super Rotation System (SRS) para wall kicks na rotação das peças
  • Detecção de gestos de toque baseada em velocidade para distinção confiável entre flick e arraste
  • Sistema de temporização baseado em nível para velocidade da gravidade e lock delay
  • Recordes e configurações de áudio persistidos com localStorage
  • Fonte da música de fundo NmCCQxVBfyM
  • Fonte do efeito sonoro de limpeza de linha UMViM2tHrOk
  • O projeto é totalmente de código aberto sob a Licença MIT
  • Construído com as seguintes ferramentas de IA:

Considerações Finais

Este foi um daqueles projetos em que a motivação não era técnica, era pessoal. Eu só queria uma versão de Tetris que funcionasse do jeito que eu queria, sem anúncios, sem hardware extra e sem depender do aplicativo de outra pessoa que poderia desaparecer ou mudar a qualquer momento. O fato de eu ter conseguido ir da ideia a um jogo polido em cerca de uma semana de trabalho intermitente, usando ferramentas de IA modernas e programação por vibe, diz muito sobre onde estamos agora com o desenvolvimento de software.

Tenho usado esta versão quase diariamente desde que a construí, e ela ainda faz exatamente o que preciso que ela faça. Isso me ajuda a me afastar do que quer que esteja me estressando, focar em algo simples por alguns minutos e voltar com a mente mais clara. Se você o experimentar e ele fizer o mesmo por você, esse é o melhor resultado que eu poderia pedir. E se você quiser bifurcá-lo, ajustar a curva de velocidade, mudar os controles ou construir em cima dele, fique à vontade. Se você encontrar um bug ou tiver uma sugestão, fique à vontade para abrir um problema no repositório do GitHub. Esse é todo o objetivo de torná-lo de código aberto.