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

[Dúvida] Meu código não esta entrando na condição "VerificarChute"

Olá, boa noite! Tudo bem?

Finalizei meu código e fui testa-lo novamente, porém percebi que ele não esta entrando na condição do "VerificarChute", comparei com o exemplo do professor e com a IA e não identifiquei meu erro, podem me ajudar?

  • Teste IA Alura: Insira aqui a descrição dessa imagem para ajudar na acessibilidade
  • Segue abaixo meu código completo:
let listaNumerosSorteados = [];

let numeroLimiteLista = 10;

let numeroSecreto = geradorNumeroSecreto;

let tentativas = 1;

function exibirTexto(tag, texto){
    let campo = document.querySelector(tag);
    campo.innerHTML = texto;
    responsiveVoice.speak(texto, 'Brazilian Portuguese Female', {rate: 1.2});
}

function mensagemInicialJogo(){
    exibirTexto ('h1', 'Jogo do número secreto');
    exibirTexto ('p','Por favor, nos informe qual número deseja tentar, entre 1 e 10');
    
}

mensagemInicialJogo();

function verificarChute(){
    console.log('O botão foi clicado');
    console.log(numeroSecreto);
   
    let chute = document.querySelector('input').value;
    
    
    if(chute === numeroSecreto){
        exibirTexto('h1','Você acertou!');
        let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
        let mensagemTentativa = `O número secreto ${numeroSecreto} foi descoberto com ${tentativas} ${palavraTentativa} meus parabéns!!!`;
        exibirTexto('p', mensagemTentativa);
        document.getElementById('reiniciar').removeAttribute('disabled');
    } else {
        if(chute > numeroSecreto){
            exibirTexto('h1', 'Quase!');
            exibirTexto('p','Tente novamente! O chute foi maior que o número secreto');
        }else{
            exibirTexto('h1','Quase!');
            exibirTexto('p','Tente novamente! O chute foi menor que o número secreto');
        }
}

    tentativas++;
    limparCampo();
}

function geradorNumeroSecreto(){
    let gerarNumeroSecreto = parseInt(Math.random() * numeroLimiteLista + 1);
    
    let elementosLista = listaNumerosSorteados.length;
    
    if(elementosLista == numeroLimiteLista){
        listaNumerosSorteados = [];
    }
    
    if (listaNumerosSorteados.includes(gerarNumeroSecreto)){
        return geradorNumeroSecreto();
    } 
    else{
        listaNumerosSorteados.push(gerarNumeroSecreto);
        return geradorNumeroSecreto;
    }
}

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

}

function reiniciarJogo(){
    numeroSecreto = geradorNumeroSecreto();
    limparCampo();
    tentativas = 1;
    mensagemInicialJogo();
    document.getElementById('reiniciar').setAttribute('disabled', true);
    
}
  • Coloco também o código no git do professor: aqui

Espero que possam me ajudar, estou à disposição para qualquer dúvida.

Atenciosamente.,

2 respostas
solução!

ola, boa noite! A função geradorNumeroSecreto está retornando uma referência dela mesma qd deveria retornar a variável gerarNumeroSecreto. alem disso me parece que na variavel numeroSecreto vc deveria chamar a funcao geradorNumeroSecreto(), mas esta faltando os parênteses pra executar a função. por fim a comparação ainda iria falhar pois esta comparando de modo restrito (===) uma string com um number.

código corrigido:

let listaNumerosSorteados = [];
let numeroLimiteLista = 10;
let numeroSecreto = geradorNumeroSecreto();
let tentativas = 1;
function exibirTexto(tag, texto){
    let campo = document.querySelector(tag);
    campo.innerHTML = texto;
    responsiveVoice.speak(texto, 'Brazilian Portuguese Female', {rate: 1.2});
}
function mensagemInicialJogo(){
    exibirTexto('h1', 'Jogo do número secreto');
    exibirTexto('p','Por favor, nos informe qual número deseja tentar, entre 1 e 10');
}
mensagemInicialJogo();
function verificarChute(){
    console.log('O botão foi clicado');
    console.log(numeroSecreto);
   
    let chute = parseInt(document.querySelector('input').value);
    
    if (chute === numeroSecreto) {
        exibirTexto('h1','Você acertou!');
        let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
        let mensagemTentativa = `O número secreto ${numeroSecreto} foi descoberto com ${tentativas} ${palavraTentativa} meus parabéns!!!`;
        exibirTexto('p', mensagemTentativa);
        document.getElementById('reiniciar').removeAttribute('disabled');
    } else {
        if (chute > numeroSecreto) {
            exibirTexto('h1', 'Quase!');
            exibirTexto('p','Tente novamente! O chute foi maior que o número secreto');
        } else {
            exibirTexto('h1','Quase!');
            exibirTexto('p','Tente novamente! O chute foi menor que o número secreto');
        }
    }
    
    tentativas++;
    limparCampo();
}
function geradorNumeroSecreto(){
    let gerarNumeroSecreto = parseInt(Math.random() * numeroLimiteLista + 1);
    
    let elementosLista = listaNumerosSorteados.length;
    
    if (elementosLista == numeroLimiteLista) {
        listaNumerosSorteados = [];
    }
    
    if (listaNumerosSorteados.includes(gerarNumeroSecreto)) {
        return geradorNumeroSecreto();
    } else {
        listaNumerosSorteados.push(gerarNumeroSecreto);
        return gerarNumeroSecreto;
    }
}
function limparCampo(){
    let chute = document.querySelector('input');
    chute.value = '';
}
function reiniciarJogo(){
    numeroSecreto = geradorNumeroSecreto();
    limparCampo();
    tentativas = 1;
    mensagemInicialJogo();
    document.getElementById('reiniciar').setAttribute('disabled', true);
}

note que esta executando a funcao e atribuindo o valor à variavel numeroSecreto, a variavel chute esta com um parseInt para transformar a string do html em number e por fim na funcao geradorNumeroSecreto o retorno agora é do numero gerado que esta na variável gerarNumeriSecreto. Seria interessante alterar o nome da variável para numeroGerado por exemplo! espero ter ajudado, bons estudos!

Edison, boa noite!

Muito obrigado pelo retorno, testei e funcionou.

Atenciosamente.,