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

Projeto Amigo Secreto

Implementei uma alteração na lógica do script em relação à sugestão original do curso. Como a proposta era criar um sorteio secreto, identifiquei que exibir todos os resultados na tela comprometeria esse objetivo. Para contornar isso, adaptei o sistema para que cada participante visualize apenas quem tirou, mantendo o sigilo do sorteio. Por se tratar de um exercício, procurei manter o foco no JavaScript, realizando apenas ajustes pontuais no HTML e CSS.

https://github.com/JACursino/ingressos.git

let amigos = [];
let amigosEmbaralhados = [];
let sorteioFeito = false; // Variável para controlar se o sorteio já foi feito


function adicionar() {
  let nomeAmigo = document.getElementById("nome-amigo");
  let listaAmigos = document.getElementById("lista-amigos");
  let nomeDigitado = nomeAmigo.value.trim();

  if (!nomeValido(nomeDigitado)) {
    return;
  }

  amigos.push(nomeDigitado);

  // Atualiza a lista de amigos na tela
  listaAmigos.textContent = amigos.join(', ');

  // Limpa o campo e mantém o foco
  nomeAmigo.value = '';
  nomeAmigo.focus();
}

function nomeValido(nome) {
  if (nome.trim() === '') {
    alert("Por favor, insira um nome!");
    return false;
  }

  let formatoCorreto = /^[A-Za-zÀ-ÿ\s]+$/;
  if (!formatoCorreto.test(nome)) {
    alert("Use apenas letras e espaços — sem números ou símbolos!");
    return false;
  }

  let nomeParaComparar = nome.toLowerCase();
  let existe = amigos.some(a => a.toLowerCase() === nomeParaComparar); /* Fiz uma tentativa usando o findIndex no lugar do some, mais não consegui o resultado esperado*/
  if (existe) {
    alert("Este nome já foi adicionado!");
    return false;
  }

  return true;
}

function sortear() {
  if (amigos.length < 2) {
    alert("Adicione pelo menos 2 amigos para sortear!");
    return;
  }

  // Se o sorteio ainda não foi feito, embaralha os pares
  if (!sorteioFeito) {
    amigosEmbaralhados = [...amigos].sort(() => Math.random() - 0.5);

    // Garante que ninguém tire a si mesmo
    for (let i = 0; i < amigos.length; i++) {
      if (amigosEmbaralhados[i] === amigos[i]) {
        let temp = amigosEmbaralhados[i];
        amigosEmbaralhados[i] = amigosEmbaralhados[(i + 1) % amigos.length];
        amigosEmbaralhados[(i + 1) % amigos.length] = temp;
      }
    }

    sorteioFeito = true;
    alert("Sorteio realizado! Agora digite seu nome para ver quem você tirou.");
  }

  // Pede o nome do participante para revelar quem ele tirou
  let nomeParticipante = prompt("Digite seu nome para ver quem você tirou:");

  // Verifica se o nome existe na lista
  let indice = amigos.indexOf(nomeParticipante);
  if (indice === -1) {
    alert("Nome não encontrado na lista de participantes!");
    return;
  }

  // Exibe apenas o amigo que o participante tirou
  alert(`Você tirou: ${amigosEmbaralhados[indice]}`);
}

function reiniciar() {
  amigos = [];
  document.getElementById("lista-amigos").textContent = '';
  document.getElementById("lista-sorteio").textContent = '';
  document.getElementById("nome-amigo").value = '';
  document.getElementById("nome-amigo").focus();
}

// Seleciona o container onde o resultado do sorteio era exibido
const containerSorteio = document.querySelector(".prizeDraw__container p#lista-sorteio");

// Define o texto explicativo com formatação inline
containerSorteio.innerHTML = `
  <span style="font-size: 18px; color: #333ecfff;">
    <strong>-</strong> Após o sorteio, clique novamente em "Sortear" e digite seu nome para descobrir quem você tirou.<br><br>
    <strong>Regra importante:</strong> Não revele para ninguém quem você tirou! O segredo é fundamental.
  </span>
`;

Fiz uma avaliação com a Luri, e encontramos diversos pontos a ainda a melhorar no script, pretendo fazer ao final do curso em uma nova versão

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas
solução!

Oi, José! Como vai?

Agradeço por compartilhar.

Gostei muito da sua adaptação no projeto Amigo Secreto, mantendo o foco no sigilo do sorteio e aprimorando a lógica em JavaScript. Essa é uma forma excelente de praticar o raciocínio lógico e pensar na experiência do usuário.

Continue aprimorando sua versão ao final do curso, como mencionou

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

Obrigado