2
respostas

Meu codigo nao esta eliminando os numeros que ja foram sorteados, alguem me ajuda

let listaDeNumerosSorteados = [];
let numeroLimite = 10;
let numeroSecreto = gerarNumeroAleatorio();
let tentativas = 1;
function exibirTextoNaTela(tag, texto) {
let campo = document.querySelector(tag);
campo.innerHTML= texto;
}
function exibirMensagemInicial () {
exibirTextoNaTela('h1', 'Jogo do número secreto');
exibirTextoNaTela('p', 'Escolha um número entre 1 e 10');
}
exibirMensagemInicial();
function verificarChute() {
let chute = document.querySelector('input').value;
if (chute == numeroSecreto) {
exibirTextoNaTela('h1','Acertou!');
let palavraTentativa = tentativas > 1 ? 'tentativas' : 'tentativa';
let mensagemTentativas = Você acertou o número secreto com ${tentativas} ${palavraTentativa};
exibirTextoNaTela('p', mensagemTentativas);
document.getElementById('reiniciar').removeAttribute('disabled');
} else {
if (chute > numeroSecreto) {
exibirTextoNaTela('p','O número secreto é menor');
} else {
exibirTextoNaTela('p','O número secreto é maior');
}
tentativas++;
limparCampo();
}
}

function gerarNumeroAleatorio() {
let numeroEscolhido = parseInt(Math.random() * numeroLimite + 1 );
let quantidadeDeElementosEscolhido =listaDeNumerosSorteados.length;
if (quantidadeDeElementosEscolhido == numeroLimite) {
listaDeNumerosSorteados = [];
}
if (listaDeNumerosSorteados.includes(numeroEscolhido)) {
return gerarNumeroAleatorio();
} else {
listaDeNumerosSorteados.push(numeroEscolhido);
console.log(listaDeNumerosSorteados);
return numeroEscolhido;
}
}
function limparCampo() {
chute = document.querySelector('input');
chute.value = '';
}
function reiniciarJogo() {
numeroSecreto = gerarNumeroAleatorio();
limparCampo();
tentativas = 1;
exibirMensagemInicial();
document.getElementById('reiniciar').setAttribute('disabled', true);
}

2 respostas

Olá Wesley!
Creio que o problema está no fluxo de quando o número secreto é gerado e atualizado, e na forma que você tenta evitar números repetidos.
O problema principal que você gera o número secreto uma vez no início e nunca muda ele a não ser que o jogo seja reiniciado. A função gerarNumeroAleatorio() impede números repetidos na lista listaDeNumerosSorteados — porém, essa lista só é atualizada quando você chama a função para gerar um novo número. Se o número secreto for fixo até o reinício, você não está eliminando os números já sorteados durante o jogo.
Para resolver precisa atualizar o número secreto toda vez que um novo número for necessário, evitando repetir os números já sorteados. E certificar que, quando todos os números possíveis forem usados, a lista listaDeNumerosSorteados seja zerada.
Ajuste para garantir que o número secreto não se repita nos jogos reiniciados:

function gerarNumeroAleatorio() {
    if (listaDeNumerosSorteados.length === numeroLimite) {
        listaDeNumerosSorteados = [];
    }

    let numeroEscolhido;
    do {
        numeroEscolhido = Math.floor(Math.random() * numeroLimite) + 1;
    } while (listaDeNumerosSorteados.includes(numeroEscolhido));

    listaDeNumerosSorteados.push(numeroEscolhido);
    console.log(listaDeNumerosSorteados);
    return numeroEscolhido;
}

E na função reiniciarJogo(), o número secreto será atualizado:

function reiniciarJogo() {
    numeroSecreto = gerarNumeroAleatorio();
    limparCampo();
    tentativas = 1;
    exibirMensagemInicial();
    document.getElementById('reiniciar').setAttribute('disabled', true);
}

Outra questão que vi no seu código: na linha onde você define mensagemTentativas, o texto está sem as aspas corretas e interpolação.

let mensagemTentativas = `Você acertou o número secreto com ${tentativas} ${palavraTentativa}`;

Use crases para template strings.