1
resposta

não estou conseguindo entrocar o número secreto.help me

sempre que eu abro o jogo não consigo encontrar o número secreto. não sei o motivo


```let listaDeNumerosSorteados = [];
let numeroLimite = 10;
let numeroSecreto = gerarNumeroAleatorio();
exibirTextoNaTela('.texto__paragrafo', `O número secreto é ${numeroSecreto}`);
let tentativas = 1;

function exibirTextoNaTela(tag, texto) {
    let campo = document.querySelector(tag);
    campo.innerHTML = texto;
    responsiveVoice.speak(texto, 'Brazilian Portuguese 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 mensagemTentativas = `Você descobriu o número secreto  (${numeroSecreto}) com ${Tentativas} ${palavraTentativa}!`;
        exibirTextoNaTela('.texto_paragrafo', mensagemTentativas);
        document.getElementByIdc('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() {
    let chute = document.querySelector('input');
    chute.value = '';
}

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

Olá Gabriel, boa tarde!

Na função verificarChute, você declara uma variável chute e atribui à ela o value de um input do html, após isso você tenta compara se chute é igual a numeroSecreto.

a logica está correta porem a comparação falha porque o value do input retorna uma string e numeroSecreto é um number, como você está usando o operador de comparação restrita "===" resulta em false por isso não entra no if

Existem duas formas de resolver isso, primeiro seria converter o que vem do input em number, para fazer isso você pode usar o parseInt exempo

function verificarChute() {
    // usando o parseInt para converter o value do input em number
    let chute = parseInt(document.querySelector('input').value);
    
    if (chute === numeroSecreto) {
        exibirTextoNaTela('h1', 'Acertou!');
        let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
        let mensagemTentativas = `Você descobriu o número secreto  (${numeroSecreto}) com ${Tentativas} ${palavraTentativa}!`;
        exibirTextoNaTela('.texto_paragrafo', mensagemTentativas);
        document.getElementByIdc('reiniciar').removeAttribute('disabled');
    } else {
        if (chute > numeroSecreto) {
            exibirTextoNaTela('p', 'O número secreto é menor');
        } else {
            exibirTextoNaTela('p', 'O número secreto é maior');
        }
        tentativas++;
        limparCampo();
    }
}

a segunda seria mudar a comparação de restrita para simples usando o operador "==", dessa forma o JavaScript vai tentar comparar mesmo que os tipos sejam diferentes.

Recomendo a primeira solução pois a comparação fica mais precisa.