Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Bug] Repetindo os números

Eu inclui o número na lista e criei o if-else onde se(if) o número já estiver na lista ele retorna gerando um novo número e se ele não estiver(else) na lista ele adiciona o número na lista e retorna esse número. O problema é que está sempre repetindo o mesmo número quando clico no botão de novo jogo até recarregar a página e gerar outro número que quando clico em Novo Jogo depois de reiniciar a página acontece o mesmo de repetir o número.

Código JavaScript abaixo:

let listaDeNumerosSorteados = [];
let numeroAleatorio = gerarNumeroAleatorio();
let tentativas = 1;

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

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

}
mensagemInicial();

function verificarChute() {
  let chute = document.querySelector('input').value;
  
  if (chute == numeroAleatorio) {
    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 > numeroAleatorio) {
    exibirTextoNaTela('p', 'O número secreto é menor');
    tentativas++;
    limparcampo();
  } else {
    exibirTextoNaTela('p', 'O número secreto é maior');
    tentativas++;
    limparcampo();
  }
}

function gerarNumeroAleatorio() {
    let numeroEscolhido = parseInt(Math.random() * 4 + 1);
    if (listaDeNumerosSorteados.includes(numeroEscolhido)) {

      return gerarNumeroAleatorio();
      
    } else {
      listaDeNumerosSorteados.push(numeroEscolhido)
      console.log(listaDeNumerosSorteados);
      return numeroEscolhido;
    }
}

function limparcampo() {

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

function reiniciarJogo() {

  numeroAleatorio;
  limparcampo();
  tentativas = 1;
  mensagemInicial();
  document.getElementById('reiniciar').setAttribute('disabled', true);
  
}
3 respostas

Olá, Ângelo, tudo bem?

O problema é que no seu código a variável numeroAleatorio está gerando um número aleatório apenas no começo. Segue alteração para gerar um novo número também quando reiniciar o jogo:

function reiniciarJogo() {
  numeroAleatorio = gerarNumeroAleatorio();
  limparcampo();
  tentativas = 1;
  mensagemInicial();
  document.getElementById('reiniciar').setAttribute('disabled', true);
}

Quando eu crio a variável numeroAleatorio e atribuo o valor dela como o retorno da função gerarNumeroAleatorio quando eu chamo a variável numeroAleatorio na parte de baixo ela não deveria já gerar um outro número novamente já que essa variável está com o valor dela sendo a função?

solução!

Não exatamente. Quando a seguinte linha de código é executada:

let numeroAleatorio = gerarNumeroAleatorio();

O interpretador JavaScript segue os seguintes passos:

  1. A variável numeroAleatorio é criada, sendo reservado um espaço na memória para armazená-la, e seu nome passa a representar o endereço desse espaço;
  2. A função gerarNumeroAleatorio é executada e retorna um valor numérico aleatório;
  3. O valor retornado pela função é então armazenado na variável numeroAleatorio.

Note que o valor atribuído à variável não é a função em si, mas sim o resultado produzido por ela no exato momento em que foi chamada.

Assim, sempre que a variável numeroAleatorio for utilizada no código, ela retornará o valor obtido na chamada da função, permanecendo assim até que um novo valor seja atribuído a ela no futuro.