Pular para o conteúdo

Cobra Desvio

Jogo da cobrinha clássico em tempo real: desvie das paredes e do próprio rabo, coma pra crescer. Jogo e interface 100% em Lua, rodando no navegador via fengari, sem música nem timing de batida.

Ver online2026-09-07
LuaFengariSem framework

Visão geral

Quinto jogo do portfólio, segundo em Lua. Cobre o gênero "ação rápida" da lista original de ideias de jogo, mas sem o risco que descartei antes num rhythm game: sem música, sem timing de batida pra sincronizar, só desvio em tempo real. Cobra clássica: desvie de parede e do próprio rabo, coma pra crescer e pontuar.

Mesma ponte do Depósito Lotado: fengari, uma VM de Lua compilada pra JavaScript, é a única peça de JS do projeto. A diferença de arquitetura é que aqui o jogo roda em tempo real — um setInterval chama um "tick" da lógica a cada 150ms sozinho, sem esperar decisão do jogador, diferente do Sokoban que só muda de estado quando o jogador decide algo.

Arquitetura

Cobra.avancar(estado) continua sendo uma função pura e determinística, mesmo o jogo sendo em tempo real: o temporizador é um detalhe de quando a interface decide chamar a lógica, não faz parte da lógica em si. Isso manteve a suíte de testes 100% independente de temporizador, chamando avancar na mão quantas vezes quiser.

O ponto mais fácil de errar num Snake é a colisão com o próprio corpo: a cauda anda embora no mesmo tick em que a cabeça avança, então a célula dela não deveria contar como colisão, mas o resto do corpo sim. Isso ficou como teste explícito, junto com um gerador de posição de comida com semente determinística (mesma família de PRNG usada nos jogos em TypeScript do portfólio, adaptado pra Lua).

Stack

Lua 5.3 (via fengari), zero framework, zero motor de jogo. HTML/CSS/Lua estático, sem build.