Seleccionar página
Juego Digital de Tarot

Juego Digital de Tarot

Email

tarot@perlasdeclaridad.com

Phone

(+34) 806 533 708

Social Media

// 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 = '

No hay consultas guardadas.

'; return; } consultas.forEach((consulta, index) => { let consultaDiv = document.createElement('div'); consultaDiv.classList.add('consulta'); consultaDiv.innerHTML = `

Consulta ${index + 1}: ${consulta.fecha}

${consulta.lectura}
`; 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 = '

Tirada de Tres Cartas

'; cartas.forEach(carta => { const significado = obtenerSignificado(carta); const nombreCarta = obtenerNombreCarta(carta); lecturaDiv.innerHTML += `

Carta: ${nombreCarta}
Significado: ${significado}

`; }); } function mostrarLecturaCruzCelta(cartas) { console.log("Mostrando tirada de Cruz Celta."); const lecturaDiv = document.getElementById('lectura'); lecturaDiv.innerHTML = '

Tirada de Cruz Celta

'; cartas.forEach((carta, index) => { const significado = obtenerSignificado(carta); const nombreCarta = obtenerNombreCarta(carta); lecturaDiv.innerHTML += `

Carta ${index + 1}: ${nombreCarta}
Significado: ${significado}

`; }); } // 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 }; })();