159 lines
4.3 KiB
JavaScript
159 lines
4.3 KiB
JavaScript
const cardsArray = [
|
|
{ name: 'v1', img: 'img/v1.jpg' },
|
|
{ name: 'v2', img: 'img/v2.jpg' },
|
|
{ name: 'v3', img: 'img/v3.jpg' },
|
|
{ name: 'v4', img: 'img/v4.jpg' },
|
|
{ name: 'v5', img: 'img/v5.jpg' },
|
|
{ name: 'v6', img: 'img/v6.jpg' },
|
|
{ name: 'v7', img: 'img/v7.jpg' },
|
|
{ name: 'v8', img: 'img/v8.jpg' }
|
|
];
|
|
|
|
let gameGrid = cardsArray.concat(cardsArray).sort(() => 0.5 - Math.random());
|
|
|
|
const game = document.querySelector('.memory-game');
|
|
|
|
gameGrid.forEach(item => {
|
|
const card = document.createElement('div');
|
|
card.classList.add('memory-card');
|
|
card.dataset.name = item.name;
|
|
|
|
const frontFace = document.createElement('img');
|
|
frontFace.classList.add('front-face');
|
|
frontFace.src = item.img;
|
|
|
|
const backFace = document.createElement('div');
|
|
backFace.classList.add('back-face');
|
|
|
|
card.appendChild(frontFace);
|
|
card.appendChild(backFace);
|
|
game.appendChild(card);
|
|
});
|
|
|
|
const cards = document.querySelectorAll('.memory-card');
|
|
let hasFlippedCard = false;
|
|
let lockBoard = false;
|
|
let firstCard, secondCard;
|
|
let matchCount = 0;
|
|
let attempts = 0;
|
|
const maxAttempts = 15;
|
|
|
|
const popup = document.getElementById('popup');
|
|
const popupMessage = document.getElementById('popup-message');
|
|
const restartButton = document.getElementById('restart-button');
|
|
const attemptsDisplay = document.getElementById('attempts');
|
|
const confettiDiv = document.getElementById('confetti');
|
|
|
|
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.name === secondCard.dataset.name;
|
|
if (isMatch) {
|
|
matchCount++;
|
|
disableCards();
|
|
if (matchCount === cardsArray.length) {
|
|
showPopup('Du hast gewonnen, Glückwunsch');
|
|
startConfetti(); // Start confetti
|
|
}
|
|
} else {
|
|
attempts++;
|
|
attemptsDisplay.textContent = maxAttempts - attempts;
|
|
if (attempts >= maxAttempts) {
|
|
showPopup('Du hast leider verloren, spiel neustarten?');
|
|
} else {
|
|
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 showPopup(message) {
|
|
popupMessage.textContent = message;
|
|
popup.classList.remove('hidden');
|
|
if (message.includes('gewonnen')) {
|
|
confettiDiv.classList.remove('hidden'); // Zeige die confetti div
|
|
}
|
|
}
|
|
|
|
function hidePopup() {
|
|
popup.classList.add('hidden');
|
|
confettiDiv.classList.add('hidden'); // Verstecke confetti div
|
|
stopConfetti(); // Stopt confetti effect
|
|
resetGame();
|
|
}
|
|
|
|
function resetGame() {
|
|
matchCount = 0;
|
|
attempts = 0;
|
|
attemptsDisplay.textContent = maxAttempts;
|
|
game.innerHTML = '';
|
|
gameGrid = cardsArray.concat(cardsArray).sort(() => 0.5 - Math.random());
|
|
gameGrid.forEach(item => {
|
|
const card = document.createElement('div');
|
|
card.classList.add('memory-card');
|
|
card.dataset.name = item.name;
|
|
|
|
const frontFace = document.createElement('img');
|
|
frontFace.classList.add('front-face');
|
|
frontFace.src = item.img;
|
|
|
|
const backFace = document.createElement('div');
|
|
backFace.classList.add('back-face');
|
|
|
|
card.appendChild(frontFace);
|
|
card.appendChild(backFace);
|
|
game.appendChild(card);
|
|
});
|
|
document.querySelectorAll('.memory-card').forEach(card => card.addEventListener('click', flipCard));
|
|
}
|
|
|
|
function startConfetti() {
|
|
if (!confetti.instance) {
|
|
confetti.instance = new confetti.Context('confetti');
|
|
}
|
|
confetti.instance.start();
|
|
}
|
|
|
|
function stopConfetti() {
|
|
if (confetti.instance) {
|
|
confetti.instance.stop();
|
|
}
|
|
}
|
|
|
|
cards.forEach(card => card.addEventListener('click', flipCard));
|
|
restartButton.addEventListener('click', hidePopup);
|