Files
juego-de-memoria/script.js
T
2026-05-09 12:17:01 -04:00

109 lines
2.8 KiB
JavaScript

const cards = document.querySelectorAll(".card");
let matched = 0;
let cardOne, cardTwo;
let disableDeck = false;
function flipCard({target: clickedCard}) {
if(cardOne !== clickedCard && !disableDeck) {
clickedCard.classList.add("flip");
if(!cardOne) {
return cardOne = clickedCard;
}
cardTwo = clickedCard;
disableDeck = true;
let cardOneImg = cardOne.querySelector(".back-view img").src,
cardTwoImg = cardTwo.querySelector(".back-view img").src;
matchCards(cardOneImg, cardTwoImg);
}
}
function matchCards(img1, img2) {
if(img1 === img2) {
matched++;
if(matched == 6) {
setTimeout(() => {
mostrarConfetiConTexto();
shuffleCard();
}, 1000);
}
cardOne.removeEventListener("click", flipCard);
cardTwo.removeEventListener("click", flipCard);
cardOne = cardTwo = "";
return disableDeck = false;
}
setTimeout(() => {
cardOne.classList.add("shake");
cardTwo.classList.add("shake");
}, 400);
setTimeout(() => {
cardOne.classList.remove("shake", "flip");
cardTwo.classList.remove("shake", "flip");
cardOne = cardTwo = "";
disableDeck = false;
}, 1200);
}
function shuffleCard() {
matched = 0;
disableDeck = false;
cardOne = cardTwo = "";
let arr = [1,1,2,2,3,3,4,4,5,5,6,6];
arr.sort(() => Math.random() > 0.5 ? 1 : -1);
cards.forEach((card, i) => {
card.classList.remove("flip");
let imgTag = card.querySelector(".back-view img");
imgTag.src = `images/img-${arr[i]}.png`;
card.addEventListener("click", flipCard);
});
}
shuffleCard();
cards.forEach(card => {
card.addEventListener("click", flipCard);
});
function toggleFullScreen() {
if (!document.fullscreenElement) {
document.documentElement.requestFullscreen().catch(err => {
console.log(`Error al intentar activar pantalla completa: ${err.message}`);
});
} else {
document.exitFullscreen();
}
}
document.addEventListener("DOMContentLoaded", function () {
document.getElementById("fullscreen-btn").addEventListener("click", toggleFullScreen);
});
// Mostrar confeti con texto
function mostrarConfetiConTexto(texto) {
const duration = 5 * 1000;
const end = Date.now() + duration;
(function frame() {
confetti({
particleCount: 7,
angle: 60,
spread: 55,
origin: { x: 0 },
scalar: 1.2,
});
confetti({
particleCount: 7,
angle: 120,
spread: 55,
origin: { x: 1 },
scalar: 1.2,
});
if (Date.now() < end) {
requestAnimationFrame(frame);
}
})();
console.log("¡Felicidades! Ganaste: " + texto);
}