3
respostas

Reinício Funciona Parcialmente

Olá tudo bem? Nesta atividade, criei também um prompt que permite ao usuário selecionar a dificuldade. Porém, ao utilizá-lo na function reiniciarJogo() ela não habilita o que é digitado no prompt como mensagem inicial nem como o limite para o novo número secreto, ficando habilitado o que foi digitado pela primeira vez. Consigo continuar com esta funcionalidade com o conhecimento dessas aulas até aqui, sendo um erro de sintaxe ou terei que apagar meu incremento no código kk ?

Além disso, alterei a linha (25) no HTML onde, no lugar do "1000" estava "10". Não sei se fez diferença, mas quando o fiz, o botão Novo Jogo funcionou pela primeira vez. Por gentileza me instrua. Desde já, muito obrigado.

Segue abaixo o código JS completo.

let dificuldade = parseInt(prompt("Selecione a dificuldade do jogo. NUMERO 'DE 0 A _____ '? (10 F, 100 M, 1000 D): ")); let tentativas = 1;

function gerarNumeroAleatorio() { return parseInt(Math.random() * dificuldade + 1); } let numeroSecreto = gerarNumeroAleatorio();

function exibirTextoNaTela(tag, texto) { let campo = document.querySelector(tag); campo.innerHTML = texto; } function exibirMensagemInicial() { exibirTextoNaTela('h1', 'Jogo do número Secreto'); exibirTextoNaTela('p', Escolha um número entre 1 e ${dificuldade}:); } 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 com ${tentativas} ${palavraTentativa}!`; 
    exibirTextoNaTela('p', mensagemTentativas);
    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 limparCampo() { chute = document.querySelector('input'); chute.value = ''; }

function reiniciarJogo() { let dificuldade = parseInt(prompt("Selecione a dificuldade do jogo: NUMERO'DE 0 A _____' (10 F, 100 M, 1000 D)")); tentativas = 1; exibirMensagemInicial(); numeroSecreto = gerarNumeroAleatorio(); limparCampo(); document.getElementById('reiniciar').setAttribute('disabled', true); }

3 respostas

Boa noite! Sou um aluno também e creio que resolvi seu problema. Para que a dificuldade fosse perguntada novamente ao jogador e fosse atribuida o valor solicitado era necessária a criação de uma nova função, que eu chamei de 'escolherDificuldade', onde eu coloco a mesma ordem de definição de um valor para a dificuldade dentro da função reiniciar. vou mandar o meu código JS para sua resolução e melhor compreensão.

let dificuldade = parseInt(prompt("Selecione a dificuldade do jogo. NUMERO 'DE 0 A _____ '? (10 F, 100 M, 1000 D): ")); 

let numeroSecreto = gerarNumeroAleatorio();

let tentativas = 1;



function exibirTextoTela(tag, texto) {
    let campo = document.querySelector(tag);
    campo.innerHTML = texto;
}
exibirTextoTela('h1', 'Jogo do número secreto');
exibirTextoTela('p', 'Escolha um número de 1 a 10');



function exibirMensagemInicial() {
    exibirTextoTela('h1', 'Jogo do número secreto');
    exibirTextoTela('p', `Escolha um número de 1 a ${dificuldade}`);
}

exibirMensagemInicial();

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

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

}


function escolherDificuldade() {
    dificuldade = parseInt(prompt("Selecione a dificuldade do jogo. NUMERO 'DE 0 A _____ '? (10 F, 100 M, 1000 D): "));
}



function gerarNumeroAleatorio() {
    return parseInt(Math.random() * dificuldade + 1);

}

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

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

}

Espero ter ajudado! obs: O meu código HTML está nos padrões que foram realizados na aula. ;)

Boa tarde Leonardo! Muito obrigado pelo auxílio, ajudou e muito. Realmente resolveu o problema. Agora eu gostaria de entender a lógica do porquê funcionou ao chamar a função, mas antes não funcionara chamar a variável.

Olá, que bom que consegui te ajudar! Ao reiniciar o jogo você atribuía a nova dificuldade usando o seguinte código dentro da função reiniciar:

let dificuldade = parseInt(prompt("Selecione a dificuldade do jogo: NUMERO'DE 0 A _____' (10 F, 100 M, 1000 D)"));

Ao utilizar let novamente para declarar dificuldade dentro da função, você está criando uma nova variável local que "sombra" a variável externa de mesmo nome. Em resumo, a variável dificuldade dentro da função reiniciar não está alterando a variável externa do mesmo nome. Para corrigir isso, bastava somente remover a palavra-chave let ao redefinir a variável dificuldade dentro da função reiniciar. Porém preferi criar uma nova função para dificuldade para evitar repetições desnecessárias no código.