1
resposta

Consolidando seu conhecimento 1 - Módulo 6

Estou tentando fazer um jogo de adivinhação assim como ensinado pelo professor durante o módulo. Entretanto, o sistema de "chances" não está funcionando, além do laço de repetição. deixo o código abaixo:

<script>
        function pularLinha(){
            document.write("<br>");
        }
        function mostra(frase){
            document.write(frase);
        }
        function sorteio(n){
            Math.round(Math.random() * n)
        }
        alert("estou pensando em um número, você consegue adivinhar qual é?")
        var tentativa = 3;
        var vezesQtentou = 0;
        var numero = sorteio(10);
        console.log(numero);
        while(chute != numero || tentativa != 0){
            var chute = parseInt(prompt("chute um número!"))
            if(chute == numero){
                alert("Parabéns, você acertou ao tentar pela" + vezesQtentou + "° vez");
            }
            else if(chute < numero){
                tentativa = tentativa - 1;
                vezesQtentou++;
                alert("um pouco mais! " + "você tem mais " + tentativa + " chances");
            }
            else if(chute > numero){
                tentativa = tentativa - 1;
                vezesQtentou++;
                alert("um pouco menos! " + "você tem mais " + tentativa + " chances");
            }
    }


    </script>
1 resposta

Oi, João! Tudo bom contigo?

Existem alguns fatores que estão impedindo que o jogo funcione, vamos olhá-los mais de perto?

1 - Para receber o valor sorteado, a função sorteio() precisará retornar o seu número aleatório. Para isso, podemos usar o comando return, desta forma:

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

Quando var numero = sorteio(10); foi lido, a variável número passará a armazenar o valor retornado por sorteio().

2 - Para o laço de repetição funcionar, precisaremos alterar a sua condição, deixando algo assim:

while(tentativa > 0){
    // ... restante do código!
}

Agora, enquanto o número de tentativas for superior a 0, o nosso jogo continuará perguntando ao usuário acerca do número. Ao substituir o símbolo de diferente (!=) pelo de maior que (>), evitamos que a variável tentativa fique com valores negativos;

3 - Caso o usuário acerte o número, o laço de repetição deverá parar, certo? Podemos fazer isso através do comando break, o qual realiza justamente esse processo. Iremos adicioná-lo ao fim da condição que analisa se a variável chute é igual a numero:

if(chute == numero){
  alert("Parabéns, você acertou ao tentar pela " + vezesQtentou + "° vez");
  break
}

Com isso, o seu jogo volta a funcionar, João! Contudo, ainda podemos deixá-lo mais legal, já que, se olharmos com carinho, iremos perceber que há alguns problemas na contagem das tentativas. As modificações abaixo são opcionais, você pode vê-las e adicioná-las em seu código, mas só se quiser!

1 - Remover o decremento da variável tentativa e o incremento de vezesQtentou, deixando-os somente no início do laço de repetição:

while(tentativa > 0){
  var chute = parseInt(prompt("chute um número!"))
  tentativa = tentativa - 1;
  vezesQtentou++;
  // ... restante do código!
}

Assim, as duas variáveis serão alteradas nas duas situações: quando o usuário acertar e quando errar.

2 - Adicionar uma condicional que verifica se o número de tentativas é igual a 0. Caso seja, uma mensagem aparece na tela do usuário e o laço de repetição é interrompido:

else if (tentativa == 0){
    alert("Que pena, você perdeu!")
    break
}

Com todas as modificações que vimos, seu código ficará da seguinte maneira:

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

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

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

    alert("estou pensando em um número, você consegue adivinhar qual é?")

    var tentativa = 3;
    var vezesQtentou = 0;
    var numero = sorteio(10);
    console.log(numero);

    while(tentativa > 0){
        var chute = parseInt(prompt("chute um número!"))
        tentativa = tentativa - 1;
        vezesQtentou++;

        if(chute == numero){
            alert("Parabéns, você acertou ao tentar pela " + vezesQtentou + "° vez");
            break
        }

        else if (tentativa == 0){
            alert("Que pena, você perdeu!")
            break
        }

        else if (chute < numero){
            alert("um pouco mais! " + "você tem mais " + tentativa + " chances");
        }

        else if (chute > numero){
            alert("um pouco menos! " + "você tem mais " + tentativa + " chances");
        }
    }
</script>

João, espero que tenha compreendido minha explicação e gostado das dicas que trouxe! Fico à disposição para ajudá-lo no que for preciso.

Até mais.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.