2
respostas

Resultado inesperado

o else if e else desse código não funcionam corretamente. quando um dos dois é "acionado", todas as tentativas programadas são esgotadas uma a uma, sem que o usuário possa inserir um novo chute. alguém pode me dizer o que estou fazendo de errado nesse código? obrigado!

<meta charset="UTF-8">

<script>

    function pulaLinha() {
        document.write("<br><br>")
    }

    function mostra(texto) {
        document.write(texto)    
        pulaLinha()
    }

    var numeroLimite = 27;
    mostra("<h3>Acerte o número secreto entre 0 e " + numeroLimite + "! Qual é o seu palpite?</h3>");

    var numeroSecreto = Math.round(Math.random() * numeroLimite);

</script>

<input/>
<button> Chute </button>

<script>

    mostra("<br>" + numeroSecreto)
    var chute = document.querySelector("input");
    chute.focus();

    function verifica() {

        var contador = 1
        var limiteTentativas = 4

        while(contador <= limiteTentativas) {

            if(chute.value == numeroSecreto) {
                    mostra("Uau! Você acertou! ")
                    break;

            } else if (chute.value > numeroLimite || chute.value < 0 || isNaN(chute.value)) {
                alert("Tente um número de 0 a " + numeroLimite + ".")
                chute.value = "";
                chute.focus();

            } else {
                if(chute.value < numeroSecreto) {
                    if(limiteTentativas - contador != 0){
                        alert("Poxa, você errou. O número secreto é MAIOR que " + chute.value + ". Restam " + (limiteTentativas - contador) + " tentativas.")
                    } else {alert("Poxa, você errou. O número secreto é MAIOR que " + chute.value + ". Você não possui mais tentativas.")}

                } else if(chute.value > numeroSecreto) {
                    if(limiteTentativas - contador != 0){
                        alert("Poxa, você errou. O número secreto é MENOR que " + chute.value + ". Restam " + (limiteTentativas - contador) + " tentativas.")
                    } else {alert("Poxa, você errou. O número secreto é MENOR que " + chute.value + ". Você não possui mais tentativas.")}
                }
                contador++
                chute.value = "";
                chute.focus();
            }
        }    

        if(contador == limiteTentativas + 1) {
        mostra("Você não conseguiu adivinhar o número secreto. O número secreto era " + numeroSecreto + ".")
        }

    }   

    var cliqueBotao = document.querySelector("button");
    cliqueBotao.onclick = verifica;

</script>
2 respostas

Oi Eric

O while realmente vai executar até terminar as tentativas, do jeito que foi programado você não terá chance de mudar o valor até a próxima verificação. Para fazer o que quer você teria que parar o laço e pedir o valor e depois continuar, pra esse tipo de situação seria melhor o uso do prompt, por exemplo:

var contador = 5;

  while (contador >= 0) {
    var chute = prompt('informe um número');
    if (chute == 123) {
      alert('parabéns');
      break;
    }
    contador--;
  }

Porém você pode fazer de uma forma diferente sem utilizar o while, a cada click você executa um função sem o while diminuindo as tentativas. Algo assim:

<meta charset="UTF-8" />

<input />
<button>Chute</button>

<script>
  var chute = document.querySelector('input');
  var contador = 5;

  function verifica() {
    if (contador > 0) {
      if (chute.value == 123) {
        alert('parabéns');
        contador = 5; // zerar as tentativas
      } else {
        contador--;
        alert('Errou');
      }
    } else {
      alert('Acabaram as tentativas');
    }
  }

  var cliqueBotao = document.querySelector('button');
  cliqueBotao.onclick = verifica;
</script>

Obrigado pela ajuda, Gui!

Este código é, na verdade, uma tentativa de evolução de um outro código desenvolvia em atividades anteriores. Tentei implementar o uso do input e do button para substituir o uso do prompt. O código anterior a este funcionava perfeitamente. Preciso aprender algo novo para saber como otimizá-lo da maneira correta. Obrigado!