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

[Dúvida] Projeto jogo de advinhação

Boa noite, pessoal. Criei esse código para o jogo de advinhação, mas quando eu erro o número, ele não aparece a mensagem. Algém poderia me ajudar por favor? Segue o código.

<meta charset="UTF-8">

<script>

    function pulaLinha() {

        document.write("<br>");
        document.write("<br>");
}

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
}

var numeroPensado = Math.round(Math.random() * 10);

var tentativas = 1;

    while(tentativas <= 3) {

        var escolha = parseInt(prompt("Escolha um número!"));

            if(escolha == numeroPensado) {

                mostra("Boa, o número era:  " + numeroPensado);
                    break;

            } else {

            mostra("Errou feio, errou rude!");
            }

            tentativas++;
    }

mostra("FIM");
</script>
6 respostas

Seguindo a lógica do seu código a mensagem de erro só é exíbida após errar 3 vezes, isso está funcionando perfeitamente.

Para exibir a mensagem de erro a cada tentativa incorreta, você pode usar o método alert() em vez de document.write(). O método alert() exibe uma caixa de diálogo com a mensagem de erro e pausa a execução do script até que o usuário feche a caixa de diálogo.

Um exemplo:

//Crie a função

function mostraAlerta(frase) {
    alert(frase); // Exibe a mensagem em uma caixa de diálogo
}

//Dentro do seu bloco else substitua e/ou adicione

if (escolha == numeroPensado) {
    mostra("Boa, o número era:  " + numeroPensado);
    break;
} else {
    mostra("Errou feio, errou rude!");
    mostraAlerta("Errou feio, errou rude!")
}

Agradeço pela resposta, Rian. Mas a intenção seria manter a mensagem no HTML mesmo, você saberia dizer o que fazer pra que apareça depois de cada erro dessa forma, por favor?

Olá Bruna,

Tem uma solução! Pra situações como essa o segredo é você criar uma variável de apoio para armazenar o resultado do teu while. Em seguida, você imprime essa variável. Vamos entender melhor:

Da maneira que você estruturou o código, toda vez que ele faz uma interação no loop do while, sendo positivo (1º if) ou negativo (2º if) o sistema sempre executa o mostra. Por esse motivo, a cada tentativa errada ele chama a função mostra.

SOLUÇÃO

1) Criar uma variável de apoio. Para este exemplo eu chamei de achou;

2) Iniciar a variável achou fora do while e com valor atribuido false: var achou = false;

3) Dentro do while, na estrutura condicional if, você** remove o mostra** e atribui a variável achou o valor true para condição if positivo e false para condição if negativo;

4) Na condição if positivo você mantém o break;

5) E o incremento por meio da variável tentativas deve ser mantido da mesma forma como você criou (dentro do while e fora do if);

Desta forma, a cada incremento no while o valor da variável achou será alterado conforme correspondência com a condição if. Ao término do while, sua variável achou terá um valor e você resgatará esse valor por meio de uma nova condição if. Veja o exemplo nas imagens abaixo:


Espero ter colaborado! Estarei a disposição. Para eventuais dúvidas não hesite em consultar!!!

Se entender que a sua dúvida foi sanada, por gentileza marque esse post como solucionado.


figura1_tela_dividida_esquerda_navegador_e_console_executando_programa_com_resposta_positiva_e_a_direita_o_vccode_exibindo_o_codigo

figura2_tela_dividida_esquerda_navegador_e_console_executando_programa_com_resposta_negativa_e_a_direita_o_vccode_exibindo_o_codigo

Olá, Adriano. Agradeço pela disposição e pela resposta. Mas pelo o que eu entendi, se a pessoa errar na primeira tentaiva o jogo acaba. A intenção é permitir que ele tenha as outras, mas com a mensagem de erro aparecendo.

solução!

Oi Bruna, pelo que eu entendi você quer o "pop Up" com a mensagem, além de manter as mensagens no HTML. Não sei se é o melhor modo, mas adicionei o alert(), além do mostra().

Print com a alteração do seu codigo

Isso, seria justamente o que eu queria. Também não acho ser a melhor das soluções, mas seria pra manter igual ao modelo do professor. Agradeço pela resposta.