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

A mensagem de erro não é exibida (Jogo da Adivinhação)

O meu código só exibe a mensagem quando eu acerto o número secreto, mas nada quando eu erro, alguém poderia me dizer o que há de errado no meu código?

<meta charset="UTF-8">
<h1>Jogo da advinhação!</h1>
<input/>
<button>Veja se você acertou!</button>

<script>

    function sorteia() {

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

    }

    function sorteiaNumeros(quantidade){

         var numero = 1;
         var segredos = [];

         while(numero <= quantidade) {

              var numeroAleatorio = sorteia();
              var achou = false;

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

                 if(segredos[posicao] == numeroAleatorio) {
                   achou = true;
                   break
                 }
              }

              if (achou == false) {
                  segredos.push(numeroAleatorio);
                  numero++;
              }
         }

         return segredos;
    }

    var segredos = sorteiaNumeros(3);
    var input = document.querySelector("input");
    var achou = false;

    function verifica() {

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

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

             achou = true;
             alert("Você Acertou!");
             break;

          }
              if(achou == false){

                 alert("Você Errou!");
              }
       }

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

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

    button.onclick = verifica;


</script>
6 respostas

Bom dia Thiago, pode tentar alterar o trecho de código do if para:

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

          if(input.value == segredos[posicao]) {
             alert("Você Acertou!");
          } else {
                 alert("Você Errou!");
              }
       }

Faça esse teste pf e me fale aqui se resolveu!

Abraços

Problema Resolvido! Obrigado, Guilherme!

Olá Thiago! Dá uma olhada na sua função verifica(). Você deve fechar o for logo após o break. Também precisa garantir que a variável achou seja sempre false quando clicar no botão. Deve ficar assim:

    function verifica() {
      var achou = false;
      for(var posicao = 0; posicao < segredos.length; posicao++) {
          if(input.value == segredos[posicao]) {
             achou = true;
             alert("Você Acertou!");
             break;
          }
      }
      if(achou == false){
          alert("Você Errou!");
      }
      input.value = "";
      input.focus();
    }

Dá uma olhada no código acima e qualquer dúvida é só perguntar.

Abraços e sucesso nos estudos!

Bom, o problema da mensagem de erro foi resolvido mas em alguns casos as duas mensagens estão aparecendo, uma após a outra. meu código está assim:

<meta charset="UTF-8">
<h1>Jogo da advinhação!</h1>
<input/>
<button>Veja se você acertou!</button>

<script>

    function sorteia() {

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

    }

    function sorteiaNumeros(quantidade){

         var numero = 1;
         var segredos = [];

         while(numero <= quantidade) {

              var numeroAleatorio = sorteia();
              var achou = false;

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

                 if(segredos[posicao] == numeroAleatorio) {
                   achou = true;
                   break
                 }
              }

              if (achou == false) {
                  segredos.push(numeroAleatorio);
                  numero++;
              }
         }

         return segredos;
    }



    var segredos = sorteiaNumeros(3);
    var input = document.querySelector("input");

    function verifica() {
      var achou = false;
      for(var posicao = 0; posicao < segredos.length; posicao++) {

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

             alert("Você Acertou!");
             break;
          }
        }

        if(achou == false){
          alert("Você Errou!");
      }

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

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

    button.onclick = verifica;


</script>
solução!

Thiago, dentro do primeiro if da função verifica() você deve deixar a instrução achou = true. Veja o código que passei pra você:

    function verifica() {
      var achou = false;
      for(var posicao = 0; posicao < segredos.length; posicao++) {
          if(input.value == segredos[posicao]) {
             achou = true;
             alert("Você Acertou!");
             break;
          }
      }
      if(achou == false){
          alert("Você Errou!");
      }
      input.value = "";
      input.focus();
    }

Sim, foi isso mesmo, obrigado pela ajuda!