1
resposta

[Projeto] amigo secreto, o que acham?

Segue o código:


let amigos = ['a','b','c','d'];
let sorteados = [];

let campo = document.getElementById('lista-sorteio');
let listaAmigos = document.getElementById('lista-amigos');

// desbloquear botão
let botoes = document.querySelectorAll('button.primary, button.secondary');
for (let botao of botoes) {
    botao.disabled = false;   
}




// adicionar amigo
function adicionar() {
    let amigo = primeiraMaiuscula(document.getElementById('nome-amigo').value);
    if (isNaN(amigo)) {
        if (amigos.includes(amigo)) {
            alert('Este amigo já está na lista')
        } else {
            amigos.push(amigo);
            console.log(amigo);
            if (amigos.length == 1) {
                listaAmigos.textContent += amigo;
            } else {
                listaAmigos.textContent += " - " + amigo;
            }
        }        
    } else {
        alert('Você precisa digitar o nome de um amigo')
    }
    limparCampo();
    

    
}

// limpar entrada de nomes
function limparCampo() {
    document.getElementById('nome-amigo').value = "";
}

// função para deixar apenas a primeira letra maiúscula
function primeiraMaiuscula(str) {
    return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
  }
  
// reiniciar sorteio
function reiniciar() {
    amigos = [];
    sorteados = [];
    document.getElementById('lista-amigos').textContent = "";
    campo.innerHTML = `<p id="lista-sorteio"></p>`
    
    // desbloquear botão
    for (let botao of botoes) {
        botao.disabled = false;
        botao.classList.remove('gray');   
    }
}

function sortear() {   
    let numero;
    let i = 1;

    if (amigos.length > 3) {
        // bloquear botões
        for (let botao of botoes) {
            botao.disabled = true;
            botao.classList.add('gray');
        }
       
        //lógica do sorteio baseada em duas listas cujos indices determinam quem tirou quem
        
        numero = Math.floor(Math.random() * (amigos.length - 0));

        while (amigos[numero] == amigos[0]) {
            numero = Math.floor(Math.random() * (amigos.length - 0));
        }
        sorteados.push(amigos[numero]);
        while (sorteados.length < amigos.length) {
            if (amigos[numero] == amigos[i] || sorteados.includes(amigos[numero])) {
                numero = Math.floor(Math.random() * (amigos.length - 0));
            } else {
                sorteados.push(amigos[numero]);
                console.log(`Amigos:    ${amigos}`);
                console.log(`Sorteados: ${sorteados}`);
                i++   
            }
            
                
           
        }
        for (let j = 0; j < amigos.length; j++) {
            campo.innerHTML += `<p id="lista-sorteio">${amigos[j]} -> ${sorteados[j]}</p>`;
        }
    } else {

        // obs 3 amigos ainda tem a possibilidade de alguém sobrar: A->B B->A C->C; por isso optei por 4

        alert("Cadastre pelo menos 4 amigos.");
    }
}

A pergunta que faço é se não está muito na base da gambiarra porque ainda não vi a resolução na aula. E aÍ, o que acham?

1 resposta

Oi, Alexandre! Tudo bem?

Excelente código, parabéns pelo projeto! Espero que esteja gostando do curso! Colocar em execução as atividades propostas pelo professor em aula é uma prática muito importante para internalizarmos o conteúdo. Caso tenha ficado alguma dúvida em relação ao curso ou atividade, sinta-se à vontade em comunicar, estou à disposição e ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!