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

Jogo advinha modificado.

<meta charset="UTF-8">

<script>



    function pulaLinha(linhas) {
        for (var i = 1; i <= linhas; i ++){
            document.write("<br>")
        }
    }

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

    function sorteia10(){
        return Math.round(Math.random() * 10);
    }

    var numeroPensado = sorteia10();
    var nome = prompt("Informe o seu nome.");
    var chute = parseFloat(prompt("Informe um número de 0 a 10:"));
    var tentativasRestantes = 3

    // aqui o programa força o usuário a digitar apenas números
    while(isNaN(chute)){
        chute = parseFloat(prompt("Informe apenas números.\nInforme um número de 0 a 10:"));
    }

    // aqui o programa força o usuário a digitar apenas números de 0 a 10
    while(chute < 0 || chute > 10) {
        chute = parseFloat(prompt("Erro! Informe um número de 0 a 10:"));
    }

    // se na primeira tentativa o usuário acertar, mostra uma mensagem de parabéns na página
    if(chute == numeroPensado) {
        mostra("Parabéns, " + nome + " você acertou");
    } else {

    // caso contrário, o usuário é forçado a digitar um número até que ele acerte
    while(chute != numeroPensado) {

        // o usuário possui apenas 3 tentativas
        tentativasRestantes --

        if(chute > numeroPensado){
            alert(nome + ", você errou. O número informado é maior.\nNúmero pensado: " + numeroPensado + "\nTentativas Restantes: " + tentativasRestantes);

        } else {
            alert(nome + ", você errou. O número informado é menor.\nNúmero pensado: " + numeroPensado + "\nTentativas Restantes: " + tentativasRestantes);
        }

        // atingido o número de tentatativas, o programa é recarregado
        if(tentativasRestantes < 1){
            alert("Número de tentativas esgotado. Passe para outro jogador");
            window.location.reload();
        }

        // feitas as verificações acima e, estando dentro do número de tentativas restantes, o usuário deve digitar outro número
        chute = parseFloat(prompt("Informe um número de 0 a 10:"));

        // caso ele acerte, programa encerrado
        if(chute == numeroPensado) {
            mostra("Parabéns, " + nome + " você acertou.");
        }
    }
}

</script>

Eu modifiquei o jogo de adivinha da seguinte maneira para que o programa não aceite valores fora do intervalo de 0 a 10 e também para que não aceite valores que não sejam números. Depois fiz com que o prompt abrisse toda vez o o número fosse diferente do numero pensado, foçando o usuário a digitar até que o número desse igual.

Agora vem a dúvida: Eu inseri uma quantidade de tentavivas = 3. Mas queria que o programa recarrerregasse o programa inteiro, pedindo para inserir um outro nome (linha 58) mas isso não ocorre. Alguem pode me ajudar??

Eu queria tembém que o programa encerrasse ao clicar em cancelar. Como posso fazer?

3 respostas

No final do seu código você pode colocar uma pergunta se o jogador deseja jogar novamente. Coloque todo seu código (desde a informação do nome, até a pergunta se quer jogar de novo dentro) de um while, verificando se sempre se ele quer jogar novamente.

Assim, quando ele informar que sim, vai voltar para o início e perguntar o nome de novo, recomeçando todo o jogo.

Obrigado pela dica Alexandre. Eu modifiquei o código, coloquei tudo dentro da iteração, apenas mudei usando o for. O código ficou mais enxuto. Eu coloquei um location.reload() quando as tentativas esgotassem e deu certo.

Mas o que eu queria agora era poder clicar no botão cancelar do prompt e encerrar o programa.

<meta charset="UTF-8">

<script>

    function pulaLinha(linhas) {
        for (var i = 1; i <= linhas; i ++){
            document.write("<br>")
        }
    }

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

    function sorteia10(){
        return Math.round(Math.random() * 10);
    }

    var numeroPensado = sorteia10();
    var nome = prompt("Informe o seu nome.");



    for(var tentativas = 2; tentativas >= 0; tentativas --) {

        var chute = parseFloat(prompt("Informe um número de 0 a 10:"));

        // aqui o programa força o usuário a digitar apenas números
        while(isNaN(chute)){
            chute = parseFloat(prompt("Informe apenas números. Informe um número de 0 a 10:"));
        }
        // aqui o programa força o usuário a digitar apenas números de 0 a 10
        while(chute < 0 || chute > 10) {
            chute = parseFloat(prompt("Erro! Informe um número de 0 a 10:"));
        }


        if(chute == numeroPensado) {

        mostra("Parabéns, " + nome + " você acertou");
        tentativas = 0;

        } else {


            if(tentativas == 0){
                alert("Número permitido de tentativas ultrapassado!\nO número pensado foi: " + numeroPensado);
                location.reload()

            } else {

                if(chute > numeroPensado) {
                alert(nome + ", você errou. O número informado é maior.\nTentativas Restantes: " + tentativas);
                }

                if(chute < numeroPensado) {
                alert(nome + ", você errou. O número informado é maior.\nTentativas Restantes: " + tentativas);
                }
            }
        }
    }

</script>
solução!

O botão Cancelar do prompt não envia nenhum evento, ele apenas fecha a tela e não passa nenhum valor.

Você pode testar se o valor informado é vazio (nome = ""). Se o usuário passar nome vazio (vai funcionar tanto pro OK quanto pro cancelar), vc exibe uma mensagem agradecendo pelo jogo.