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

[Dúvida] Erro ao gerar número aleatório

let listaDeNumerosSorteados = [];
let numeroLimite = 10;
let numeroSecreto = gerarNumeroAleatorio();
let tentativas = 1;

function exibirTextoNaTela(tag, texto) {
    let campo = document.querySelector(tag);
    campo.innerHTML = texto;
    responsiveVoice.speak(texto, 'US English Female', {rate:1.2});
}

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

exibirMensagemInicial();

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

function gerarNumeroAleatorio() {
    let numeroEscolhido = parseInt(Math.random() * numeroLimite + 1);
    let quantidadeDeElementosNaLista = listaDeNumerosSorteados.length;

    if(quantidadeDeElementosNaLista == numeroLimite){
        listaDeNumerosSorteados = [];
    }
    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() {
    let numeroSecreto = gerarNumeroAleatorio();
    limparCampo();
    tentativas = 1;
    exibirMensagemInicial();
    document.getElementById('reiniciar').setAttribute('disabled', true);
    

Esse é meu código, quando vou jogar, ele sempre gera o mesmo número secreto, alguém pode me ajudar?

1 resposta
solução!

Oi, Vinicius! Tudo bem?

O problema está acontecendo devido à forma como a variável numeroSecreto é tratada ao reiniciar o jogo, pois estamos redefinindo a variável localmente, dentro da função reiniciarJogo(), dessa forma, não estamos afetando a variável numeroSecreto que está definida no escopo global (no inicio do código). Isso significa que, embora seja gerado um novo número aleatório e atribuído a uma nova variável local numeroSecreto dentro de reiniciarJogo(), a variável global numeroSecreto usada na função verificarChute() não é atualizada.

Porém para resolvermos o problema basta retirarmos o let que antecede numeroSecreto na função reiniciarJogo(), pois assim atualizaremos a variável global numeroSecreto e não redefiniremos a variável apenas localmente, deixando a nossa função da seguinte forma:

function reiniciarJogo() {
    numeroSecreto = gerarNumeroAleatorio(); // Atualiza a variável global
    limparCampo();
    tentativas = 1;
    exibirMensagemInicial();
    document.getElementById('reiniciar').setAttribute('disabled', true);
}

Espero ter ajudado!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software