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

Me perdendendo em IFs e WHILEs

Boa tarde, gente! Esse código que fiz não funcionou e acho que é porque eu não determinei quando o loop tem que terminar, mas já perdi em tanto {}. Alguém pode me ajudar e talvez simplificar o código? Obrigada!

<meta charset="UTF-8">

<h1>Vamos jogar um jogo de adivinhação!</h1>
Eu pensei em um número e você tem três chances para adivinhar qual é o número.<br>

<input/>
<button>Digite seu palpite e clique aqui</button>

<script>

    var segredo = Math.round(Math.random() * 10);
    var input = document.querySelector("input");
        input.focus();
    var tentativaAtual = 1;

    while(tentativaAtual <= 3){
        function verifica(){
            if(input.value == segredo) {;
                alert("Você acertou!");
        } else{
            alert("Você errou! Tente novamente :)");
            input.focus();
            tentativaAtual++;
            }

            }
        }



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


</script>
2 respostas

Olá, Ita

O seu código está em loop infinito por conta dowhile:

    while(tentativaAtual <= 3){
        function verifica(){
            if(input.value == segredo) {;
                alert("Você acertou!");
        } else{
            alert("Você errou! Tente novamente :)");
            input.focus();
            tentativaAtual++;
            }

            }
        }

O que está acontecendo é que logo que a página é carregada ele começa a verificar quantas tentativas o usuário tem e nunca para. Para corrigir o erro e fazer o código funcionar basta remover o while e trocá-lo por um if`:

<meta charset="UTF-8">

<h1>Vamos jogar um jogo de adivinhação!</h1>
Eu pensei em um número e você tem três chances para adivinhar qual é o número.<br>

<input/>
<button>Digite seu palpite e clique aqui</button>

<script>

    var segredo = Math.round(Math.random() * 10);
    var input = document.querySelector("input");
    input.focus();
    var tentativaAtual = 1;

    function verifica(){
        if (tentativaAtual <= 3) {
            if(input.value == segredo) {
                  alert("Você acertou!");
                  tentativaAtual = 4;
            }else{
                 alert("Você errou! Tente novamente :)");
                    input.focus();
                       tentativaAtual++;
            }  
        } else {
            alert("Suas tentativas acabaram");
       }
    }

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

Note, também, que quando o usuário acerta eu defini o número de tentativa para 4, para "zerar" as tentativas.

Uma boa prática e que vai te ajudar a não se perder nas "{}" é a indentação correta, vou usar o if de exemplo:

        if (input.value == segredo) {
            alert("Você acertou!");
            tentativaAtual = 4;
        }

Se você reparar, a chave é fechada exatamente em baixo do comando em que ela foi aberta (que no caso é o if) e os comando que estão dentro do if ficam sempre um "TAB" à frente e assim no resto do código.

Espero que tenha dado para entender : )

Abraço!

solução!

Obrigada! Ajudou muito! Antes de ler sua resposta, lembrei do "for" e refiz assim:

<meta charset="UTF-8">

<h1>Vamos jogar um jogo de adivinhação!</h1>
Eu pensei em um número e você tem três chances para adivinhar qual é o número.<br>

<input/>
<button>Digite seu palpite e clique aqui</button>

<script>

    var segredo = Math.round(Math.random() * 10);
    var input = document.querySelector("input");
        input.focus();

    for( var tentativaAtual = 1; tentativaAtual <= 3; tentativaAtual++){
        function verifica(){
            if(input.value == segredo) {;
                alert("Você acertou!");
        } else{
            alert("Você errou! Tente novamente :)");
            input.focus();
            input.value = "";
            }

            }
        }



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


</script>