const shuffle = (array) => {
let currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
};
const gameBoard = document.querySelector(".game-board");
const cardIds = Array.from({length: 8}, (_, i) => i).concat(Array.from({length: 8}, (_, i) => i));
let prevCard = null;
let cardsLeft = 16;
let attemptsCount = 0;
const attemptsElem = document.querySelector(".attempts");
const cardStates = {
0: 'card',
1: 'card flipped',
};
const createCards = () => {
const shuffledIds = shuffle(cardIds);
gameBoard.innerHTML = "";
shuffledIds.forEach((id) => {
const card = document.createElement("div");
card.innerHTML = `<img src="img-${id}.jpg" alt="">`;
card.setAttribute("data-id", id);
card.className = cardStates[0];
card.addEventListener("click", handleClick);
gameBoard.appendChild(card);
});
};
const handleClick = (e) => {
const card = e.currentTarget;
if (card === prevCard) return;
attemptsCount++;
attemptsElem.textContent = `${attemptsCount}`;
card.className = cardStates[1];
card.querySelector('img').style.display = 'block';
if (!prevCard) {
prevCard = card;
} else {
if (card.getAttribute('data-id') === prevCard.getAttribute('data-id')) {
cardsLeft -= 2;
if (cardsLeft === 0) {
setTimeout(() => {
alert('¡Has ganado!');
}, 500);
}
card.removeEventListener('click', handleClick);
prevCard.removeEventListener('click', handleClick);
prevCard = null;
} else {
card.style.pointerEvents = 'none';
prevCard.style.pointerEvents = 'none';
setTimeout(() => {
card.className = cardStates[0];
card.querySelector('img').style.display = 'none';
prevCard.className = cardStates[0];
prevCard.querySelector('img').style.display = 'none';
card.style.pointerEvents = 'initial';
prevCard.style.pointerEvents = 'initial';
prevCard = null;
}, 1000);
}
}
};
const restartGame = () => {
prevCard = null;
cardsLeft = 16;
attemptsCount = 0;
attemptsElem.textContent = "0";
createCards();
};
createCards();