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

Não consigo fazer o alerta de que minhas chances terminaram.

Estava melhorando meu código do programa de chutar um número, então adicionei o sistema de tentativas, se passar de 3 tentativas, o programa mostra uma mensagem, que não é um alerta, e reinicia o programa, porém não mostra a mensagem de que minhas chances terminaram.

Segue o código que estou usando.


<!DOCTYPE html>
<meta charset="UTF-8">
<body>
  <h1> Acerte o número </h1>
  <input> </input>
  <button>Resposta</button>

  <script>
    var num_maq = 8;  \\ estou usando um número fixo para o teste.
    var input = document.querySelector("input");
      input.focus();

    function verifica() {
      for(var tent = 1; tent < 3; tent++) { 

        if (input.value == num_maq) {

          document.write("<h1>Acertou!</h1>");
          break;
        };

        if (input.value != num_maq) {

          alert("Errou...");
          input.value = "";
          input.focus();
          tent++;
        };

        if (tent >= 3) {

          document.write("<h1>ih doidao kkkkkj cabo as chances fi</h1>");
        };

          tent++;
      };    

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

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

  </script>
</body>
2 respostas
solução!

O problema no código está sendo este for. Perceba que ele está dentro da função verifica, e a função verifica é executada a cada vez que você clica no botão, ou seja, ele sempre reseta a variável tent, e com isso o valor de tent nunca chega a 3, e nunca mostra a mensagem. Além disto, outro erro que acontece é que no for, depois do primeiro loop, você pede para ele incrementar 1 na variável tent: for(var tent = 1; tent < 3; tent++), e depois, quando o usuário erra, também incrementa, ou seja, ele soma duas vezes.

O correto seria fazer da mesma maneira, porém sem o uso do for, assim:

var num_maq = 8; 
     var input = document.querySelector("input");
     input.focus();
     var tent = 0;

    function verifica() {
        if (input.value == num_maq) {
          document.write("<h1>Acertou!</h1>");
          return;
        };

        if (input.value != num_maq) {
          alert("Errou...");
          tent++
          input.value = "";
          input.focus()
        };

        if (tent >= 3) {
          document.write("<h1>ih doidao kkkkkj cabo as chances fi</h1>");
          input.value = "";
          input.focus();

        }; 
    };

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

Perceba que eu declarei a variável tent fora da função, pois se eu declaro dentro, toda vez que eu clico no botão, ele ia começar valendo zero, e nunca ia chegar no 3, gerando o mesmo erro quando tinha o for.

Além disso, quando a pessoa consumir as 3 tentativas, vai ser escrito algo no documento, então não daria para reiniciar, a não ser que você reinicie a página, ou crie um outro botão para um novo jogo, ou não utilize o document.write. Mais pra frente, em outros cursos, você vai ver uma outra forma de escrever coisas na tela, então não se preocupe com isso agora, apenas tente entender o porque seu programa deu erro.

Dica top: Quando estiver dando erro, principalmente nestes programas onde tem um if verificando se um número e maior, menor ou igual a outro, utilize o console.log, na variável, e veja a cada loop ou a cada clique do botão qual o valor que a variável está recebendo, dessa forma fica fácil encontrar o problema.

Espero ter ajudado, qualquer dúvida comenta aqui. Valeu.

Aaah sim, agora entendi... Caraca, eu nem tinha notado os outros erros no código, obrigado mano, tirou minhas dúvidas!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software