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

Jogo da adivinhação mais elaborado

Tentei fazer o programa um pouco mais elaborado, porém no console aparece que o botão (button) não está definido. Alguém poderia me dizer o que fiz de errado?

<meta charset="UTF-8">

<h1> Jogo da Adivinhação </h1>

<h3> Tente adivinhar um número de 0 a 10 </h3>

<input/>
<button>CONFERIR</button>

<script>

function pulaLinha() {
    document.write("<br><hr><br>");
}

function mostra(frase) {
    document.write("<big> " + frase + " </big>");
    pulaLinha();
}

var numeroEscolhido = Math.round(Math.random()*10);

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

var numeroTentativas = 1;

function verificar(){

    while (numeroTentativas < 3){

        if (numeroChute == numeroEscolhido){

            mostra("Parabéns você acertou!!! =) O número escolhido foi " + numeroEscolhido);
            break;

        } else {

            if (numeroChute>numeroEscolhido) {

                mostra ("Infelizmente você errou!!! Tente novamente! Dica: O número escolhido é menor!");
                numeroChute = document.querySelector("input");

            } 

            if (numeroChute<numeroEscolhido) {

                mostra("Infelizmente você errou!!! Tente novamente! Dica: O número escolhido é maior!");
                numeroChute = document.querySelector("input");

            }

        }

        numeroTentativas++;

    }

    if (numeroChute != numeroEscolhido){

        mostra("Não foi desta vez");

    }

}

button.onclick = verificar;


</script>
4 respostas
solução!

Olá Danilo, o que faltou foi você selecionar o seu botão através do document.querySelector, por exemplo:

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

Aí no final, você pode chamar o onclick dele:

botao.onclick = verificar;

O Programa funcionou, mas não da forma como eu queria. Gostaria que o usuário tivesse 3 oportunidades de tentar adivinhar. Porém ao colocar o número e clicar em VERIFICAR já aparece a mensagem de que NÃO FOI DESSA VEZ. O que estou fazendo de errado?

Oi Danilo, acontece que o seu código não está entrando nos ifs de comparação, por estar faltando o atributo value:

if (numeroChute.value > numeroEscolhido) {
    mostra ("Infelizmente você errou!!! Tente novamente! Dica: O número escolhido é menor!");
} 

if (numeroChute.value < numeroEscolhido) {
    mostra("Infelizmente você errou!!! Tente novamente! Dica: O número escolhido é maior!");
}

E para o usuário ter 3 tentativos de acerto, você deve remover a condição while, pois com ela, o código irá executar 3 vezes com o mesmo chute.

Então, no início da função verificar(), você captura o chute do usuário, faz os 3 testes, incrementa a variável de tentativas e ao final, se ela for maior que 3, o que significa que o usuário errou 3 vezes o número, mostra que ele perdeu.

Além disso, a função mostra sobrescreve a página, então ela não pode ser usada se o usuário ainda tiver tentativas para acertar o número. O ideal é só usá-la caso o usuário ganhe ou passe das 3 tentativas. Se ele ainda tiver tentativa, você pode usar a função alert, para exibir em um pop-up do navegador a mensagem que você quiser:

function verificar() {

    numeroChute = document.querySelector("input");

    if (numeroChute.value == numeroEscolhido) {
        mostra("Parabéns você acertou!!! =) O número escolhido foi " + numeroEscolhido);
    }

    if (numeroChute.value > numeroEscolhido) {
        alert("Infelizmente você errou!!! Tente novamente! Dica: O número escolhido é menor!");
    }

    if (numeroChute.value < numeroEscolhido) {
        alert("Infelizmente você errou!!! Tente novamente! Dica: O número escolhido é maior!");
    }

    numeroTentativas++;

    if (numeroTentativas > 3) {
        mostra("Não foi desta vez");
    }

}

Olá Danilo, tudo bem? Sua dúvida foi solucionada? Você conseguiu implementar o programa do jeito que queria?