Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida na função reiniciarJogo()

No decorrer da aula os instrutores inserem a função reiniciarJogo(), logo a função fica desse jeito

function reiniciarJogo() { numeroSecreto = gerarNumeroAleatorio(); limparCampo(); tentativas = 1; exibirMensagemInicial(); document.getElementById('reiniciar').setAttribute('disabled',true); }

porém se eu comentar as linhas numeroSecreto = gerarNumeroAleatorio() e tentativas = 1 a função e o programa funcionam normalmente, porque isso acontece? Esses dois pontos não são necessários ?

let numeroSecreto = gerarNumeroAleatorio();
let tentativas = 1;

function exibirTextoNaTela(tag,texto) {
  let campo = document.querySelector(tag);
  campo.innerHTML = texto;
}

exibirMensagemInicial();  

function exibirMensagemInicial() {
  exibirTextoNaTela('h1', 'Jogo do número secreto');
  exibirTextoNaTela('p', 'Escolha um número entre 1 e 10');
  }

function verificarChute() {
  let chute = document.querySelector('input').value;

  if (chute == numeroSecreto) {
    exibirTextoNaTela('h1','Acertou!');
    let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
  let mensagemTentativas = `Você descobriu o número secreto com ${tentativas} ${palavraTentativa}!`; 
    exibirTextoNaTela('p', mensagemTentativas);
    document.getElementById('reiniciar').removeAttribute('disabled');
  } else {
      if (chute > numeroSecreto) {
        exibirTextoNaTela('p','O número secreto é menor que o chute');
      } else {
        exibirTextoNaTela('p','O número secreto é maior que o chute');
      }
      tentativas++;
      limparCampo();
  } 
}

function gerarNumeroAleatorio() {
  return parseInt(Math.random() * 10 + 1);
  
} 


function limparCampo() {
  chute = document.querySelector('input');
  chute.value = '';
}


function reiniciarJogo() {
  //numeroSecreto = gerarNumeroAleatorio();
  limparCampo();
  //tentativas = 1;
  exibirMensagemInicial();
  document.getElementById('reiniciar').setAttribute('disabled',true);
}
1 resposta
solução!

Oi Douglas,

A sua dúvida é muito pertinente! 👍

As variáveis numeroSecreto e tentativas são declaradas fora da função reiniciarJogo(), no escopo global.

Isso significa que elas mantêm seus valores entre as chamadas da função.

Quando você comenta as linhas numeroSecreto = gerarNumeroAleatorio(); e tentativas = 1; dentro da função reiniciarJogo(), você não está reinicializando essas variáveis para um novo jogo.

No entanto, o numeroSecreto e o número de tentativas não são redefinidos, o que significa que você continuará tentando adivinhar o mesmo número secreto do jogo anterior e com o número de tentativas do jogo anterior.

Para que o jogo reinicie corretamente, é fundamental que a função reiniciarJogo() também redefina o numeroSecreto para um novo valor aleatório e as tentativas para 1.

Caso contrário, o jogo não será reiniciado de fato. 🤔

Para saber mais: Escopo de variáveis em JavaScript .

Continue praticando e explorando o código! 💪