Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] problemas no loop em javascript

Estou tentando fazer um jogo de adivinhação. O objetivo é que o jogo tenha 3 chances, ao final das chances, o script deveria alertar o usuário que não existem mais chances disponíveis e encerrar o loop. Caso o usuário acerte, o jogo teria que alertar que o usuário acertou e especificar quantas tentativas foram necessárias. Porém, estou enfrentando alguns problemas: mesmo acertando, o código segue rodando o loop, na verdade só é possível acertar na primeira tentativa, após isso, o jogo só repete "um pouco mais, quantidades de tentativas restantes" ou o mesmo porém para menos.

Segue abaixo o código:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jogo de adivinhação</title>
</head>
<body>
    <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 numero = sorteio(10);
        console.log(numero);
        var chute = parseInt(prompt("Digite um número!"));
        var tentativas = 0;
        var vezesQueTentou = 0;

        while(tentativas <= 3){
            if(chute == numero){
                vezesQueTentou++
                tentativas++
                alert("Parabéns, você acertou na " + vezesQueTentou + "° tentativa");
                break;
            }
            else if(chute < numero){
                tentativas++
                alert("um pouco mais! " + (3 -  tentativas) + " restantes")
                if(tentativas == 3){
                    alert("acabaram as chances.")
                    break;
                }
            }
            else if(chute > numero){
                tentativas++
                alert("um pouco menos! " + (3 -  tentativas) + " restantes")
                if(tentativas == 3){
                    alert("acabaram as chances.")
                    break;
                }
            }
            parseInt(prompt("digite um número!"));
        }



    </script>
</body>
</html>
1 resposta
solução!

Tenta fazer da seguinte forma:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>jogo de adivinhação</title>
</head>
<body>
    <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 entre 0 e 10, você consegue adivinhar qual é?")

        let numeroSecreto = sorteio(10)
        let tentativas = 0

        console.log('numeroSecreto', numeroSecreto)

        while(tentativas <= 3){
            let chute = parseInt(prompt("Digite um número!"))

            console.log('chute', chute)

            if (chute === numeroSecreto ) {
                tentativas++
                alert("Parabéns, você acertou na " + tentativas + "° tentativa");
                break;
            } else if (chute < numeroSecreto) {
                tentativas++
                alert("um pouco mais! " + (3 -  tentativas) + " restantes")

            } else if (chute > numeroSecreto) {
                tentativas++
                alert("um pouco menos! " + (3 -  tentativas) + " restantes")
            } 

             if (tentativas === 3) {
                alert("acabaram as chances.")
                break;
             }
        }
    </script>
</body>
</html>

Você acabou definindo a atribuição do chute fora do loop, então o valor era pego apenas uma vez, já que as tentativas estão dentro de um loop, você pode incrementar a tentativa assim que o usuário digitar o chute e este valor ser armazenado na variável chute. E no final do loop sempre verificar se as tentativas atingiram o limite de 3 tentativas, assim irar a mostrar a mensagem 'acabaram as chances.' e a condição do loop passará a ser falsa, encerrando-o. Perceba também que você estava executando 'vezesQueTentou++' apenas quando o usuário acertasse, assim o valor sempre seria 1, troquei 'vezesQueTentou' pelo próprio número de tentativas gastas.

Não sei se esse era o resultado que você queria, mas espero ter ajudado, tentei não sair muito da sua lógica para o código ficar autoexplicativo.