Olá! Fiz umas pequenas alterações no código do Jogo da Adivinhação
<meta charset="UTF-8">
<script>
let chances = 3;
alert("Bem - vindo ao jogo de adivinhação");
function pulaLinha() {
document.write("<br>");
document.write("<br>");
}
function mostra(frase) {
document.write(frase);
pulaLinha();
}
let sorteia = n => Math.round(Math.random() * n)
let numeroAleatorio = sorteia(10);
//Fiz um loop para que o usuario tenha 3 tentativas de adivinhação
let acertou = false;
for (let i = 1; i <= chances; i++) {
let chute = parseInt(prompt("Digite um numero entre 1 a 10: "));
//verifico se o numero digitado não é um numero, se o numero é maior que 10 e se usuario não digitou nada
if (isNaN(chute) || chute < 1 || chute > 10 || chute == '') {
alert("Digite um numero de 0 a 10");
i--;
} else {
if (chute == numeroAleatorio) {
acertou = true; //caso o usuario acerte, o valor de acertou muda para true
mostra(`Acertou. O numero pensado é ${numeroAleatorio}`);
break; //caso ele acerte, para aqui.
} else if (chute < numeroAleatorio) {
alert(`Errou! O numero chutado é menor.`);
} else {
alert(`Errou! o numero chutado é maior.`);
}
}
}
//se o usuario errar, o valor da variavel continua false, como declarada, e ele cai nesse bloco
if (!acertou) {
document.write(`Game Over! O numero correto era ${numeroAleatorio}`);
}
</script>
Alterei o loop while para o loop for. Também fiz uma pequena correção, pois no meu código antigo, mesmo se o usuário não digitasse nada, digitasse um caractere diferente ou um numero maior que 10, ele perdia as 3 chances, caso digitasse algo diferente. No novo código, ele poderá digitar algo diferente que as chances não serão contadas, somente após ele digitar os valores corretamente. Outra coisa, foi a criação da variável "acertou" com o valor false, para que se caso o usuario digitar o valor errado três vezes, a mensagem de Game Over apareça. Fiz alguns comentários para ajudar no entendimento. Vlw :)