Eu descobri o Math.floor() no meio do exercício enquanto estava estudando. Eu percebi que precisava de um número inteiro para o meu jogo, mas o Math.random() estava me dando números com vírgulas. Foi aí que, pesquisando um pouco, encontrei o Math.floor(), que transforma esses números com vírgula em números inteiros. Foi uma descoberta muito útil!
alert('Boas vindas ao jogo do número secreto');
let numeroMaximo = 10;
let numeroSecreto = Math.floor(Math.random() * numeroMaximo) + 1;
console.log(numeroSecreto);
let chute;
let tentativas = 0;
// enquanto chute não for igual ao n.s.
while (chute !== numeroSecreto) {
chute = parseInt(prompt(`Escolha um número entre 1 e ${numeroMaximo}`));
if (isNaN(chute) || chute < 1 || chute > numeroMaximo) {
alert("Por favor, insira um número válido.");
} else {
tentativas++;
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}`);
}
}
}
let palavraTentativa = tentativas === 1 ? 'tentativa' : 'tentativas';
alert(`Isso aí! Você descobriu o número secreto ${numeroSecreto} com ${tentativas} ${palavraTentativa}.`);
Quando você usa Math.random(), o JavaScript retorna um número decimal aleatório entre 0 (inclusive) e 1 (exclusive). Isso significa que você obtém algo como 0.1234, 0.9876, etc.
Agora, se você quiser usar esse número aleatório para escolher um número inteiro entre 1 e um valor máximo que você definiu, você precisa de duas coisas:
Multiplicar o resultado de Math.random() pelo valor máximo que você deseja. Isso te dá um número decimal entre 0 (inclusive) e o valor máximo que você definiu (exclusive).
Arredondar esse número decimal para baixo para o número inteiro mais próximo. Por exemplo, se você tem 3.75, quer arredondá-lo para 3; se você tem 9.99, quer arredondá-lo para 9.
É aí que entra o Math.floor(). Ele faz exatamente isso: pega um número decimal e arredonda-o para baixo para o inteiro mais próximo.
Então, quando você usa Math.floor(Math.random() * numeroMaximo) + 1, você está fazendo o seguinte:
Math.random() * numeroMaximo te dá um número decimal entre 0 (inclusive) e numeroMaximo (exclusive).
Math.floor() arredonda esse número decimal para baixo para o número inteiro mais próximo.
Finalmente, você adiciona 1 para garantir que o número não seja zero, pois você quer números entre 1 e numeroMaximo.