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

Usando o while

Olá pessoal!

No desafio proposto para esta aula, ao invés de apenas dizer se o número aleatório gerado pelo computador era MAIOR ou MENOR do que o número chutado por nós, resolvi, também, imprimir o número de vezes que o usuário chutou antes de acertar o valor "escolhido" pelo computador.

Para isso usei o while, conforme abaixo:

<meta charset="UTF-8">

<script>

    function exibeTitulo(titulo) {
    document.write("<h1>"+titulo+"</h1>");
    }

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

    function mostra(frase) {
    document.write("<p>"+"<big>"+frase+"</big>"+"</p>");
    pulaLinha();
    }

    exibeTitulo("Jogo de Adivinhação");

    var aleatorio100;
    var chute;
    var cont;

    cont = 1;
    aleatorio100 = Math.round(Math.random() * 100);
    chute = parseInt(prompt("Escolha um número entre 1 e 100"));

    if(chute == aleatorio100){
        mostra("Parabéns! Você acertou em "+cont+" tentativas");
    }else{
        while(chute != aleatorio100){
            cont = cont + 1;
            if(chute > aleatorio100){
                chute = parseInt(prompt("Escolha um número MENOR"));
            }else{
                chute = parseInt(prompt("Escolha um número MAIOR"));
            }
        }
        mostra("Parabéns! Você acertou em "+cont+" tentativas"); 
    }
</script>

Aparentemente tudo funcionou bem.

Porém, se o usuário desiste do jogo e quer trocar de página no navegador, não consigo fazer o navegador parar de exibir as perguntas!!

Como criar a opção de desistência?

Obrigado.

3 respostas

Hehehe, bom ponto Ricardo. Vou te dar a ideia, mas não o código, ok? Aí você tenta implementar por aí e qualquer dúvida, vai avisando...

Uma forma simples é você estabelecer a seguinte regra. Se ele chutar um número negativo, é sinal de que ele quer desistir da brincadeira. Você vai precisar forçar a interrupção do while então se ele informar um número negativo. Uma única dica que vou dar aqui: você vai precisar do break.

solução!

Bom, Ricardo, fiz apenas uma pequena alteração no seu código para realizar o que você quer...

Você deve adicionar mais uma condição ao laço de repetição para indicar o seu término. Para isso você pode simplesmente testar o valor da variável chute com a função isNaN(). Essa função serve para verificar se o valor contido em um variável NÃO é um número. Nesta solução, ao usuário digitar algum caractere que não seja número, ou clicar no cancelar, o laço de repetição se encerra. Como disse, é uma solução simples, despretensiosa, que usa o seu código como base.

var casoSejaNumero = !isNaN(chute);
while (casoSejaNumero  && chute != aleatorio100) {
    ...
}

Ainda, para que a mensagem após o laço não fique fixa, adicionei uma condição, semelhante ao que você já faz, para restringir a exibição da mensagem somente em caso de acerto.

if (chute == aleatorio100) {
    mostra("Parabéns! Você acertou em "+cont+" tentativas"); 
}

Obrigado Adriano e Geison, duas propostas bem distintas que pretendo implementar. Atenciosamente Ricardo