Super-Memory/script.js
2024-07-23 10:51:01 +00:00

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);