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

[Dúvida] [PROJETO] Erro no Código final

Bom dia, estou com um erro em meu código. Quando escrevo um número com mais de 1 casa, acontece um erro no desafio que ele finaliza automaticamente antes das 10 tentativas (que seria a proposta)

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

alert('Boas vindas ao jogo do número secreto');
let numeroMaximo = 5000;
let numeroSecreto = parseInt(Math.random() * numeroMaximo + 1);
let chute;
let tentativasMax = 10;
let tentativas = 1;
console.log(numeroSecreto);


if (tentativas <= tentativasMax) {
    while (chute != numeroSecreto) {
        if (chute > tentativasMax) {
            break;
        } else {
            chute = prompt(`Escolha um numero entre 1 e ${numeroMaximo}`)
        }

        if (chute == numeroSecreto || tentativas > tentativasMax) {
            break;
        } else {
            if (chute > numeroSecreto) {
                alert(`O número secreto é menor que ${chute}`);
            } else {
                alert(`O número secreto é maior que ${chute}`);
            }
        }
        tentativas++;
    }
}

let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa'

if (chute == numeroSecreto) {
    alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} ${palavraTentativa}!`);
} else {
    alert(`Você ultrapassou a quantidade de tentativas ${tentativasMax}.`);
}

setTimeout(() => {
    location.reload();
}, 1000);

1 resposta
solução!

Oi, Gabriel! Tudo bem?

Para o nosso jogo funcionar como o esperado devemos gerar o número secreto dentro do loop while, de forma que, a cada novo jogo, um número diferente será escolhido.

Somado a isso, devemos mudar a condição do loop para enquanto (o chute não for igual ao número secreto e ainda temos tentativas restantes), pois devemos garantir que o loop continue enquanto o chute estiver errado e ainda tivermos tentativas disponíveis.

Podemos também adicionar uma verificação para garantir que o valor inserido seja um número válido, usaremos, então, o isNaN(chute) para verificar isso. Essa mudança evita problemas caso o usuário insira algo que não seja um número, de forma que, se o aluno inserir algo inválido, o jogo mostrará uma mensagem pedindo um número válido e continuará.

Por fim, uma sugestão para a mensagem final de jogo é incluir o número secreto, o número de tentativas e a palavra "tentativa" ou "tentativas" corretamente, tornando a mensagem mais informativa, fornecendo ao aluno o número correto e quantas tentativas foram feitas.

Deixo abaixo o código com as alterações:

alert('Boas vindas ao jogo do número secreto');
let numeroMaximo = 5000;
let tentativasMax = 10;
let tentativas = 1;

if (tentativas <= tentativasMax) {
    let numeroSecreto = parseInt(Math.random() * numeroMaximo + 1);
    let chute;

    while (chute != numeroSecreto && tentativas <= tentativasMax) {
        chute = parseInt(prompt(`Escolha um número entre 1 e ${numeroMaximo}`));

        if (isNaN(chute)) {
            alert('Por favor, insira um número válido.');
        } else if (chute > numeroSecreto) {
            alert(`O número secreto é menor que ${chute}`);
        } else if (chute < numeroSecreto) {
            alert(`O número secreto é maior que ${chute}`);
        }

        tentativas++;
    }

    let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';

    if (chute == numeroSecreto) {
        alert(`Isso aí! Você descobriu o número secreto ${numeroSecreto} com ${tentativas - 1} ${palavraTentativa}!`);
    } else {
        alert(`Você ultrapassou a quantidade de tentativas (${tentativasMax}). O número secreto era ${numeroSecreto}.`);
    }
}

setTimeout(() => {
    location.reload();
}, 1000);

Espero ter ajudado a resolver o problema e que goste das sugestões de melhoria! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

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