Foco da Matéria: Como persistir dados simples do jogo (o High Score) diretamente no navegador do jogador, garantindo que a pontuação máxima seja mantida mesmo após fechar e reabrir o jogo.
1. 🌐 O que é localStorage?
O localStorage é uma API do navegador que permite armazenar dados de chave-valor (Key-Value) de forma persistente. Diferente dos cookies, os dados armazenados aqui:
- Não expiram (a menos que o usuário limpe manualmente o cache do navegador).
- Não são enviados a cada requisição HTTP, tornando-o mais rápido e seguro para dados locais.
Usaremos o localStorage para guardar o High Score (Pontuação Máxima) do nosso Flappy Geek Bird.
2. 📝 Implementando o High Score
Vamos introduzir uma nova variável para o High Score e duas funções principais: uma para carregar o valor do navegador e outra para salvar o novo recorde.
Atualize o seu game.js:
JavaScript
// VARIÁVEIS DE ESTADO
// ... (outras variáveis) ...
let highScore = 0; // O recorde a ser buscado/salvo
const HIGH_SCORE_KEY = 'flappyGeekBirdHighScore'; // Chave única para o localStorage
// --- ELEMENTOS DOM (Adicione o High Score ao HTML se desejar, ou use o console) ---
// NOVO: Carregar o High Score no início do jogo
function carregarHighScore() {
// Tenta obter o valor do armazenamento local.
const savedScore = localStorage.getItem(HIGH_SCORE_KEY);
if (savedScore) {
// Se existir um valor, converte de String para Número
highScore = parseInt(savedScore);
}
// Opcional: Mostrar no console ou em um elemento HTML separado.
console.log(`High Score carregado: ${highScore}`);
// Opcional: Adicionar um elemento HTML para mostrar o High Score
// Exemplo: document.getElementById('high-score-display').textContent = `Recorde: ${highScore}`;
}
// NOVO: Salvar o High Score ao perder o jogo
function salvarHighScore() {
if (score > highScore) {
highScore = score;
// Salva o novo recorde (DEVE ser armazenado como String)
localStorage.setItem(HIGH_SCORE_KEY, highScore.toString());
console.log(`Novo High Score salvo: ${highScore}`);
}
}
3. 🔄 Integrando nas Funções de Controle
Agora precisamos garantir que o High Score seja carregado quando o jogo inicia e salvo quando o jogo termina (gameOver).
Atualize as funções startGame e gameOver em game.js:
JavaScript
function startGame() {
isGameRunning = true;
score = 0;
scoreDisplay.textContent = `Pontuação: 0`;
// NOVO: Carrega o recorde ao iniciar
carregarHighScore();
geekBird.y = 200;
geekBird.velocity = 0;
// ... (restante do código: Limpa tubos, inicia pipeInterval, etc.) ...
requestAnimationFrame(gameLoop);
}
function gameOver() {
isGameRunning = false;
// NOVO: Salva o recorde antes de alertar
salvarHighScore();
alert(`Game Over! Sua pontuação final foi: ${score}. Recorde atual: ${highScore}`);
// Limpar tubos, mostrar tela de início, etc.
}
// Inicia o carregamento e o jogo (se não houver um botão de início)
carregarHighScore(); // Garante que o recorde esteja carregado no console
startGame();
4. ⚠️ Um Detalhe Importante do localStorage
Lembre-se que o localStorage só armazena strings. Por isso:
- Usamos
localStorage.getItem(key)para obter a string. - Usamos
parseInt(savedScore)para converter a string de volta para um número para podermos compará-lo e somá-lo. - Usamos
highScore.toString()para salvar o número de volta como string.
Com isso, nosso jogo agora se lembra da pontuação máxima do jogador, adicionando um elemento de competição e persistência sem precisar de um servidor.