Repository navigation
Expand file tree
/
Copy pathMemoryMagic.js
More file actions
89 lines (79 loc) · 2.43 KB
/
Copy pathMemoryMagic.js
File metadata and controls
89 lines (79 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import React, { useState, useEffect } from 'react';
import Card from './Card';
import './MemoryMagic.css';
const cardImages = [
{ src: '/images/Card1.png', matched: false },
{ src: '/images/Card2.png', matched: false },
{ src: '/images/Card3.png', matched: false },
{ src: '/images/Card4.png', matched: false },
{ src: '/images/Card5.png', matched: false },
{ src: '/images/Card6.png', matched: false },
{ src: '/images/Card7.png', matched: false },
{ src: '/images/Card8.png', matched: false },
{ src: '/images/Card9.png', matched: false },
];
function MemoryMagic() {
const [cards, setCards] = useState([]);
const [turns, setTurns] = useState(0);
const [choiceOne, setChoiceOne] = useState(null);
const [choiceTwo, setChoiceTwo] = useState(null);
const [disabled, setDisabled] = useState(false);
useEffect(() => {
shuffleCards();
}, []);
useEffect(() => {
if (choiceOne && choiceTwo) {
setDisabled(true);
if (choiceOne.src === choiceTwo.src) {
setCards((prevCards) =>
prevCards.map((card) => {
if (card.src === choiceOne.src) {
return { ...card, matched: true };
}
return card;
})
);
resetTurn();
} else {
setTimeout(() => resetTurn(), 1000);
}
}
}, [choiceOne, choiceTwo]);
const shuffleCards = () => {
const shuffledCards = [...cardImages]
.sort(() => Math.random() - 0.5)
.map((card) => ({ ...card, id: Math.random() }));
setChoiceOne(null);
setChoiceTwo(null);
setCards(shuffledCards);
setTurns(0);
};
const handleChoice = (card) => {
choiceOne ? setChoiceTwo(card) : setChoiceOne(card);
};
const resetTurn = () => {
setChoiceOne(null);
setChoiceTwo(null);
setTurns((prevTurns) => prevTurns + 1);
setDisabled(false);
};
return (
<div className="memory-magic">
<h1>Memory Magic</h1>
<button onClick={shuffleCards}>New Game</button>
<div className="card-grid">
{cards.map((card) => (
<Card
key={card.id}
card={card}
handleChoice={handleChoice}
flipped={card === choiceOne || card === choiceTwo || card.matched}
disabled={disabled}
/>
))}
</div>
<p>Turns: {turns}</p>
</div>
);
}
export default MemoryMagic;