2
respostas

Número secreto com loop

Compartilho aqui, como fiz meu código para adivinhar o número secreto, com incremento do código em relação às aulas.

alert('Boas vindas ao jogo do número secreto');

let numeroMaximo = 100;
let numeroMinimo = 1;

let numeroSecreto =  Math.floor(Math.random() * numeroMaximo); //define numeroSecreto aleatório
let numeroEscolhido = 0 // inicialização da variável

console.log(numeroSecreto)// debug do numeroSecreto, não deve ser exibido
    

// Definir número de chances para evitar que o código execute em um loop infinito
let chancesPermitidas = 8
let chancesRealizadas = 0

alert(`\nVocê tem ${chancesPermitidas} chances para acertar o número secreto`)

do{
    let numeroEscolhido = prompt(`\nEscolha um número entre ${numeroMinimo} e ${numeroMaximo}: `);
    chancesRealizadas = ++chancesRealizadas;
    
    if (numeroEscolhido == numeroSecreto){
        alert(`\n #### Parabéns, você acertou o número secreto: ${numeroSecreto}, na ${chancesRealizadas}ª tentativa ####\n`);
        break;
    }
    else{
        alert(`\nO número digitado está incorreto: ${numeroEscolhido}`);
        if (numeroSecreto < numeroEscolhido){
            alert('O número secreto é menor que o número escolhido');
        }else{
            alert('O número secreto é maior que o número escolhido');
        }
        
        alert(`Você já tentou acertar o número ${chancesRealizadas} vez(es)`);
    }
} while(numeroEscolhido != numeroSecreto && chancesRealizadas < chancesPermitidas);
2 respostas

Versão final

alert('Boas vindas ao jogo do número secreto');

alert('Defina o nível de dificuldade do jogo');

let nivelJogo = prompt('Digite F para Fácil, M para Moderado e D para difícil: ');
nivelJogo = nivelJogo.toUpperCase();

let respostasValidas = new Array('F', 'M', 'D');

// Valida nível do jogo
// Define como moderado para respostas inválidas
if (!respostasValidas.includes(nivelJogo)){
    nivelJogo = 'M';
}
alert(`Nivel do jogo definido como: ${nivelJogo}`);


let numeroMaximo = 100;
let numeroMinimo = 1;
let quantidadeNumeros = numeroMaximo - numeroMinimo + 1;

// Define numeroSecreto aleatório
let numeroSecreto =  parseInt(Math.random() * numeroMaximo + 1); 
// Valida número mínimo
numeroSecreto = numeroSecreto < numeroMinimo ? numeroMinimo : numeroSecreto;

// Inicialização da variável
let numeroEscolhido; 

// debug do numeroSecreto, não deve ser exibido
//console.log(numeroSecreto); 
    

// Parametriza calculo de quantidade de chances de acordo com nível do jogo
let fatorChances = nivelJogo == 'F' ? 1 : nivelJogo == 'M' ? 0 : -1;

// Definir número de chances para evitar que o código execute em um loop infinito
// Definir numero de tentativas de acordo com a quantidade de números possíveis
let chancesPermitidas = Math.ceil(Math.log(quantidadeNumeros) / Math.log(2)) + fatorChances; 
let chancesRealizadas = 0;

alert(`\nVocê tem ${chancesPermitidas} chances para acertar o número secreto entre os ${quantidadeNumeros} números possíveis`);

do{
    let numeroEscolhido = parseInt(prompt(`\n#Escolha um número entre ${numeroMinimo} e ${numeroMaximo}: `));
    chancesRealizadas++;
    
    if (numeroEscolhido == numeroSecreto){
        alert(`\n#### Parabéns, você acertou o número secreto: ${numeroSecreto}, na ${chancesRealizadas}ª tentativa ####\n`);
        break;
    }
    else{
        alert(`\nO número digitado está incorreto: ${numeroEscolhido}`);
        if (numeroSecreto < numeroEscolhido){
            alert('O número secreto é menor que o número escolhido');
            numeroMaximo = nivelJogo == 'F' ? numeroEscolhido -1 : numeroMaximo;
        }else{
            alert('O número secreto é maior que o número escolhido');
            numeroMinimo = nivelJogo == 'F' ? numeroEscolhido +1 : numeroMinimo;
        }
        
        alert(`Você já tentou acertar o número ${chancesRealizadas} vez(es)`);
    }
} while(numeroEscolhido != numeroSecreto && chancesRealizadas < chancesPermitidas);

Olá, Jean! Tudo bem?

Fico feliz em ver que você está progredindo e aprendendo com os desafios!

Analisando seus códigos, posso dizer que você fez um excelente trabalho. Estão corretos e seguem as instruções do desafio.

Então, continue com o bom trabalho e não hesite em pedir ajuda sempre que precisar.

Bons estudos!