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

[Projeto] Pfv, verificar as linhas 2, 3 e 10 e avaliar se está correta a resposta ao "05. Desafio; 02 Apresentação do desafio"

alert('Boas vindas ao jogo do número secreto');
let numeroEscolhido = 100 // Cria-se uma variável para propocionar o dinamismo proposto no desafio.
let numeroSecreto = parseInt(Math.random() * numeroEscolhido + 1);
console.log(numeroSecreto);
let chute;
let tentativas = 1;

// enquanto chute não for igual ao n.s.
while (chute != numeroSecreto) {
    chute = prompt(`Escolha um número entre 1 e ${numeroEscolhido}`);
    // se chute for igual ao número secreto
    if (chute == numeroSecreto) {
        break;
    } else {
        if (chute > numeroSecreto) {
            alert(`O número secreto é menor que ${chute}`);
        } else {
            alert(`O número secreto é maior que ${chute}`);
        }
        // tentativas = tentativas + 1;
        tentativas++;
    }
}

let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} ${palavraTentativa}.`);

// if (tentativas > 1) {
//     alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} tentativas.`);
// } else {
//     alert(`Isso ai! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} tentativa.`);
// }
3 respostas

Oi, Bruno! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Você já deixou o jogo dinâmico ao usar numeroEscolhido e interpolação no prompt, atendendo ao desafio de mudar só um ponto.

Para alinhar totalmente ao enunciado, sugiro centralizar no limite e derivar tudo a partir dele, convertendo o chute para número e validando entradas:
Veja este exemplo:


// app.js (dinamico a partir de um unico valor)
const limite = 100;

const numeroSecreto = Math.floor(Math.random() * limite) + 1;
let chute = NaN;
let tentativas = 0;

while (chute !== numeroSecreto) {
  const entrada = prompt(`Escolha um numero entre 1 e ${limite}`);
  chute = Number(entrada);
  if (Number.isNaN(chute) || chute < 1 || chute > limite) {
    alert(`Por favor, digite um numero valido de 1 a ${limite}.`);
    continue;
  }
  tentativas++;
  if (chute > numeroSecreto) alert(`O numero secreto e menor que ${chute}`);
  else if (chute < numeroSecreto) alert(`O numero secreto e maior que ${chute}`);
}
const palavra = tentativas > 1 ? 'tentativas' : 'tentativa';
alert(`Muito bem. Voce descobriu o numero secreto ${numeroSecreto} com ${tentativas} ${palavra}.`);

Uma dica interessante para o futuro é usar Math.floor em vez de parseInt para números aleatórios, pois Math.floor(Math.random()*limite)+1 garante um intervalo inteiro e inclusivo de 1 a limite.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá! Por gentileza, por que você cria a variável com 'const' em vez de 'let' como é ensinado no curso?

Ainda, o que seria esse 'NaN'?

Obrigado.

solução!

Oi, Bruno!

Usamos const quando a variável não deve ser reatribuída depois de criada. Como o numeroSecreto nunca muda durante a execução do jogo, faz sentido usar const em vez de let. Já o NaN significa Not a Number, e serve para indicar que, inicialmente, a variável chute não tem um número válido até que o jogador digite algo.

Usamos o método Number.isNaN() para validar se uma entrada realmente é um número antes de continuar a lógica. Veja:


let valor = Number(prompt("Digite um numero:"));

if (Number.isNaN(valor)) {
    console.log("Voce nao digitou um numero valido");
} else {
    console.log("O numero digitado foi " + valor);
}

Esse código converte a entrada em número e verifica se ela é inválida usando Number.isNaN. Assim, você evita erros quando alguém digita letras ou símbolos.

Fico à disposição. Abraços e bons estudos!