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

[Dúvida] Jogo do número secreto

Estou participando da imersão dev e propuseram o jogo do número secreto, que se eu não me engano também está no curso de lógica de programação. Através do if e else, eu tentei incluir opções para tentar adivinhar o número secreto com limite de tentativas e sem, mas não consigo executar a ideia desse limite de tentativas. Alguém consegue me dizer o que estou fazendo de errado nesse código? Segue link abaixo.

https://codepen.io/Fernando-Peres-the-scripter/pen/bGzLpOe?editors=0010

3 respostas
solução!

Fernando,

var numeroSecreto = parseInt(Math.random() * 101);
var tentativas = 1;
alert ("Seja bem vindo ao Mentalista, um jogo para você adivinhar o número secreto!");
alert ("Tente usar o menor número de tentativas possível para acertar a resposta.");
var escolha = prompt("Se deseja jogar sem limite de tentativas, digite 'sem limites'. Agora, se deseja um limite, pode jogar com 3, 5 e 10 e tentativas. Basta digitar a opção desejada.");
if (escolha = "sem limites") {
  while (chute != numeroSecreto) {
    var chute = prompt("Digite um número entre 0 e 100");
     if (chute == numeroSecreto) {
        alert("Muito bem! Você descobriu o número secreto e precisou de " +tentativas+ " tentativas.")
        break;
      } 
     else if (chute < numeroSecreto) {
      alert("Errou! O número secreto é maior que seu chute.")
      tentativas++
    } else if (chute > numeroSecreto) {
      alert("Errou! O número secreto é menor que seu chute.")
      tentativas++
    }
  }
}
   else if (escolha = "3") {
      while (chute != numeroSecreto) {
    var chute = prompt("Digite um número entre 0 e 100")
      if (chute == numeroSecreto) {
        alert("Muito bem! Você descobriu o número secreto e precisou de " +tentativas+ " tentativas.")
        break;
      } if (tentativas == 3) {
          alert("Você perdeu! Tente novamente.")
          break;
        }
      else if (chute < numeroSecreto) {
      alert("Errou! O número secreto é maior que seu chute.")
      tentativas++
    } else if (chute > numeroSecreto) {
      alert("Errou! O número secreto é menor que seu chute.")
      tentativas++
    }
   } alert("Errou! O número secreto é menor que seu chute.");
  }
else if (escolha = "5") {
  while (chute != numeroSecreto) {
    var chute = prompt("Digite um número entre 0 e 100");
     if (chute == numeroSecreto) {
        alert("Muito bem! Você descobriu o número secreto e precisou de " +tentativas+ " tentativas.")
        break;
      } else if (tentativas == 6) {
          alert("Você perdeu! Tente novamente.")
          break;
        }
     else if (chute < numeroSecreto) {
      alert("Errou! O número secreto é maior que seu chute.")
      tentativas++
    } else if (chute > numeroSecreto) {
      alert("Errou! O número secreto é menor que seu chute.")
      tentativas++
    }
   } alert("Você perdeu. Tente novamente")
}
else if (escolha = "10") {
  while (chute != numeroSecreto) {
    var chute = prompt("Digite um número entre 0 e 100");
     if (chute == numeroSecreto) {
        alert("Muito bem! Você descobriu o número secreto e precisou de " +tentativas+ " tentativas.")
        break;
      } else if (tentativas == 11) {
          alert("Você perdeu! Tente novamente.")
          break;
        } 
     else if (chute < numeroSecreto) {
      alert("Errou! O número secreto é maior que seu chute.")
      tentativas++
    } else if (chute > numeroSecreto) {
      alert("Errou! O número secreto é menor que seu chute.")
      tentativas++
    }
   } alert("Você perdeu. Tente novamente");
}

Pelo que eu vi, você colocou um if (escolha = "sem limites"), mas quando faz o while (chute != numeroSecreto) você NÃO verifica se o número de tentativas já foi estourado...

... seria algo assim:

while (chute != numeroSecreto || tentativas > escolha) {

Para que o programa saia do looping de while quando o número de tentativas for ultrapassado.

Outra coisa... você NÃO precisa colocar um else if para cada opção: 3, 5, 10. Você só coleta a escolha do usuário na variável escolha e compara com o incrementador tentativas.

[]'s,

Fabio I.

Fernando,

Alterei seu código e ficou assim:

var numeroSecreto = parseInt(Math.random() * 101);
var tentativas = 1;

alert(
  "Seja bem vindo ao Mentalista, um jogo para você adivinhar o número secreto!"
);
alert(
  "Tente usar o menor número de tentativas possível para acertar a resposta."
);
var escolha = prompt(
  "Se deseja jogar sem limite de tentativas, digite 'sem limites'. Agora, se deseja um limite, pode jogar com 3, 5 e 10 e tentativas. Basta digitar a opção desejada."
);

const arrEscolha = ['3', '5', '10'];

if (escolha != "sem limites" && !arrEscolha.includes(escolha)) {
  alert("Nenhuma escolha válida, bye-bye...");
} else {
  if (escolha == "sem limites") {
    while (chute != numeroSecreto || tentativas > escolha) {
      var chute = prompt("Digite um número entre 0 e 100");

      if (chute == numeroSecreto) {
        alert(
          "Muito bem! Você descobriu o número secreto e precisou de " +
            tentativas +
            " tentativas."
        );
        break;
      } else if (chute < numeroSecreto) {
        alert("Errou! O número secreto é maior que seu chute.");
      } else {
        alert("Errou! O número secreto é menor que seu chute.");
      }

      tentativas++;
    }
  } else {
    while (chute != numeroSecreto || escolha >= tentativas) {
      var chute = prompt("Digite um número entre 0 e 100");

      if (chute == numeroSecreto) {
        alert(
          "Muito bem! Você descobriu o número secreto e precisou de " +
            tentativas +
            " tentativas."
        );

        break;
      } else if (escolha <= tentativas) {
        alert("Você perdeu! Tente novamente.");
        break;
      } else if (chute < numeroSecreto) {
        alert("Errou! O número secreto é maior que seu chute.");
      } else {
        alert("Errou! O número secreto é menor que seu chute.");
      }

      tentativas++;
    }

    if (escolha <= tentativas) {
      alert("Errou! O número secreto é menor que seu chute.");
      alert("Você perdeu. Tente novamente");
    }
  }
}

[]'s,

Fabio I.

Obrigado Fábio, ainda não aprendi algumas coisas que você colocou no código, mas deixei salvo para ter de referência quando for aprender. O código também ficou bem mais limpo.