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

Jogo da adivinhacao utilizando "button" e "input "

tentei criar o jogo da adivinhacao utilizando o button e o input, mas nao sei de que maneira tenho que modificar o codigo para que o usuario possa ter 3 chances para acertar o numero. De acordo com o meu codigo a mensagem "Voce errou" ja aparece as 3 vezes seguidas apenas o usuario erra a primeira vez.

<meta charset="UTF-8">

<input/>
<button>Vamos comparar?</button>

<script>

    function pulaLinha() {

        document.write("<br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {

        return Math.round(Math.random() * n);
    }

    function verifica() {

        var numeroTentativas = 1;

        while (numeroTentativas <= 3) {

        var input = document.querySelector("input");



         if(input.value == button.value) {

        mostra("Uau! Você acertou, pois eu pensei no " + button.value);
        break;

        } else {

        alert("Voce errou!");
        numeroTentativas++;
        input.focus();

        }

        }
        if (numeroTentativas > 3) {

        mostra("USUARIO BLOQUEADO");
        pulaLinha();

        }
        mostra("FIM")
    }

    var button = document.querySelector("button");
    button.value = sorteia(10);
    console.log(button.value);


    button.onclick = verifica;








</script>
5 respostas
solução!

Algumas dicas: no seu codigo, quando a pessoa clica no botao, chama o verifica. E essa funcao roda as tentativas 3 vezes la dentro - tem o while.

O que a gente precisa é que cada clique no botão signifique uma unica tentativa. E que apenas apos a 3a tentativa, apareca o bloqueio.

Pra isso, vamos tirar o while de dentro do verifica e faze-lo rodar apenas 1 tentativa.

Para controlar qtas tentativas ja foram feitas, precisamos que a variavel numeroTentativas esteja fora da funcao, seja uma variavel global, que vai ser lida as 3x que a funcao for chamada.

Quer tentar refazer baseado nessas dicas?

Obrigado Sérgio! Segue meu código modificado (para o caso de alguma sugerencia adicional). Sergio, e com relacao as variaveis globais e locais. Dentro da funcao nao devo ter variaveis globais?

<meta charset="UTF-8">

<input/>
<button>Vamos comparar?</button>

<script>

    function pulaLinha() {

        document.write("<br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function sorteia(n) {

        return Math.round(Math.random() * n);
    }

    function verifica() {

        numeroTentativas++;

        if (numeroTentativas == 3) {

            mostra("USUARIO BLOQUEADO");
            pulaLinha();
            mostra("FIM");
        }

        if(input.value == button.value) {

            mostra("Uau! Você acertou, pois eu pensei no " + button.value);
            mostra("FIM");

        } else {

            alert("Voce errou!");
            input.value = "";
            input.focus();

        }
    }

    var button = document.querySelector("button");
    button.value = sorteia(10);
    console.log(button.value);
    button.onclick = verifica;

    var input = document.querySelector("input");

    numeroTentativas = 0;

</script>

Pode ter sim variaveis globais dentro da funcao. Elas podem ser definidas tanto fora quanto dentro de funcoes.

O unico detalhe é que se a funcao for chamada mais de 1x (como nesse caso) a variavel global seria redefinida mais de 1x. Por isso colocamos ela pra fora, pra ela ser definida 1x só.

Boa tarde,

Estava analisando o cógido da colega e fiquei com duas dúvidas: Nessa primeira parte "(n)", por que utilizar o "n"?

function sorteia(n) {

return Math.round(Math.random() * n);

E nesta outra parte do código, porque o valor do botão é "sortei(10)"?

button.value = sorteia(10);

Oi Felipe,

O Math.random() devolve um número decimal entre 0 (inclusive) até 1 (exclusivo). Isso quer dizer que o resultado dele sempre vai ser um numero do tipo 0.5258 ou 0.1273653 assim por diante.

A gente quer fazer um sorteio de numeros inteiros em um intervalo onde o resultado possa ser aleatoriamente 0, 1, 2, 3, 4... até 10.

Uma forma de fazer isso é multiplicar o valor do random() pelo número 10. Isso vai dar um resultado decimal. Aí arrendondamos o valor (com round()) e vamos ter um número inteiro. É isso que essa função faz.

Ela é uma funçao generica que sorteia um numero inteiro no intervalo entre 0...n onde n é um parametro da funcao e pode ser qualquer numero natural.

No exemplo que vc citou, passamos o valor 10 como argumento pra ele sortear entre 0...10. E aí o valor do botão recebe esse numero sorteado.