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

[Bug] Erro no código

Boa noite!

Fiz o código conforme a aula, porém por mais que na lista mostre um número diferente, o número secreto permanece sempre o mesmo, uso ele várias vezes e sempre acerta, não está modificando, poderiam me ajudar por gentileza?

let listaDeNumerosSorteados = [];
let numeroSecreto = gerarNumeroSecreto();

function gerarNumeroSecreto() {
    let numeroEscolhido = parseInt(Math.random() * 4 + 1);
    if (listaDeNumerosSorteados.includes(numeroEscolhido)) {
        return gerarNumeroSecreto();
    } else {
        listaDeNumerosSorteados.push(numeroEscolhido);
        console.log(listaDeNumerosSorteados);
        return numeroEscolhido;
    }
}

Segue tbm o código da função de verificar chute.. as vezes fiz algo errado nele

function verificarChute() {
    let chute = document.querySelector('input').value
    if(chute == numeroSecreto) {
        let palavraTentativa = tentativas > 1 ? 'tentativas': 'tentativa';
        let mensagemTentativa = `Você descobriu o número secreto com ${tentativas} ${palavraTentativa}`;
        exibirTextoNaTela('h1', 'Acertou!');
        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();
    }

Obrigado!

Abs,

6 respostas

Print do log

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

E aí, Lucas! Beleza?

Cê tá jogando o retorno da função gerarNumeroSecreto() logo no comecinho do código. O problema é que isso faz com que o numeroSecreto seja setado só uma vez e fique o mesmo o tempo todo.

Pra dar um jeito nisso, o esquema é chamar a função gerarNumeroSecreto() lá dentro da função verificarChute(). Desse jeito, cada vez que rolar um chute, um número secreto novinho vai ser gerado.

Se liga:

function verificarChute() {
    let chute = document.querySelector('input').value
    let numeroSecreto = gerarNumeroSecreto(); // Aqui a gente manda bala chamando a função pra gerar um novo número secreto
    if(chute == numeroSecreto) {
        let palavraTentativa = tentativas > 1 ? 'tentativas': 'tentativa';
        let mensagemTentativa = `Você descobriu o número secreto com ${tentativas} ${palavraTentativa}`;
        exibirTextoNaTela('h1', 'Acertou!');
        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();
    }
}

Com essa jogada, toda vez que a função verificarChute() for acionada, vai ser gerado um número secreto novo.

Obrigado pelo apoio!

Estou com o mesmo problema, mas colocar o retorno da função gerarNumeroSecreto() dentro do verificarChute() não adiantou

No meu caso o problema estava em

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

Alterando para :

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

No meu caso eu estava utilizando dentro da function reiniciarJogo() a var numeroSecreto ao invés de numeroAleatorio (sendo que eu usei esse nome em todo o resto do código). Não foi a mesma coisa mas me deu uma luz aqui, muito obrigada!