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

Codigo array com tentativas

Boa tarde,

Tentei incrementar ao código um número de chances para acertos, igual ao mostrado no exercicio de login, porém quando o usuário erra o número o programa não deixa mais ele adicionar uma nova tentativa e loopa todo o alert() até zerar as tentativas.

Como posso ajustar esse erro?

Este foi o código que tentei:

<meta charset = "UTF-8">
<h1>Será que consegue saber que número pensei?</h1>
<p>Escoha um número.</p>
<input/>
<button>Dar chute</button>

<script>
    //Função para sortear números
    function sorteia(){
        return Math.round(Math.random()*10);
    }
        function sorteiaNumeros(quantidade){
            var segredos = [];
            var vezes = 1;
            while(vezes<= quantidade){
                var numeroAleatorio = sorteia();
                var achou = false;
                if(numeroAleatorio !== 0){
                        for(var posicao = 0; posicao < segredos.length; posicao++){
                        if(segredos[posicao] == numeroAleatorio){
                            achou = true;
                            break;
                        }
                    }
                    if(achou == false){
                        segredos.push(numeroAleatorio);
                        vezes++;
                    }
                }

            }
            return segredos;
        }

    var segredos = sorteiaNumeros(5); 
    console.log(segredos);
    var escolha = document.querySelector("input");
    var botao = document.querySelector("button");
    var tentativas = 3;
    var totalTentativas = 0;
    escolha.focus();
    //Função para verificar números sorteados com resposta digitada.
    function comparar(){
        var certo = false;
        while(tentativas > totalTentativas){
                for(var posicao = 0; posicao < segredos.length; posicao++){
                if(escolha.value == segredos[posicao]){
                alert("Você ACERTOU, Parabéns!!!");
                certo = true;
                tentativas=totalTentativas;
                break;
                }    
            }
                if( certo == false){
                        alert("Você ERROU. Tente outra vez.");
                        escolha.value = ""
                        escolha.focus();
                        tentativas--;
                        }             
    }
    if(tentativas==totalTentativas && certo == false){
     alert("Suas chances acabaram, recarregue a página."); 
     }  

    }

    botao .onclick = comparar;

</script>
2 respostas
solução!

O problema está neste while, ele vai "loopar" o primeiro número que você chutou, até as tentativas serem iguais ao totalTentativas, ou seja, ele vai apenas levar em consideração o primeiro número que você digitar, e vai ficar verificando ele enquanto(while) tentativas > totalTentativas.

No lugar deste while, tenta colocar apenas um if, pois assim, ele vai verificar apenas uma vez o número, e depois caso o chute esteja errado, ele vai diminuir a tentativa em 1, e você poderá escolher outro número até que acabem as chances.

Muito obrigado, Matheus!

Funcionou perfeitamente agora.