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

Jogo Adivinha - Bug no contador de tentativas.

Olá, bom momento.

Criei um código JavaScript para o exercício do "Jogo de Adivinha", mas estou com um problema. O que o código faz em resumo (Código na integra a baixo):

  • Gera um número secreto aleatório
  • Recebe um palpite do jogador
  • Se o chute estiver certo, exibe o resultado
  • Se o chute estiver errado, soma 1 ao contato de número de tentativa do jogador, exibe uma mensagem dizendo se o número secreto é maior ou menor do que o número chutado e permite que o jogador tente mais uma vez
  • Quando o jogador acerta, o código imprime o resultado e o número de tentativas que o jogador levou.

Problema: Quando o chuta um número MAIOR do que o número secreto e, em seguida, um número MENOR do que o número secreto, o contador de tentativas não funciona adequadamente. Exemplo: Digamos que o número secreto seja 5. O jogador chuta 10, depois 2, depois 6, depois 4 e aí acerta o 5. O programa deveria mostrar que foram 5 tentativas, mas ele mostra 3.

Como corrijo o código para que ele conte corretamente p número de tentativas do jogador?

Código na integra:

<meta charset="UTF-8">

<script>

    function imprime(textoRecebido) { 
        document.write("<big>"+textoRecebido+"</big><br>");
    }

    var numeroSecreto = Math.round(Math.random() * 10);
    var chute = parseInt(prompt("Tente adivinhar o número secreto."));
    var nTentativas = 1;

    console.log(numeroSecreto);

    if(chute == numeroSecreto) {
    imprime("<h1>Incrível! Você acertou de primeira!</h1>");
    } 

    else {
        while(chute!=numeroSecreto) {

            nTentativas = nTentativas+1

            if(chute>numeroSecreto) {
                chute = parseInt(prompt("Você errou. O número secreto é MENOR do que o número que você chutou. Tente novamente."));
            }

            if(chute<numeroSecreto) {
                chute = parseInt(prompt("Você errou. O número secreto é MAIOR do que o número que você chutou. Tente novamente."));
            }

        }

        if(nTentativas>3) {
            imprime("<h2>Parabéns... Você <i>finalmente</i> acertou.</h2>");
            imprime("O número secreto era "+numeroSecreto+".");
            imprime("Você precisou de "+nTentativas+" tentativas pra acertar.");
        }

        else {
            imprime("<h2>Parabéns! Você acertou.</h2>");
            imprime("O número secreto era "+numeroSecreto+".<br>");
            imprime("Número de tentativas: "+nTentativas);
        }

    }

</script>

(Ele exibe o número secreto no console após a primeira tentativa pra ajudar a testar)

Qualquer ajuda é bem-vinda. Obrigado.

1 resposta
solução!

Olá, tudo bem?

Quando o jogador erra um palpite, o programa entra no loop, incrementa uma tentativa e caso seja menor que o numero secreto, ele pausa no primeiro if, e pergunta novamente, se for maior, agora ele para no segundo if, antes de voltar ao loop e incrementar mais uma tentativa. Acho que colocar o incremento de tentativa dentro de cada if ajudaria, ou usar if/else, que o programa le um ou outro, como são 2 ifs, ele está lendo um de cada vez.