Игра "пары" на Java Script

Есть игра "пары" на JS, но когда все пары отгаданы ничего не происходит. Подскажите, как реализовать алерт "игра окончена" и чтобы игра начиналась сначала

const cards = document.querySelectorAll('.memory-card');

let hasFlippedCard = false;
let lockBoard = false;
let firstCard, secondCard;

function flipCard() {

    if (lockBoard) return;
    if (this === firstCard) return;
    this.classList.add('flip');

    if (!hasFlippedCard) {
        hasFlippedCard = true;
        firstCard = this;
        return;
    }

    secondCard = this;
        
    checkForMatch();
    
}
        
function checkForMatch() {

    let isMatch = firstCard.dataset.framework === secondCard.dataset.framework;
    isMatch ? disableCards() : unflipCards();

}
        
function disableCards() {

    firstCard.removeEventListener('click', flipCard);
    secondCard.removeEventListener('click', flipCard);

    resetBoard();

}
        
function unflipCards() {

    lockBoard = true;

    setTimeout(() => {
        firstCard.classList.remove('flip');
        secondCard.classList.remove('flip');

        resetBoard();

    }, 1500);

}

function resetBoard() {

    [hasFlippedCard, lockBoard] = [false, false];
    [firstCard, secondCard] = [null, null];

}

(function shuffle() {

    cards.forEach(card => {
        let ramdomPos = Math.floor(Math.random() * 12);
        card.style.order = ramdomPos;
    });

})();

cards.forEach(card => card.addEventListener('click', flipCard));
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles/style.css" type="text/css">
    <script src="scripts/script.js" defer></script>
    <title>Document</title>
</head>
<body>
    <section class="memory-game">
        <div class="memory-card" data-framework="1">
            <img class="front-face" src="img/1.svg" alt="1">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="1">
            <img class="front-face" src="img/1.svg" alt="1">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="3">
            <img class="front-face" src="img/3.svg" alt="3">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="3">
            <img class="front-face" src="img/3.svg" alt="3">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="4">
            <img class="front-face" src="img/4.svg" alt="4">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="4">
            <img class="front-face" src="img/4.svg" alt="4">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="5">
            <img class="front-face" src="img/5.svg" alt="5">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="5">
            <img class="front-face" src="img/5.svg" alt="5">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="6">
            <img class="front-face" src="img/6.svg" alt="6">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="6">
            <img class="front-face" src="img/6.svg" alt="6">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="7">
            <img class="front-face" src="img/7.svg" alt="7">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="7">
            <img class="front-face" src="img/7.svg" alt="7">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      </section>
</body>
</html>


Ответы (1 шт):

Автор решения: Igor

const cards = document.querySelectorAll('.memory-card');

let hasFlippedCard = false;
let lockBoard = false;
let firstCard, secondCard;

function flipCard() {
    if (lockBoard) return;
    if (this === firstCard) return;
    this.classList.add('flip');

    if (!hasFlippedCard) {
        hasFlippedCard = true;
        firstCard = this;
        return;
    }

    secondCard = this;
        
    checkForMatch();
    
    if (document.querySelectorAll('.memory-card').length == document.querySelectorAll('.memory-card.flip').length) {
      console.log("game over");
      document.querySelectorAll('.memory-card.flip').forEach(c => c.classList.remove('flip'));
    }
}
        
function checkForMatch() {

    let isMatch = firstCard.dataset.framework === secondCard.dataset.framework;
    isMatch ? disableCards() : unflipCards();

}
        
function disableCards() {

    firstCard.removeEventListener('click', flipCard);
    secondCard.removeEventListener('click', flipCard);

    resetBoard();

}
        
function unflipCards() {

    lockBoard = true;

    setTimeout(() => {
        firstCard.classList.remove('flip');
        secondCard.classList.remove('flip');

        resetBoard();

    }, 1500);

}

function resetBoard() {

    [hasFlippedCard, lockBoard] = [false, false];
    [firstCard, secondCard] = [null, null];

}

(function shuffle() {

    cards.forEach(card => {
        let ramdomPos = Math.floor(Math.random() * 12);
        card.style.order = ramdomPos;
    });

})();

cards.forEach(card => card.addEventListener('click', flipCard));
.flip {
  border: 1px solid black;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles/style.css" type="text/css">
    <script src="scripts/script.js" defer></script>
    <title>Document</title>
</head>
<body>
    <section class="memory-game">
        <div class="memory-card" data-framework="1">
            <img class="front-face" src="img/1.svg" alt="1">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="1">
            <img class="front-face" src="img/1.svg" alt="1">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="3">
            <img class="front-face" src="img/3.svg" alt="3">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="3">
            <img class="front-face" src="img/3.svg" alt="3">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="4">
            <img class="front-face" src="img/4.svg" alt="4">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="4">
            <img class="front-face" src="img/4.svg" alt="4">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="5">
            <img class="front-face" src="img/5.svg" alt="5">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="5">
            <img class="front-face" src="img/5.svg" alt="5">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="6">
            <img class="front-face" src="img/6.svg" alt="6">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="6">
            <img class="front-face" src="img/6.svg" alt="6">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="7">
            <img class="front-face" src="img/7.svg" alt="7">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      
        <div class="memory-card" data-framework="7">
            <img class="front-face" src="img/7.svg" alt="7">
            <img class="back-face" src="img/card-game.svg" alt="card-game">
        </div>
      </section>
</body>
</html>

→ Ссылка