// Encapsular todo el script en una IIFE y asignarlo a TarotGame
const TarotGame = (function () {
// Arrays para almacenar las cartas
let arcanosMayores = [];
let grupoMenor1 = [];
let grupoMenor2 = [];
let grupoMenor3 = [];
// Variable para almacenar el grupo actual seleccionado
let grupoActual = 1;
// Variables para dividir el mazo
let mazoDividido = false;
let pilaDerecha = [];
let pilaIzquierda = [];
// Variable para la dirección de visualización
let direccionAscendente = true;
// Variable para el estado de las cartas (volteadas o no)
let cartasVolteadas = {};
// Variable para almacenar el tipo de tirada actual
let tipoActualTirada = 'tres';
// Función para inicializar las cartas
function inicializarCartas() {
console.log("Inicializando cartas...");
// Cargar Arcanos Mayores (22 cartas)
for (let i = 1; i <= 22; i++) {
let imgURL = `https://perlasdeclaridad.com/wp-content/uploads/cartas/mayores/${i}.jpg`;
arcanosMayores.push(imgURL);
}
// Cargar Arcanos Menores Grupo 1 (19 cartas)
for (let i = 1; i <= 19; i++) {
grupoMenor1.push(`https://perlasdeclaridad.com/wp-content/uploads/cartas/menores/grupo1/carta_${i}.jpg`);
}
// Cargar Arcanos Menores Grupo 2 (19 cartas)
for (let i = 1; i <= 19; i++) {
grupoMenor2.push(`https://perlasdeclaridad.com/wp-content/uploads/cartas/menores/grupo2/carta_${i}.jpg`);
}
// Cargar Arcanos Menores Grupo 3 (18 cartas)
for (let i = 1; i <= 18; i++) {
grupoMenor3.push(`https://perlasdeclaridad.com/wp-content/uploads/cartas/menores/grupo3/carta_${i}.jpg`);
}
// Inicializar cartasVolteadas
arcanosMayores.concat(grupoMenor1, grupoMenor2, grupoMenor3).forEach(carta => {
cartasVolteadas[carta] = false;
});
console.log("Cartas inicializadas correctamente.");
}
// Función para seleccionar un grupo de Arcanos Menores
function seleccionarGrupo(grupo) {
console.log(`Seleccionando Grupo ${grupo}`);
grupoActual = grupo;
mazoDividido = false;
limpiarLectura();
const botones = document.querySelectorAll('#botones-grupos button');
if (botones.length === 0) {
console.error('No se encontraron los botones de selección de grupo.');
return;
}
botones.forEach(btn => btn.classList.remove('seleccionado'));
if (botones[grupo - 1]) {
botones[grupo - 1].classList.add('seleccionado');
} else {
console.error(`No existe el botón para el grupo ${grupo}.`);
}
let cartasSeleccionadas = arcanosMayores.concat(
grupo === 1 ? grupoMenor1 :
grupo === 2 ? grupoMenor2 :
grupoMenor3
);
mostrarCartas(mezclarCartas(cartasSeleccionadas));
}
// Función para barajar según la dirección
function barajar(direccion) {
console.log(`Barajando en dirección: ${direccion}`);
reproducirSonido('sonido-barajar');
animarBoton(`button-barajar-${direccion}`);
let cartasSeleccionadas = obtenerCartasActuales();
let cartasMezcladas = mezclarCartas(cartasSeleccionadas, direccion);
mostrarCartas(cartasMezcladas);
}
// Función para dividir el mazo en dos pilas
function dividirMazo() {
if (mazoDividido) {
alert('El mazo ya está dividido.');
return;
}
console.log("Dividiendo el mazo...");
reproducirSonido('sonido-dividir');
animarBoton('button-dividir');
let cartasSeleccionadas = obtenerCartasActuales();
let cartasMezcladas = mezclarCartas(cartasSeleccionadas);
const mitad = Math.ceil(cartasMezcladas.length / 2);
pilaDerecha = cartasMezcladas.slice(0, mitad);
pilaIzquierda = cartasMezcladas.slice(mitad);
mazoDividido = true;
mostrarPilas();
}
// Función para cambiar la dirección de visualización
function cambiarDireccion() {
direccionAscendente = !direccionAscendente;
console.log(`Dirección de visualización: ${direccionAscendente ? 'Ascendente' : 'Descendente'}`);
mostrarCartasEnDireccion();
}
// Función para seleccionar el tipo de tirada
function tipoTirada(tipo) {
tipoActualTirada = tipo;
console.log(`Tipo de tirada seleccionada: ${tipo}`);
realizarTirada();
}
// Función para realizar la tirada según el tipo seleccionado
function realizarTirada() {
console.log("Realizando tirada...");
limpiarLectura();
let cartasSeleccionadas = obtenerCartasActuales();
let cartasMezcladas = mezclarCartas(cartasSeleccionadas);
if (tipoActualTirada === 'tres') {
mostrarLecturaTiradaTres(cartasMezcladas.slice(0, 3));
} else if (tipoActualTirada === 'cruz') {
mostrarLecturaCruzCelta(cartasMezcladas.slice(0, 10));
}
}
// Función para mezclar las cartas
function mezclarCartas(cartas, direccion = 'aleatoria') {
let cartasMezcladas = cartas.slice();
if (direccion === 'derecha') {
cartasMezcladas.reverse();
} else {
cartasMezcladas = fisherYatesShuffle(cartasMezcladas);
}
return cartasMezcladas;
}
// Algoritmo de Fisher-Yates para mezcla aleatoria
function fisherYatesShuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
// Función para mostrar las pilas de cartas
function mostrarPilas() {
console.log("Mostrando pilas de cartas.");
const gridContenedor = document.getElementById('grid-cartas');
const extraContenedor = document.getElementById('extra-cartas');
if (!gridContenedor || !extraContenedor) {
console.error('No se encontraron los contenedores de las cartas.');
return;
}
gridContenedor.innerHTML = '';
extraContenedor.innerHTML = '';
const cartasMostrar = pilaIzquierda.concat(pilaDerecha);
mostrarCartasEnContenedor(cartasMostrar, gridContenedor, 20);
mostrarCartasEnContenedor(cartasMostrar.slice(-2), extraContenedor, 2);
}
// Función para mostrar cartas en la dirección seleccionada
function mostrarCartasEnDireccion() {
let cartasSeleccionadas = obtenerCartasActuales();
if (!direccionAscendente) {
cartasSeleccionadas.reverse();
}
mostrarCartas(cartasSeleccionadas);
}
// Función para mostrar las cartas en el contenedor
function mostrarCartas(cartas) {
console.log("Mostrando cartas en el contenedor.");
const gridContenedor = document.getElementById('grid-cartas');
const extraContenedor = document.getElementById('extra-cartas');
if (!gridContenedor || !extraContenedor) {
console.error('No se encontraron los contenedores de cartas.');
return;
}
gridContenedor.innerHTML = '';
extraContenedor.innerHTML = '';
mostrarCartasEnContenedor(cartas, gridContenedor, 20);
mostrarCartasEnContenedor(cartas.slice(20, 22), extraContenedor, 2);
}
// Función auxiliar para mostrar cartas en un contenedor
function mostrarCartasEnContenedor(cartas, contenedor, limite) {
for (let i = 0; i < Math.min(cartas.length, limite); i++) {
let cartaDiv = crearCartaDiv(cartas[i]);
contenedor.appendChild(cartaDiv);
}
}
// Función para crear el elemento de una carta
function crearCartaDiv(rutaImagen) {
let cartaDiv = document.createElement('div');
cartaDiv.classList.add('carta');
let cartaInner = document.createElement('div');
cartaInner.classList.add('carta-inner');
let frente = document.createElement('div');
frente.classList.add('carta-frente');
frente.style.backgroundImage = `url(${rutaImagen})`;
let dorso = document.createElement('div');
dorso.classList.add('carta-dorso');
dorso.textContent = 'Arcángel';
cartaInner.appendChild(frente);
cartaInner.appendChild(dorso);
cartaDiv.appendChild(cartaInner);
// Añadir evento para voltear la carta
cartaInner.addEventListener('click', () => flipCarta(cartaInner, rutaImagen));
return cartaDiv;
}
// Función para voltear la carta
function flipCarta(cartaInner, rutaImagen) {
cartaInner.classList.toggle('flipped');
let isFlipped = cartaInner.classList.contains('flipped');
cartasVolteadas[rutaImagen] = isFlipped;
console.log(`Carta volteada: ${rutaImagen}, Estado: ${isFlipped}`);
if (isFlipped) {
mostrarLectura(rutaImagen);
} else {
eliminarLectura(rutaImagen);
}
}
// Función para mostrar la lectura de Tarot
function mostrarLectura(rutaImagen) {
const lecturaDiv = document.getElementById('lectura');
const significados = {
'https://perlasdeclaridad.com/wp-content/uploads/cartas/mayores/1.jpg': 'Arcángel Miguel: Protección y liderazgo.',
'https://perlasdeclaridad.com/wp-content/uploads/cartas/mayores/2.jpg': 'Arcángel Gabriel: Comunicación y mensajero.',
'https://perlasdeclaridad.com/wp-content/uploads/cartas/mayores/3.jpg': 'Arcángel Rafael: Sanación y bienestar.',
'https://perlasdeclaridad.com/wp-content/uploads/cartas/mayores/4.jpg': 'Arcángel Uriel: Sabiduría y claridad.',
// Añade más significados según sea necesario
};
const significado = significados[rutaImagen] || 'Significado no disponible.';
const nombreCarta = obtenerNombreCarta(rutaImagen);
lecturaDiv.innerHTML += `
Carta: ${nombreCarta} Significado: ${significado}
`;
}
// Función para obtener el nombre de la carta según la URL
function obtenerNombreCarta(rutaImagen) {
const partes = rutaImagen.split('/');
const nombreArchivo = partes[partes.length - 1];
return nombreArchivo.split('.')[0].replace(/_/g, ' ').replace(/\d+/g, '').trim();
}
// Función para eliminar la lectura al voltear la carta hacia atrás
function eliminarLectura(rutaImagen) {
const lecturaDiv = document.getElementById('lectura');
const cartas = lecturaDiv.querySelectorAll('p');
cartas.forEach(p => {
if (p.textContent.includes(rutaImagen)) {
p.remove();
}
});
}
// Función para limpiar la lectura
function limpiarLectura() {
document.getElementById('lectura').innerHTML = '';
}
// Función para guardar una consulta
function guardarConsulta() {
const lecturaDiv = document.getElementById('lectura');
const lecturaHTML = lecturaDiv.innerHTML;
if (lecturaHTML.trim() === '') {
alert('No hay lectura para guardar.');
return;
}
try {
let consultas = JSON.parse(localStorage.getItem('consultasTarot')) || [];
consultas.push({
fecha: new Date().toLocaleString(),
lectura: lecturaHTML
});
localStorage.setItem('consultasTarot', JSON.stringify(consultas));
alert('Consulta guardada exitosamente.');
limpiarLectura();
} catch (error) {
console.error('Error al guardar la consulta:', error);
alert('Hubo un error al guardar la consulta. Por favor, intente de nuevo.');
}
}
// Función para mostrar las consultas guardadas
function mostrarConsultas() {
const listaConsultasDiv = document.getElementById('lista-consultas');
listaConsultasDiv.innerHTML = '';
try {
let consultas = JSON.parse(localStorage.getItem('consultasTarot')) || [];
if (consultas.length === 0) {
listaConsultasDiv.innerHTML = '
`;
listaConsultasDiv.appendChild(consultaDiv);
});
} catch (error) {
console.error('Error al mostrar las consultas:', error);
listaConsultasDiv.innerHTML = '
Error al cargar las consultas guardadas.
';
}
}
// Función para eliminar todas las consultas guardadas
function eliminarConsultas() {
if (confirm('¿Estás seguro de que deseas eliminar todas las consultas guardadas?')) {
try {
localStorage.removeItem('consultasTarot');
alert('Todas las consultas han sido eliminadas.');
document.getElementById('lista-consultas').innerHTML = '
No hay consultas guardadas.
';
} catch (error) {
console.error('Error al eliminar las consultas:', error);
alert('Hubo un error al eliminar las consultas.');
}
}
}
// Función para obtener todas las cartas actuales según el grupo seleccionado
function obtenerCartasActuales() {
return arcanosMayores.concat(
grupoActual === 1 ? grupoMenor1 :
grupoActual === 2 ? grupoMenor2 :
grupoMenor3
);
}
// Función para reproducir sonidos
function reproducirSonido(idSonido) {
const sonido = document.getElementById(idSonido);
if (!sonido) {
console.error(`No se encontró el sonido con ID: ${idSonido}`);
return;
}
sonido.currentTime = 0;
sonido.play();
}
// Función para animar botones
function animarBoton(boton) {
const btn = document.querySelector(`#${boton}`);
if (!btn) {
console.error(`No se encontró el botón con el ID: ${boton}`);
return;
}
btn.classList.add('barajando');
setTimeout(() => btn.classList.remove('barajando'), 500);
}
// Funciones para tiradas específicas
function mostrarLecturaTiradaTres(cartas) {
console.log("Mostrando tirada de tres cartas.");
const lecturaDiv = document.getElementById('lectura');
lecturaDiv.innerHTML = '
`;
});
}
// Función para obtener el significado de una carta
function obtenerSignificado(rutaImagen) {
const significados = {
'https://perlasdeclaridad.com/wp-content/uploads/cartas/mayores/1.jpg': 'Arcángel Miguel: Protección y liderazgo.',
'https://perlasdeclaridad.com/wp-content/uploads/cartas/mayores/2.jpg': 'Arcángel Gabriel: Comunicación y mensajero.',
'https://perlasdeclaridad.com/wp-content/uploads/cartas/mayores/3.jpg': 'Arcángel Rafael: Sanación y bienestar.',
'https://perlasdeclaridad.com/wp-content/uploads/cartas/mayores/4.jpg': 'Arcángel Uriel: Sabiduría y claridad.',
// Añade más significados según sea necesario
};
return significados[rutaImagen] || 'Significado no disponible.';
}
// Inicializar las cartas al cargar la página
window.onload = function () {
inicializarCartas();
seleccionarGrupo(1); // Seleccionar el grupo 1 por defecto
};
// Hacer funciones accesibles
return {
seleccionarGrupo,
barajar,
dividirMazo,
cambiarDireccion,
tipoTirada,
guardarConsulta,
mostrarConsultas,
eliminarConsultas
};
})();