Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Jogue o jogo do dinossauro, pule obstáculos e tente bater seu recorde no ranking
Translation pending
AI summary · website and README
GamesJavaScript · HTMLGitHub @elc1090OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Projeto: Dino Game com persistência de dados em backend demo.gif ainda não existe. Depois de jogar uma partida, grave a tela (ex: ScreenToGif, Xbox Game Bar Win+G, ou o gravador de tela do navegador) e salve o arquivo como demo.gif na raiz do repositório. Carlos Henrique Mendina Gonçalves Pereira — Engenharia de ComputaçãoRead the full README ↗
https://project2-2026b-cau19.vercel.app
Carlos Henrique Mendina Gonçalves Pereira — Engenharia de Computação
Jogo estilo "Dino Game": um personagem parado no canto esquerdo da tela desvia de obstáculos (pulando) para sobreviver o maior tempo possível. Não há autenticação/login; o jogador apenas informa um nome ao final da partida para entrar em uma tela de ranking com os maiores scores. O frontend se comunica com o backend por meio de uma API (leitura e escrita), e os dados de ranking são persistidos do lado do servidor.
Modalidade: A (parceria dev com Ricardo Facco Pigatto — comparação de decisões de código entre duas implementações do mesmo "Dino Game").
Ricardo Facco Pigatto, autor da proposta original do "Dino Game" no documento de definições da disciplina — também está desenvolvendo sua própria versão do jogo. Parceria de código (modalidade A): comparar as decisões de implementação entre os dois projetos.
A ser preenchido pelo Ricardo, com foco nas diferenças percebidas no código entre as duas implementações (modalidade A) — por exemplo, escolhas de stack, estrutura do backend, física do jogo, modelagem do banco de dados.
Iniciei o projeto com pouca experiência prévia — apenas HTML e CSS soltos, sem contato com JavaScript —
e escolhi o Dino Game acreditando que seria fácil por causa do backend simples. A dificuldade real,
porém, esteve na lógica do jogo: minha maior virada de chave foi entender que o HTML/CSS criam a
estrutura prévia (como o <canvas id="game-canvas">) e o JavaScript apenas manipula esse elemento via
document.getElementById, quadro a quadro.
Para viabilizar o desenvolvimento, adaptei minha ideia inicial e trabalhei em conjunto com IA para estruturar tutoriais, analisar código e resolver problemas mais complexos — como debugar um erro 404 na Vercel, processo em que acompanhei e aprovei cada etapa. Ao mesmo tempo, mantive a mão na massa: estruturei o HTML, ajustei manualmente a física do pulo e da gravidade, e escrevi trechos de código de forma guiada.
Olhando para trás, hoje eu seguiria a dica da professora e escolheria algo como um formulário — a lógica em tempo real do jogo pesou mais do que eu esperava. Ainda assim, o processo foi uma descoberta valiosa e honesta sobre como construir e entender software.
1. Física do pulo — game.js
dino.velocityY += GRAVITY;
dino.y += dino.velocityY;
if (dino.y > GROUND_Y - dino.height) {
dino.y = GROUND_Y - dino.height;
dino.velocityY = 0;
}
Não existe nenhuma fórmula de parábola escrita à mão. A cada quadro, a gravidade é somada à velocidade
vertical, e a velocidade é somada à posição. O pulo (JUMP_FORCE = -5) só define uma velocidade inicial
negativa ("pra cima"); a gravidade puxa essa velocidade de volta pra positivo sozinha, quadro a quadro —
a curva de subida e descida do pulo emerge naturalmente desse laço, sem precisar calcular nenhuma
trajetória de antemão.
2. Colisão por retângulos (AABB) — game.js
function rectsOverlap(a, b) {
return (
a.x < b.x + b.width &&
a.x + a.width > b.x &&
a.y < b.y + b.height &&
a.y + a.height > b.y
);
}
Técnica Axis-Aligned Bounding Box: dois retângulos colidem se há sobreposição no eixo X e no eixo Y ao mesmo tempo — se estiverem separados em qualquer um dos dois eixos, não colidem. É por isso que dá pra desviar pulando: o pulo muda a posição Y bem na hora certa pra "escapar" da sobreposição, mesmo estando na mesma posição X do obstáculo.
3. Uso do Canvas para montar o jogo — game.js
const canvas = document.getElementById('game-canvas');
const ctx = canvas.getContext('2d');
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// nuvens, chao, dino, obstaculos — cada um desenhado na ordem de "fundo pra frente"
}
canvas é só um retângulo em branco no HTML, sem nenhum desenho embutido. ctx (contexto de desenho) é
o objeto obtido a partir dele que efetivamente sabe desenhar — retângulos (fillRect), imagens
(drawImage), linhas (stroke). O jogo inteiro é uma sequência de "fotografias" desenhadas do zero a
cada quadro: clearRect apaga o desenho anterior, e cada elemento é redesenhado na ordem certa (fundo
primeiro, personagem por último), sempre nas posições recém-calculadas por update(). É a repetição
disso ~60 vezes por segundo, via requestAnimationFrame, que cria a sensação de movimento contínuo a
partir de imagens estáticas.
@supabase/supabase-js) — banco de dados real, em uso atualmenteapi/[...path].js reexportando o app Express)Projeto entregue para a disciplina de Desenvolvimento de Software para a Web em 2026b