Se me permite alguns pitacos...
A parte do if
/else
poderia ser assim:
if (chute == numeroSecreto) {
alert("Acertou! Você fez um total de " + tentativas + " chutes!");
} else if (chute > numeroSecreto) {
alert(chute + " é Maior do que o Número Secreto!");
} else {
alert(chute + " é Menor do que o Número Secreto!");
}
Afinal, se chute
não for igual a numeroSecreto
, ele não entra no primeiro if
. Se chute
não for maior que numeroSecreto
, não entra no segundo if
. Então se ele não entrou no if
e nem no else if
, é porque chute
não é igual e nem maior que numeroSecreto
. A única possibilidade que sobrou é chute
ser menor que numeroSecreto
, então não precisa testar isso de novo.
Ok, o único caso em que isso não funcionaria é se a pessoa não digitar um número, pois aí todas as comparações falhariam, mas não ficou claro se era para validar isso. Mas se
chute
sempre for um número, o último caso só precisa de umelse
e nada mais.
Quanto a isso:
var numeroSecreto = parseInt(Math.random() * 1001);
Sei que nesse caso "funciona", mas a ideia de parseInt
é que ele receba uma string e a converta para número. Se você quer truncar/arredondar um número, tem casos em que parseInt
pode falhar. Uma opção mais segura é usar Math.floor
:
var numeroSecreto = Math.floor(Math.random() * 1001);
Um lugar em que parseInt
poderia ser usado é no prompt
. Afinal, prompt
retorna uma string, e nesse caso faz sentido converter para número. Sei que o JavaScript faz coerção de tipos quando você faz as comparações, mas usar parseInt
deixa claro a intenção ("aqui precisa ser um número"). Com isso, também se torna mais simples verificar se foi de fato digitado um número, como veremos no código abaixo.
E quando acabam os chutes, vc mostra "Ainda lhe restam 0 chutes", mas será que precisa dessa mensagem? Se restam 0 chutes, é porque acabou, acho que poderia pular essa mensagem quando chegar a zero e mostrar logo a mensagem final.
Por fim, daria para eliminar algumas variáveis, seria assim:
// floor para arredondar o valor
// (parseInt não funciona em todos os casos: https://pt.stackoverflow.com/q/506307/112052)
var numeroSecreto = Math.floor(Math.random() * 1001);
var chutesLimite = 15;
var tentativas = 0;
alert("E O Jogo Começa! Você tem um limite de " + chutesLimite + " chutes!");
while (true) {
// parseInt para converter para número
var chute = parseInt(prompt("Digite um número entre 0 e 1000"));
if (isNaN(chute)) { // verifica se foi digitado um número mesmo
alert('Você não digitou um número');
// vai para a próxima iteração, entendo que não conta como tentativa,
// já que não é um número
continue;
}
tentativas++;
if (chute == numeroSecreto) {
alert("Acertou! Você fez um total de " + tentativas + " chutes!");
break; // sai do while
} else if (chute > numeroSecreto) {
alert(chute + " é Maior do que o Número Secreto!");
} else {
// se chegou nesse else, é porque chute não é igual e nem maior que numeroSecreto
// então com certeza é menor e não preciso testar isso de novo
alert(chute + " é Menor do que o Número Secreto!");
}
if (tentativas == chutesLimite) {
alert("Você atingiu o limite de chutes. O Jogo está finalizado.");
break; // sai do while
} else {
alert("Ainda lhe restam " + (chutesLimite - tentativas) + " chutes!");
}
}