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!