6
respostas

Sugestões para meu Jogo da Adivinhação

A partir da resolução de um exercício específico ao longo do curso, e somado com os meus conhecimentos adquiridos ... Eis o progresso do meu projeto final.

Para fins de estudo, gostaria que se alguém encontrar erros ou tenha alguma sugestão de melhoria, deixar nos comentários por favor <3

Os modos de jogo se consistem em:

  • Modo Livre - Jogador dá o limite do sorteio e tem infinitas tentativas para acertar.
  • Modo Desafiante - 4 Níveis de dificuldade com limitações de tentativas e variações no limite do sorteio de forma adaptada.
  • Modo Senha - 3 números de 0 a 9 (sem repetir) são gerados e o jogador deve acertá-los na ordem dentro de 9 tentativas (3 pra cada número).

https://github.com/PabloGibrin/Alura.git

Por conta do tamanho, coloquei o projeto no meu repositório. Mas vou colocar nos pŕoximos comentários também.

Espero que gostem do joguinho ^^

Desde já agradeço, abraços.

6 respostas

("Menu" do jogo) Arquivo: jogo_adivinha_v04.html

<meta charset="utf-8">

<center><h1>Jogo da Adivinhação</h1>
<big>v.0.4</big>
<hr>
<h3> Bem vindo ao Jogo da Adivinhação </h3>
Escolha o modo de jogo que você quer jogar!
<br>
<br>
<button onclick= "modoLivre()" > 
    Modo Livre 
</button>
<button onclick= "modoDesafiante()" >
     Modo Desafiante 
</button> 
<button onclick= "modoSenha()" > 
    Modo Senha 
</button></center>

<script src="./modoLivre.js"></script>
<script src="./modoDesafiante.js"></script>
<script src="./modoSenha.js"></script>
<script>
    const mostraEPula = (texto) => document.write(`${texto} <br />`);
    const sorteioLivre = (limite) => Math.round(Math.random() * limite);
    const sorteioFacil = () => Math.round(Math.random() * 10);
    const sorteioMedio = () => Math.round(Math.random() * 100);
    const sorteioDificil = () => Math.round(Math.random() * 100);
    const sorteioImpossivel = () => Math.round(Math.random() * 1000);
    const sorteioSenha = () => Math.round(Math.random() * 9);
    const perguntarNumero = (pergunta) => parseInt(prompt(pergunta));
</script>

Arquivo: modoLivre.js

const modoLivre = () => {

    mostraEPula (`<center><h1>Jogo da Adivinhação</h1>
        <big>v.0.4</big>
        <hr>
        <h3> Modo Livre </h3>
        Nesse modo, você tem infinitas tentativas para acertar o número que vou sortear, e é você quem decide o número limite do sorteio!
        <br>
        <br>
        Para começar, digite o número limite do sorteio! 
        <br>
        <br>
        <input>
        <button> Iniciar </button> 
        <hr>
        </center>`);

    let input = document.querySelector (`input`);
    input.focus();    

    function verifica () {

        if (input.value != input.value * 1) {

            alert(`Coloque um número válido.`);
            input.value = ``;
            input.focus();

        } else {

            let limite = input.value;
            let numPensado = sorteioLivre(limite);
            console.log (numPensado);
            let chute = perguntarNumero(`Pronto, escolhi um número entre 0 e ${limite}, tente acertar!`);
                  let acertou = false;
                  let tentativas = 1;

                  while (!acertou) {
                    acertou = chute === numPensado;
                    if (acertou) {
                      mostraEPula(`<center> Conseguiu! Você acertou o número em ${tentativas} tentativas. <br>
                      O número era ${numPensado}! 
                          <br> Clique em [Iniciar] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`);
                      break;
                    } else {
                      if (chute > numPensado) {
                        alert("Foi muito alto, tente novamente!");
                        tentativas++;
                      } else {
                        alert("Foi muito baixo, tente novamente!");
                        tentativas++;
                      }
                    }
                    chute = perguntarNumero(`Adivinhe o número que estou pensando de 0 a ${limite}`);
                  }

            }
        }

    let button = document.querySelector (`button`);
    button.onclick = verifica;
};

Arquivo: modoDesafiante.js (não coube o código inteiro, então está em 2 partes.)

const modoDesafiante = () => {

    mostraEPula (`<center><h1>Jogo da Adivinhação</h1>
        <big>v.0.4</big>
        <hr>
        <h3> Modo Desafiante </h3>
        Nesse modo, seu objetivo é acertar o número que vou sortear antes que suas vidas se esgotem!
        <br>
        <br>
        Para começar, digite a seguir o número correspondente ao nível do desafio.
        <br>
        [0] Fácil | [1] Médio | [2] Difícil | [3] Impossível 
        <br>
        <br>
        <input>
        <button> Desafiar </button> 
        <hr>
        </center>`);

    let input = document.querySelector (`input`);
    input.focus();

    function dificuldades () {

        if (input.value != input.value * 1) {

            alert(`Coloque uma dificuldade válida.`);
            input.value = ``;
            input.focus();

        } else {

            if (input.value == 0) {
                let acertou = false;
                let vidas = 5;
                let vidasPerdidas= 0;

                alert(
                  "Pronto, pensei em um número de 0 a 10. Você tem 5 tentativas para acertá-lo!"
                );
                const numPensado = sorteioFacil();
                console.log(numPensado);
                let chute = perguntarNumero("Adivinhe o número que estou pensando");

                while (!acertou) {
                  acertou = chute == numPensado;

                  if (acertou == true) {                                          
                    mostraEPula(`<center> Parabéns, você acertou o número! Você manteve ${vidas} vidas!<br>
                          O número era ${numPensado}! 
                        <br> Após alterar a dificuldade, ou não, clique em [Desafiar] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`
                    );
                    break;  } else {
                     if (vidasPerdidas > 4 || vidas == 1) {
                    mostraEPula(`<center> Que pena, você perdeu todas as vidas! T-T <br>
                          O número era ${numPensado}! 
                        <br> Após alterar a dificuldade, ou não, clique em [Desafiar] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`);
                    break;}                  
                    if (chute > numPensado) {
                        vidas--;
                        vidasPerdidas++;
                          alert(`Foi muito alto, tente novamente! ${vidas} vidas restantes!`);}                            
                     if (chute < numPensado) {
                        vidas--;
                        vidasPerdidas++;
                          alert(`Foi muito baixo, tente novamente! ${vidas} vidas restantes!`);}                       

                    }
                  chute = perguntarNumero();
                }
              }

            if (input.value == 1) {
                let acertou = false;
                let vidas = 10;
                let vidasPerdidas= 0;

                alert(
                  "Pronto, pensei em um número de 0 a 100. Você tem 10 tentativas para acertá-lo!"
                );
                const numPensado = sorteioMedio();
                console.log(numPensado);
                let chute = perguntarNumero("Adivinhe o número que estou pensando");

                while (!acertou) {
                  acertou = chute == numPensado;

                  if (acertou == true) {                                          
                    mostraEPula(`<center> Parabéns, você acertou o número! Você manteve ${vidas} vidas!<br>
                          O número era ${numPensado}! 
                        <br> Após alterar a dificuldade, ou não, clique em [Desafiar] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`
                    );
                    break;  } else {
                     if (vidasPerdidas > 9 || vidas == 1) {
                    mostraEPula(`<center> Que pena, você perdeu todas as vidas! T-T <br>
                          O número era ${numPensado}! 
                        <br> Após alterar a dificuldade, ou não, clique em [Desafiar] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`);
                    break;}                  
                    if (chute > numPensado) {
                        vidas--;
                        vidasPerdidas++;
                          alert(`Foi muito alto, tente novamente! ${vidas} vidas restantes!`);}                            
                     if (chute < numPensado) {
                        vidas--;
                        vidasPerdidas++;
                          alert(`Foi muito baixo, tente novamente! ${vidas} vidas restantes!`);}                       

                    }
                  chute = perguntarNumero();
                }
              }

Arquivo: modoDesafiante.js (parte 2)

              if (input.value == 2) {
                let acertou = false;
                let vidas = 5;
                let vidasPerdidas= 0;

                alert(
                  "Pronto, pensei em um número de 0 a 100. Você tem 5 tentativas para acertá-lo!"
                );
                const numPensado = sorteioDificil();
                console.log(numPensado);
                let chute = perguntarNumero("Adivinhe o número que estou pensando");

                while (!acertou) {
                  acertou = chute == numPensado;

                  if (acertou == true) {                                          
                    mostraEPula(`<center> Parabéns, você acertou o número! Você manteve ${vidas} vidas!<br>
                          O número era ${numPensado}! 
                        <br> Após alterar a dificuldade, ou não, clique em [Desafiar] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`
                    );
                    break;  } else {
                     if (vidasPerdidas > 4 || vidas == 1) {
                    mostraEPula(`<center> Que pena, você perdeu todas as vidas! T-T <br>
                          O número era ${numPensado}! 
                        <br> Após alterar a dificuldade, ou não, clique em [Desafiar] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`);
                    break;}                  
                    if (chute > numPensado) {
                        vidas--;
                        vidasPerdidas++;
                          alert(`Foi muito alto, tente novamente! ${vidas} vidas restantes!`);}                            
                     if (chute < numPensado) {
                        vidas--;
                        vidasPerdidas++;
                          alert(`Foi muito baixo, tente novamente! ${vidas} vidas restantes!`);}                       

                    }
                  chute = perguntarNumero();
                }
              }

              if (input.value == 3) {
                let acertou = false;
                let vidas = 5;
                let vidasPerdidas= 0;

                alert(
                  "Pronto, pensei em um número de 0 a 1000. Você tem 5 tentativas para acertá-lo!"
                );
                const numPensado = sorteioImpossivel();
                console.log(numPensado);
                let chute = perguntarNumero("Adivinhe o número que estou pensando");

                while (!acertou) {
                  acertou = chute == numPensado;

                  if (acertou == true) {                                          
                    mostraEPula(`<center> Parabéns, você acertou o número! Você manteve ${vidas} vidas!<br>
                          O número era ${numPensado}! 
                        <br> Após alterar a dificuldade, ou não, clique em [Desafiar] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`
                    );
                    break;  } else {
                     if (vidasPerdidas > 4 || vidas == 1) {
                    mostraEPula(`<center> Que pena, você perdeu todas as vidas! T-T <br>
                          O número era ${numPensado}! 
                        <br> Após alterar a dificuldade, ou não, clique em [Desafiar] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`);
                    break;}                  
                    if (chute > numPensado) {
                        vidas--;
                        vidasPerdidas++;
                          alert(`Foi muito alto, tente novamente! ${vidas} vidas restantes!`);}                            
                     if (chute < numPensado) {
                        vidas--;
                        vidasPerdidas++;
                          alert(`Foi muito baixo, tente novamente! ${vidas} vidas restantes!`);}                       

                    }
                  chute = perguntarNumero();
                }
              }

            }
        }
    let button = document.querySelector (`button`);
    button.onclick = dificuldades;
}

Arquivo: modoSenha.js (Parte 1)

const modoSenha = () => {

    mostraEPula (`<center><h1>Jogo da Adivinhação</h1>
        <big>v.0.4</big>
        <hr>
        <h3> Modo Senha </h3>
        Bem vindo ao Modo Senha, nesse modo, irei gerar uma senha de 3 números, os números são de 0 a 9 e não podem se repetir, porém, você deve acertá-los na ordem correta e tendo 9 chances para conseguir a senha completa.
        <br>
        <br>
        Para iniciar digite "senha" na caixa de texto a seguir. Boa sorte! 
        <br>
        <br>
        <input>
        <button> Gerar Senha </button> 
        <hr>
        </center>`);

    let input = document.querySelector (`input`);
    input.focus();

    function sorteioDigitos (total) {

        var numPensado = [];
        let inicial = 1;

        while (inicial <= total) {

            let numAleatorio = sorteioSenha();
            let achou = false;
            for(let posicao = 0; posicao < numPensado.length; posicao++){
                if (numPensado[posicao] == numAleatorio) {
                    achou = true;
                    break;
                }
            } 
            if (achou == false) {
                numPensado.push(numAleatorio);
                inicial++;
            }            
        }

        return numPensado;        
    }


    function acesso () {

        if (input.value != "senha") {

            alert(`ACESSO NEGADO! Leia as instruções e tente novamente!`);
            input.value = ``;
            input.focus();

        } else {

            let numPensado = sorteioDigitos(3);
            console.log (numPensado);
            let chute = perguntarNumero(`A senha foi gerada! Digite o primeiro número!`);            
            let acertouPrimeiro = false;
            let acertouSegundo = false;
            let acertouTerceiro = false;
            let tentativas = 9;
            let tentativasFalhas = 0;

            while (!acertouPrimeiro) {
                    acertouPrimeiro = chute == numPensado [0];


                    if (chute == numPensado [0]) {                                          
                        alert(`Parabéns, você acertou o primeiro digito! Você ainda tem ${tentativas} tentativas! O número era ${numPensado [0]}!`);
                        break;  
                    } else {

                            if (tentativasFalhas > 8 || tentativas == 1) {
                                   mostraEPula(`<center> Que pena, você não conseguiu acertar a senha! T-T <br>
                                  A senha era ${numPensado}! 
                                <br> Clique em [Gerar Senha] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`);
                                break;
                            }                  
                            if (chute > numPensado [0]) {
                                tentativas--;
                                tentativasFalhas++;
                                  alert(`Foi muito alto, tente novamente! ${tentativas} tentativas restantes!`);
                            }                            

                            if (chute < numPensado [0]) {
                                tentativas--;
                                tentativasFalhas++;
                                alert(`Foi muito baixo, tente novamente! ${tentativas} tentativas restantes!`);
                            }    

                           chute = perguntarNumero(`A senha foi gerada! Digite o primeiro número!`);

                    }
            }
            if (acertouPrimeiro) {

                let chuteSegundo = perguntarNumero(`Agora você deve acertar o segundo número!`);

                while (!acertouSegundo) {
                    acertouSegundo = chuteSegundo == numPensado [1];

                    if (acertouSegundo == true) {                                          
                        alert(`Parabéns, você acertou o segundo digito! Você ainda tem ${tentativas} tentativas! O número era ${numPensado [1]}!`);
                        break;  
                    } else {

                            if (tentativasFalhas > 8 || tentativas == 1) {
                                   mostraEPula(`<center> Que pena, você não conseguiu acertar a senha! T-T <br>
                                  A senha era ${numPensado}! 
                                <br> Clique em [Gerar Senha] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`);
                                break;
                            }                                              
                            if (chuteSegundo > numPensado [1]) {
                                tentativas--;
                                tentativasFalhas++;
                                  alert(`Foi muito alto, tente novamente! ${tentativas} tentativas restantes!`);
                            }                            

                            if (chuteSegundo < numPensado [1]) {
                                tentativas--;
                                tentativasFalhas++;
                                alert(`Foi muito baixo, tente novamente! ${tentativas} tentativas restantes!`);
                            }    

                           chuteSegundo = perguntarNumero(`Digite o segundo número!`);

                    }
                }
            }

Arquivo modoSenha.js (Parte 2)

    if (acertouSegundo) {

                let chuteTerceiro = perguntarNumero(`Agora você deve acertar o último número!`);

                while (!acertouTerceiro) {
                    acertouTerceiro = chuteTerceiro == numPensado [2];

                    if (acertouTerceiro == true) {                                          
                        mostraEPula(`<center> Parabéns, você acertou a senha! Você manteve ${tentativas} tentativas!<br>
                          A senha era ${numPensado}! 
                        <br> Clique em [Gerar Senha] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`);
                        break;  
                    } else {

                            if (tentativasFalhas > 8 || tentativas == 1) {
                                   mostraEPula(`<center> Que pena, você não conseguiu acertar a senha! T-T <br>
                                  A senha era ${numPensado}! 
                                <br> Clique em [Gerar Senha] para mais uma rodada ou recarregue a página para voltar ao início! <hr></center>`);
                                break;
                            }                                              
                            if (chuteTerceiro > numPensado [2]) {
                                tentativas--;
                                tentativasFalhas++;
                                  alert(`Foi muito alto, tente novamente! ${tentativas} tentativas restantes!`);
                            }                            

                            if (chuteTerceiro < numPensado [2]) {
                                tentativas--;
                                tentativasFalhas++;
                                alert(`Foi muito baixo, tente novamente! ${tentativas} tentativas restantes!`);
                            }    

                           chuteTerceiro = perguntarNumero(`Digite o terceiro número!`);                        
                    }
                }
            }

        }
    }

    let button = document.querySelector (`button`);
    button.onclick = acesso;
};