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

Gostaria de uma opinião sobre o meu código

Gostaria de ter certeza se cumpri o que foi pedido pelo professor, também senti que resolvi com certos improvisos, principalmente na hora de implementar o número limitado de tentativas, aceito sugestões para melhor resolver o exercício. Se é liberado apenas postar dúvidas para quando não consegue fazer funcionar, peço que apaguem o tópico.

<meta charset="UTF-8">

<h2> Você tem 3 chances para acertar o número! </h2>
<input/>
<button>Compare com o meu segredo!</button>

<script type="text/javascript">

    var segredos = [];
    var contador = 1;
    var chances = 0;
    var chances_limite = 3;
    function sorteia(quantidade){
        while(contador <= quantidade){

            var segredo = Math.round(Math.random() * 10);
            var aux = false;
            if(segredo != 0){

                for(var posicao = 0; posicao <= segredos.length; posicao++){

                    if(segredos[posicao] == segredo){

                        aux = true;
                        break;
                    }
                }
                if(aux == false){
                    segredos.push(segredo);
                    contador++;
                }
            }    
        }
    }

    function verifica(){

        for(var posicao = 0; posicao < segredos.length; posicao++){

            var acertou = false;

            if(input.value == segredos[posicao]){

                alert("Você ACERTOU!!!");
                acertou = true;
                window.location.reload();
                // esta função atualizar a página (F5) automaticamente
            }
        }    
        if(acertou == false){

            alert("Você ERROU!!!");
            chances++;
        }
        if(chances == chances_limite){
            alert("Você perdeu!")
            window.location.reload();
        }
        // Apaga o texto digitado pelo usuário.
        input.value = "";
        // Seleciona (foca) no campo de texto (input) para que o usuário não precisa ficar clicando.
        input.focus();
    }

    sorteia(5);
    var input = document.querySelector("input");
    input.focus();
    var button = document.querySelector("button");
    /* Você estará chamando a função verifica() antes que o usuário clique no botão. E mais do que isso, o retorno da função será atribuído à button.click. Como a função verifica() não retorna nada, o que ficará armazenado em button.click será undefined. Daí, quando alguém clicar no botão nada acontecerá.*/
    button.onclick = verifica;    
    console.log(segredos);

</script>
5 respostas

Olá, João!

Você pode pedir opiniões aqui no fórum sim! Feedback é muito importante pra sabermos se estamos indo no caminho certo, né?

Você usou a função window.location.reload para parar o for, né?

Você chegou a perceber que ele mostra o "Você ERROU!!!"? O código continua a executar até a página ser recarregada...

Pra treinar lógica de programação, que é o objetivo do curso, seria melhor você evitar essa função window.location.reload. Vamos colocar isso como restrição?

Tente novamente, sem o reload, e poste o código como resposta!

Use o break, como você usou na função sorteia!

Então, quando usei a função "window.location.reload", a intenção foi apenas atualizar a página, pois o usuário já acertou a resposta e poderia tentar acertar novamente sem precisar atualizar a página manualmente. O mesmo vale para quando as chances são esgotadas, ele atualiza a página para que o usuário possa tentar novamente, em ambas as situações, com os números sorteados alterados. Eu havia usado o "break" anteriormente mas achava chato ter que ficar apertando F5 para poder tentar novamente, a não ser que exista como sortear os números novamente, sem usar o window.reload.location, porém, não daria na mesma? Obrigado por responder, também acho o feedback importante, quando estamos programando, focamos tanto que as vezes fica difícil perceber pequenos erros que alguém de fora notaria quase que instantaneamente.

solução!

Olá, João!

Já que você tentou sem o reload(), então tá ótimo!

E parabéns por ter encontrado essa função! :)

Mas você percebeu o bug quando você acerta? Ele mostra "Acertou" e "Errou" logo em seguida.

Tem a ver exatamente com um break. Dê uma pensada e poste aqui o que achou!

Nossa, obrigado pela ajuda, como eu apertava muito rápido, não percebia o "Você ERROU!!!" que aparecia após a mensagem de acerto, acredito que agora eu tenha conseguido resolver o problema ainda usando o "window.location.reload".

<meta charset="UTF-8">

<h2> Você tem 3 chances para acertar o número! </h2>
<input/>
<button>Compare com o meu segredo!</button>

<script type="text/javascript">

    var segredos = [];
    var contador = 1;
    var chances = 0;
    var chances_limite = 3;
    function sorteia(quantidade){
        while(contador <= quantidade){

            var segredo = Math.round(Math.random() * 10);
            var aux = false;
            if(segredo != 0){

                for(var posicao = 0; posicao <= segredos.length; posicao++){

                    if(segredos[posicao] == segredo){

                        aux = true;
                        break;
                    }
                }
                if(aux == false){
                    segredos.push(segredo);
                    contador++;
                }
            }    
        }
    }

    function verifica(){

        for(var posicao = 0; posicao < segredos.length; posicao++){

            var acertou = false;

            if(input.value == segredos[posicao]){

                alert("Você ACERTOU!!!");
                acertou = true;
                input.value = "";
                window.location.reload();
                break;

                // esta função atualiza a página (F5) automaticamente
            }
        }    
        if(acertou == false){

            alert("Você ERROU!!!");
            chances++;
        }
        if(chances == chances_limite){
            alert("Você perdeu!")
            window.location.reload();
        }
        // Apaga o texto digitado pelo usuário.
        input.value = "";
        // Seleciona (foca) no campo de texto (input) para que o usuário não precisa ficar clicando.
        input.focus();
    }

    sorteia(5);
    var input = document.querySelector("input");
    input.focus();
    var button = document.querySelector("button");
    /* Você estará chamando a função verifica() antes que o usuário clique no botão. E mais do que isso, o retorno da função será atribuído à button.click. Como a função verifica() não retorna nada, o que ficará armazenado em button.click será undefined. Daí, quando alguém clicar no botão nada acontecerá.*/
    button.onclick = verifica;    
    console.log(segredos);

</script>

Boa! Isso mesmo!

O que acontece é que o reload só é feito depois da função verifica acabar. Por isso, o for continuaria e a variável acertou ficaria false.