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

Como colocar limite de tentativas no jogo de adivinhação com o botão?

Bom dia, Tentei colocar limite de tentativas no jogo de adivinhação igual foi colocado na primeira vez que o professor ensinou. Mas como a entrada com a tentativa e feita antes eu estou com dificuldades para fazer o programa pedir para que o usuário digite novamente e uma nova leitura seja feita. O código que eu fiz lê apenas uma vez.

<meta charset='UTF-8'>

<h1>Novo jogo de adivinhação</h1>

<input/>
<button>Compare com meu segredo</button>


<script>

    var entrada = document.querySelector('input');

    var segredo = 5; //Deixei o 5 mesmo para ir fazendo testes, quando estiver ok irei colocar um valor aleatório.

    entrada.focus();

    function verifica(){

        var tentativa = 1

        while(tentativa <= 3 && entrada.value != segredo){
            alert('Voce errou!!Tente novamente');
            entrada = document.querySelector('input'); //Nessa parte o usuário deveria tentar adivinhar o número novamente,
            tentativa ++;                              //porém isso não acontece.
        }

        if (entrada.value == segredo){
            alert('Você acertou, parabéns!!!');
        }else{
            alert('Você errou todas as sua tentativas')
        }


    }    

    var botao = document.querySelector('button');

    botao.onclick = verifica;


</script>
9 respostas

Fala ai Leonardo, beleza ?

Para isso você pode pedir para o usuário informar o número de tentativas através do prompt:

let qtdDeTentativas = parseInt(prompt("Digite o numero de tentativas"));

Espero ter ajudado

Cara não entendi o que você quis dizer, o que eu estou tentando fazer e ler novamente o input nessa parte do código:

while(tentativa <= 3 && entrada.value != segredo){
            alert('Voce errou!!Tente novamente');
            entrada = document.querySelector('input'); //Nessa parte que eu estou tentado fazer o programa ler novamente o o que foi digitado pelo usuário
            tentativa ++; 
        }

Desculpe Leonardo, acho que entendi errado, pensei que queria pedir para o usuario informar a quantidade de tentivas ou algo parecido.

O que você precisa fazer para resolver o problema é chamar dentro while a função que verifica se ele acertou ou não.

Outro detalhe é que seu while deve ser até ele acertar ou atingir o limite máximo de tentativas.

Talvez isso possa lhe ajudar: https://repl.it/@mahenrique94/TentativasAcerto

O código é um pouco mais complexo, mas a ideia é essa.

Cara o while já está dentro da função "verifica". Essa solução que você deu poderia dar certo, mas para ler da segunda tentativa para frente iria utilizar um alerta na página, certo? A minha intenção e ler a caixa de texto "input" novamente com a nova tentativa do usuário.

Quando eu coloquei essa parte dentro do while,

entrada = document.querySelector('input');

eu queria que o programa esperasse o usuário digitar o novo chute para depois verificar se ele está certo ou não e mostra o alerta na tela.

Para fazer isso você não precisa de while então, trabalhe com um botão, grave o numero máximo de tentativas e qual tentativa ele ta, ai a cada tentativa incrementa na variável.

Se ele acertar ou as tentativas esgotar você avisa ele e e reseta tudo.

Entendi o que você disse e estou tentando o código abaixo. A ideia e que clicando no botão o programa rode a função "verifica" e retorne na variável "teste", "certo" ou "erro", pois a partir do que estiver dentro dessa variável eu verifico se escrevo na tela que o usuário acertou ou se rodo essa função novamente na forma de outras tentativas. Porém, não está retornando "certo" ou "erro" dentro da variável, está simplesmente escrevendo "i" na tela como se não estivesse recebido nada da função "verifica". O console do JavaScript dentro do chrome não está mostrando nenhum erro.

<meta charset='UTF-8'>

<h1>Novo jogo de adivinhação</h1>

<input/>
<button>Compare com meu segredo</button>


<script>

    var segredo = 5;
    var teste = 'i';

    function verifica(){


        var entrada = document.querySelector('input');

        if (segredo == entrada.value){
            return teste = ('certo');
        }else{
            return teste = ('erro');
        }
    }    

    var botao = document.querySelector('button');
    botao.onclick = verifica;
    document.write(teste);

</script>
solução!

Olá Leonardo bom dia, eu vou fazer algumas comentários no seu código com o objetivo de ajudar a você identificar algum problema.

<meta charset='UTF-8'>

<h1>Novo jogo de adivinhação</h1>

<input/>
<button>Compare com meu segredo</button>


<script>

    var segredo = 5;
    var teste  = i;

Se deixarmos aquele i aqui ele será impresso na página ao lado do botão o ideal seria não inicializá-lo;

 var teste;
    function verifica(){
        var entrada = document.querySelector('input');
        if (segredo == entrada.value){
            return teste = ('certo');
        }else{
            return teste = ('erro');
        }

Você está atribuindo no return e enviando pra onde ? Não Seria melhor imprimir aqui um alert pois o document.write ira escrever a página novamente e vai retirar nossa caixa de texto e nosso botão e para fazermos uma nova consulta teremos que recarregar a página, a implementação ficaria mais ou menos assim:

 if (segredo == entrada.value){
            teste = ('certo');
            alert (teste)
        }else{
            teste = ('erro');
            alert(teste) 
        }
    }

Eu não usaria a variável teste apenas estou seguindo sua implementação.

   var botao = document.querySelector('button');
    botao.onclick = verifica;
    document.write(teste);

Quando a página é carregada o document.write já é executado por isso trabalhamos com o alert dentro da função para mostrar o resultado de nossa comparação você pode usar o document.write mas lá na função verifica, porém como já disse acima ela vai escrever uma "nova página" com o certo ou erro. Espero ter ajudado.

Muito abrigado pela ajuda de vocês, me ajudou com algumas duvidas que eu tinha e a entender melhor algumas funcionalidades.

Magina, sempre que precisar não deixe de criar suas dúvidas.