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

Jogo do chute

Olá! Fiz o exercício de montarmos o código em que é sorteado um número e precisamos acertar com 3 tentativas. Porém, aparece a frase 3 vezes.

poxa, nao foi dessa vezO que devo mudar pra que quando acertar, apareça apenas 1 frase? "Você errou" ou "você acertou".

<!DOCTYPE html>
<meta charset="UTF-8">
<script>

    function mostra (frase) {
        document.write (frase + "<br>");
    }

    function pulaLinha () {
        document.write ("<br>");
    }
    var numero = Math.round(Math.random() * 10);

    var tentativas = 1;

    while (tentativas <= 3) {

        var chute = parseInt(prompt("Qual seu chute?"));

            if (chute == numero) {
                mostra ("Parabéns!!!! Você é genial :)");
                break;
            } else {
                mostra ("Poxa, não foi dessa vez :(");

            }

            tentativas++;
    }

    mostra ("Fim!");

</script>
3 respostas

Oi Letícia

Você pode criar uma variável de acerto e inicia-la como false e retirar a mensagem de erro de dentro do while assim:

<!DOCTYPE html>
<meta charset="UTF-8" />
<script>
  function mostra(frase) {
    document.write(frase + '<br>');
  }

  function pulaLinha() {
    document.write('<br>');
  }
  var numero = Math.round(Math.random() * 10);

  var tentativas = 1;

  var acertou = false;

  while (tentativas <= 3) {
    var chute = parseInt(prompt('Qual seu chute?'));

    if (chute == numero) {
      mostra('Parabéns!!!! Você é genial :)');
      acertou = true;
      break;
    }

    tentativas++;
  }
  if (acertou === false) {
    mostra('Poxa, não foi dessa vez :(');
  }

  mostra('Fim!');
</script>
solução!

meu prompt de entrada de número não repete quando eu erro o número, pra colocar o numero de novo eu tenho que recarregar a página.

<meta charset="UTF-8">
<script>

    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {
        return Math.round(Math.random() * n);
    }

    var numeroPensado = sorteia(5);

    var chute = parseInt(prompt("Pensei em um número, qual você acha que é?"));

    var tentativas = 1;

    while(tentativas <= 3) {
     if(chute == numeroPensado) {
        mostra("Uau! Você acertou.");
        break;
        } else {
            if(chute > numeroPensado) {
                mostra("Você errou! Seu chute é maior que o número pensado!");
                    break;
            } else {
                mostra("Você errou! Seu chute é menor que o número pensado.");
                    break;
            } 
        }
        tentativas++;
    }
</script>

Oi Joice

Você precisa mudar o prompt para dentro do while, é necessário solicitar todas as vezes o valor novamente, mas tem outros detalhes:

  • Se você inserir um break quando o usuário errar o chute você irá sair do while
  • E como o prompt, alert bloqueia algumas exibições o mostra não será eficaz para exibir a mensagem de erro.

Fiz algumas alterações no seu código justamente do que pontuei e ele ficaria assim para funcionar como quer:

<meta charset="UTF-8">
<script>

   function pulaLinha() {
      document.write("<br>");
   }

   function mostra(frase) {
      document.write(frase);
      pulaLinha();
   }

   function sorteia(n) {
      return Math.round(Math.random() * n);
   }

   var numeroPensado = sorteia(5);

   var tentativas = 1;

   while (tentativas <= 3) {

      var chute = parseInt(prompt("Pensei em um número, qual você acha que é?"));

      if (chute == numeroPensado) {
         mostra("Uau! Você acertou.");
         break;
      } else {
         if (chute > numeroPensado) {
            alert("Você errou! Seu chute é maior que o número pensado!");
         } else {
            alert("Você errou! Seu chute é menor que o número pensado.");
         }
      }
      tentativas++;
   }
</script>

A alteração para resolução foi baseada no seu código.