// memoria/script.js (function () { const cards = document.querySelectorAll(".card"); const totalPairs = cards.length / 2; let matched = 0; let cardOne = null, cardTwo = null; let disableDeck = false; const startTime = Date.now(); function flipCard({ target: clickedCard }) { if (disableDeck || clickedCard === cardOne || clickedCard.classList.contains("flip")) return; clickedCard.classList.add("flip"); if (!cardOne) { cardOne = clickedCard; return; } cardTwo = clickedCard; disableDeck = true; const k1 = cardOne.getAttribute("data-key"); const k2 = cardTwo.getAttribute("data-key"); matchCards(k1, k2); } function matchCards(k1, k2) { if (k1 === k2) { matched++; cardOne.removeEventListener("click", flipCard); cardTwo.removeEventListener("click", flipCard); cardOne = cardTwo = null; disableDeck = false; if (matched === totalPairs) { // Juego terminado setTimeout(onGameFinished, 600); } return; } setTimeout(() => { cardOne.classList.add("shake"); cardTwo.classList.add("shake"); }, 300); setTimeout(() => { cardOne.classList.remove("shake", "flip"); cardTwo.classList.remove("shake", "flip"); cardOne = cardTwo = null; disableDeck = false; }, 1000); } function onGameFinished() { const elapsedMs = Date.now() - startTime; const C = window.MEMORIA_CONFIG || {}; const juego_id = C.juego_id || 1; // Registrar jugada y obtener premio (usando la ruleta vinculada en la config del juego) fetch("registrar_jugada.php", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ juego_id, elapsed_ms: elapsedMs, aciertos: matched, // ruleta_id es opcional aquí; el servidor puede leerlo de la config }), }) .then(r => r.json()) .then(data => { const nombrePremio = data && data.premio ? data.premio : "¡Completado!"; mostrarConfetiConTexto(nombrePremio); // Si quieres, podrías reiniciar el mazo o redirigir: // setTimeout(() => location.reload(), 2500); }) .catch(err => { console.error(err); mostrarConfetiConTexto("¡Completado!"); }); } // Eventos cards.forEach(card => card.addEventListener("click", flipCard)); function toggleFullScreen() { if (!document.fullscreenElement) { document.documentElement.requestFullscreen().catch(err => console.log(err)); } else { document.exitFullscreen().catch(err => console.log(err)); } } document.getElementById("fullscreen-btn").addEventListener("click", toggleFullScreen); // Confeti function mostrarConfetiConTexto(texto = "") { const duration = 4000, end = Date.now() + duration; (function frame() { confetti({ particleCount: 7, angle: 60, spread: 55, origin: { x: 0 }, scalar: 1.1 }); confetti({ particleCount: 7, angle: 120, spread: 55, origin: { x: 1 }, scalar: 1.1 }); if (Date.now() < end) requestAnimationFrame(frame); })(); if (texto) console.log("🎉 Premio:", texto); } })();