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

Dando dicas.

Também vim para perguntar o motivo pelo qual não aparecia o texto a cada tentativa e já tive a resposta que era só mudar para alert. Gostaria então de contribuir com a implementação do código que é o motivo de eu querer que aparecesse, pois a cada tentativa era dado uma dica se o número era maior ou menor do que o digitado. O código então fica assim:

<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 (10);

    var tentativas = 1;



    while (tentativas <=3) {

        var chute = parseInt(prompt("Já pensei. Qual você acha que é?"));

        if(chute == numeroPensado) {

            alert("Uau! Você acertou, pois eu pensei no " + numeroPensado);
            break;

        } else {

            if (chute > numeroPensado) {
                alert ("O número que eu tinha pensado é menor do que este")
            } else {
                alert ("O número que eu tinha pensado é maior do que este")
            }
        }
        tentativas++;
    }

    if(chute != numeroPensado) {

    alert("Você ERROU, o número pensado era " + numeroPensado);

    }        


    mostra ("FIM!")

</script>

gostaria de aproveitar para perguntar se tem alguma forma de deixar mais enxuto o código, mas com as mesmas funções.

6 respostas

Na minha opinião seu código está bem elaborado. Parabéns.

solução!

Boa tarde, Everton! Como vai?

Obrigado por compartilhar a sua solução aqui no fórum com toda a comunidade Alura! Assim todos crescemos juntos!

Sobre o seu código, ele está realmente bem estruturado! Contudo, gostaria de propor um pequeno desafio!

Fazer as mesmas funcionalidades, mas sem utilizar a palavra reservada break para parar o laço de repetição! Tome esse desafio como uma forma de treinar ainda mais os conhecimentos que vc está adquirindo!

Se precisar de alguma ajuda é só comentar aqui!

Grande abraço e bons estudos, meu aluno!

Olá Gabriel. Cheguei a uma solução, mas fiquei com um pé atrás pois me pareceu de certa forma uma trapaça. Para resolver, apenas troquei o break pela atribuição de um valor à variável tentativas maior do que a proposta para manter o loop, ficando assim:

        if(chute == numeroPensado) {

            alert("Uau! Você acertou, pois eu pensei no " + numeroPensado);
            tentativas = 4;

Como disse, me pareceu um tanto quanto trapaça de minha parte e gostaria de saber se foi mais ou menos nisso que pensou quando propôs o desafio? E se não, poderia me dar uma dica de qual funcionalidade eu poderia utilizar para soluciona-lo?

Está correto, Everton! É isso aí mesmo! E pode ficar tranquilo, isso não é trapaça alguma! Vc apenas utilizou o seu conhecimento para para o laço sem o break! Inclusive, seria exatamente isso que vc faria caso o break não existisse! Contudo, essa solução não é a ideal por dois motivos!

1) Ela não é semântica! Pois ao final do laço tentativas valerá 4, como se o usuário tivesse esgotado todas as tentativas possíveis. O que não é verdade!

2) Ela não tem um bom grau de manutenibilidade. Se vc observar, uma vez que a quantidade de tentativas mudar, vc terá que mudar a condição do while e tbm terá que mudar o valor atribuído à variável tentativas dentro do seu if.

Esses são 2 pontos muito importantes de serem observados pelo programador quando desenvolve seu código. Afinal de contas, outras pessoas terão que ler, entender e manter o código que desenvolvemos.

Como vc resolveria cada um dos pontos que citei?

Olá Gabriel Leite.

Gostaria da sua opinião referente a forma como implementei a condição de continuação do loop no código do jogo de adivinhação. Segue o código:

<meta charset="UTF-8">
<script>
// *****************************FUNCOES*****************************//
    function pulaLinha(n) {
        if (n > 0) {
            for (var count = 1; count <= n; count++) {
                document.write("<br>")
            }
        }
    }

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

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

// *****************************IMPLEMENTACAO*****************************//
    var numeroPensado = sorteia(10);
    var tentativas = 3;
    var contador = 1;
    var continua = true;

    while (continua) {

        var chute = parseInt(prompt("Já pensei. Qual você acha que é "));

        if (chute == numeroPensado) {
            mostra("Você ACERTOU na " + contador + "ª tentativa, o número pensado era " + numeroPensado);
            continua = false;
        } else {
            alert("Você ERROU na " + contador + "ª tentativa");
        }

        if (continua == true && contador < tentativas) {
            contador++;
        } else {
            continua = false;
        }
    }

    mostra("Fim");
</script>

Olá Gabriel. Pensei aqui e as respostas são: 1 - ao fim do código teria que reatribuir o valor de tentativas para o seu valor inicial, o que pioraria ainda mais a manutenção do código caso o número de tentativas fosse alterado. 2 - Poderia escrever o código assim:

            alert("Uau! Você acertou, pois eu pensei no " + numeroPensado);
            tentativas = tentativas+1;

E depois, no final, reatribuir o valor de tentativas para o valor inicial, caso o programa continuasse e precisasse manter aquele valor. Mas como disse acima, seria extremamente inconveniente em termos de manutenção, correto? PS: Ricardo Messias, muito legal seu código e a forma como segmentou as funções e o programa em si, vou adotar uma forma de organização semelhante em meus estudos!