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

Repetição do Alert

Gente to com um problema no meu codigo, eu quero inserir 4 tentativas no jogo do advinha e se errar todas ele me avisa que eu errei. O codigo funciona o problema é que quando eu erro ele nao me da a chance de tentar novamente e continua a repetir o alert. O que sera que pode estar de errado?

<meta charset="UTF-8">

<input/>
<button>descubra meu segredo</button>

<script>




    function sorteado() {

        return Math.round(Math.random() * 10);

    }

    function sorteiaNumeros(quantidade) {

        var numeroSorteados = [];

        var contador = 1;

        while(contador <= quantidade) {


            var numeroAleatorio = sorteado();

            var repetido = false;


            for (var posicao = 0; posicao < numeroSorteados.length; posicao++) {

                if(numeroSorteados[posicao] == numeroAleatorio) {


                    repetido = true;
                    break;
                }

            }

            if(repetido == false) {

                numeroSorteados.push(numeroAleatorio);
                contador++

            }


        }

        return numeroSorteados;
    }

    var numeroSorteados = sorteiaNumeros(4)

    var input = document.querySelector("input");

    input.focus();

    var tentativasAtual = 1;
    var maxTentativas = 4;


        function verifica() {

            var achou = false;


                for(var posicao = 0; posicao < numeroSorteados.length; posicao++) {

                    while(tentativasAtual <= maxTentativas) {

                        if (input.value == numeroSorteados[posicao]) {

                        alert("ACERTOU");

                        tentativasAtual = maxTentativas;
                        achou = true;


                            } else {



                                    if(tentativasAtual == maxTentativas) {

                                        alert("ERROU! numero de tentativas excedido!")

                                            } else {

                                                alert("Numero invalido, tente novamente")                                    
                                        }    
                                }    
                                    tentativasAtual = tentativasAtual + 1    

                            }

                        }    
                    }





                input.value = "";
                input.focus();

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

        console.log(numeroSorteados)

</script>
2 respostas
solução!

Oi Rayan,

Você pode fazer a lógica das tentativas sempre que clicar no botão pra verificar e incrementar 1 as tentativas. Você não precisa do WHILE para fazer a lógica do máximo de tentativas.

E outro detalhe, se você deixar os alertas dentro do FOR eles sempre serão acionados, vi que você criou uma variável achou e com base nessa lógica dentro do FOR você vai criar somente o IF alterando o valor dela, e os IFs com os alertas ficarão fora do FOR para que sejam acionados somente uma vez.

O código utilizando o que comentei e com base no seu código vou deixar aqui, repare nos comentários também:

function verifica() {

    // O If aqui evita a execução de toda a função se as tentativas forem excedidas
    if (tentativasAtual <= maxTentativas) {
      var achou = false;

      for (var posicao = 0; posicao < numeroSorteados.length; posicao++) {
        if (input.value == numeroSorteados[posicao]) {
          achou = true;
        }
      }

      if (achou) {
        alert('ACERTOU');
        tentativasAtual = 1; // Aqui se acertou você pode revalidar as tentativas
      } else {
        alert('Numero invalido, tente novamente');
      }
    } else {
      alert('ERROU! numero de tentativas excedido!');
    }

    // Aqui você irá incrementar a tentativa sempre que clicar no botão
    tentativasAtual++;
  }

Muito obrigado!