index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Memory Game</title> <link rel="stylesheet" href="styles.css"> </head> <body> <div class="memory-game" id="memory-game"></div> <script src="script.js"></script> </body> </html>
styles.css
.memory-game {
    display: flex;
    flex-wrap: wrap;
    width: 400px;
    height: 400px;
    margin: 20px auto;
    perspective: 1000px;
  }
  
  .card {
    width: calc(25% - 10px);
    height: calc(25% - 10px);
    margin: 5px;
    position: relative;
    transform-style: preserve-3d;
    transition: transform 0.5s;
    cursor: pointer;
  }
  
  .card.flip {
    transform: rotateY(180deg);
  }
  
  .card-inner {
    position: absolute;
    width: 100%;
    height: 100%;
    text-align: center;
    line-height: calc(25% - 10px);
    backface-visibility: hidden;
  }
  
  .front-face,
  .back-face {
    width: 100%;
    height: 100%;
    position: absolute;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 24px;
    background-color: #f0f0f0;
    border: 1px solid #ccc;
  }
script.js
const cards = ['🍎', '🍊', '🍋', '🍉', '🍇', '🥥', '🍍', '🥝'];
let firstCard = null;
let secondCard = null;
let lockBoard = false;
let pairsMatched = 0;
const memoryGame = document.getElementById('memory-game');
function createCard(cardContent) {
  const card = document.createElement('div');
  card.classList.add('card');
  const cardInner = document.createElement('div');
  cardInner.classList.add('card-inner');
  const frontFace = document.createElement('div');
  frontFace.classList.add('front-face');
  frontFace.innerText = '';
  const backFace = document.createElement('div');
  backFace.classList.add('back-face');
  backFace.innerText = cardContent;
  cardInner.appendChild(frontFace);
  cardInner.appendChild(backFace);
  card.appendChild(cardInner);
  card.addEventListener('click', flipCard);
  return card;
}
function flipCard() {
  if (lockBoard) return;
  if (this === firstCard) return;
  this.classList.add('flip');
  if (!firstCard) {
    firstCard = this;
    return;
  }
  secondCard = this;
  checkForMatch();
}
function checkForMatch() {
  const isMatch = firstCard.querySelector('.back-face').innerText === secondCard.querySelector('.back-face').innerText;
  isMatch ? disableCards() : unflipCards();
}
function disableCards() {
  firstCard.removeEventListener('click', flipCard);
  secondCard.removeEventListener('click', flipCard);
  resetBoard();
  pairsMatched++;
  if (pairsMatched === cards.length) {
    setTimeout(() => alert('Congratulations! You won!'), 500);
  }
}
function unflipCards() {
  lockBoard = true;
  setTimeout(() => {
    firstCard.classList.remove('flip');
    secondCard.classList.remove('flip');
    resetBoard();
  }, 1000);
}
function resetBoard() {
  [firstCard, secondCard] = [null, null];
  lockBoard = false;
}
function initializeGame() {
  const shuffledCards = [...cards, ...cards].sort(() => Math.random() - 0.5);
  shuffledCards.forEach(cardContent => {
    const card = createCard(cardContent);
    memoryGame.appendChild(card);
  });
}
initializeGame();