import { useState, useEffect } from 'react'; import Card from './Card'; const GameBoard = () => { const emojis = ['🎮', '🎲', '🎯', '🎨', '🎭', '🎪', '🎸', '🎺']; const [cards, setCards] = useState([]); const [selectedCards, setSelectedCards] = useState([]); const [matchedPairs, setMatchedPairs] = useState(0); const [moves, setMoves] = useState(0); const [isChecking, setIsChecking] = useState(false); const [gameWon, setGameWon] = useState(false); const initializeGame = () => { const gameCards = [...emojis, ...emojis] .sort(() => Math.random() - 0.5) .map((emoji, index) => ({ id: index, emoji, isFlipped: false, isMatched: false })); setCards(gameCards); setSelectedCards([]); setMatchedPairs(0); setMoves(0); setGameWon(false); setIsChecking(false); }; useEffect(() => { initializeGame(); }, []); useEffect(() => { if (selectedCards.length === 2) { setIsChecking(true); setMoves(moves + 1); const [first, second] = selectedCards; if (first.emoji === second.emoji) { setTimeout(() => { setCards(cards.map(card => card.id === first.id || card.id === second.id ? { ...card, isMatched: true } : card )); setMatchedPairs(matchedPairs + 1); setSelectedCards([]); setIsChecking(false); }, 600); } else { setTimeout(() => { setCards(cards.map(card => card.id === first.id || card.id === second.id ? { ...card, isFlipped: false } : card )); setSelectedCards([]); setIsChecking(false); }, 1000); } } }, [selectedCards]); useEffect(() => { if (matchedPairs === emojis.length && emojis.length > 0) { setGameWon(true); } }, [matchedPairs]); const handleCardClick = (clickedCard) => { if (isChecking || clickedCard.isFlipped || clickedCard.isMatched) return; setCards(cards.map(card => card.id === clickedCard.id ? { ...card, isFlipped: true } : card )); setSelectedCards([...selectedCards, clickedCard]); }; return (

Memory Game

Match the pairs to win!

Moves: {moves}
Pairs: {matchedPairs}/{emojis.length}
{cards.map((card) => ( handleCardClick(card)} isFlipped={card.isFlipped} isMatched={card.isMatched} /> ))}
{gameWon && (

Congratulations! You won in {moves} moves!

)}
); }; export default GameBoard;