ํด๋น ํ์ด์ง ๊ฒ์ ์ฝ๋ ๋ฆฌ๋ทฐ์ ๋๋ค.
(์ฐธ๊ณ . ์ ๋ก์ด ์นด๋ ๋ค์ง๊ธฐ ๊ฒ์)
์ง๋ ๊ธ๊น์ง '๋ค์งํ๋ ๊ธฐ๋ฅ CSS ๊ตฌํ โ ์นด๋ ์ธํ โ ํด๋ฆญ ์ ๋ค์งํ๋ ์ด๋ฒคํธ ๊ตฌํ'๊น์ง ๋์ง์ด ๋ดค์ต๋๋ค.
let cardColor = [];
let cardColorset = colorPool.slice();
let colorPool = [
'#A5736A', // brown
'#A5736A',
'#FECD56', // yellow
'#FECD56',
'#50869B', // blue
'#50869B',
'#698D5D', // green
'#698D5D',
'#E14B56', // pink
'#E14B56',
'#F8A255', // orange
'#F8A255',
];
function shuffle() {
for (let i = 0; cardColorset.length > 0; i += 1) {
cardColor = cardColor.concat(
cardColorset.splice(Math.floor(Math.random() * cardColorset.length), 1)
);
}
}
color pool์ ์์ 12๊ฐ์ง๋ฅผ ์ง์ ๋ง์ถ์ด ๋ฃ๊ณ . cardColorset์ ์๋ก์ด ๋ฐฐ์ด๋ก ์์ ์ง์ ๋๋๋ก ํ๋ค. ์ฌ๊ธฐ์ ์ฃผ์์ ์ .slice()
๋ฅผ ์ฐ์ง ์์ผ๋ฉด ์ฐธ์กฐ ๊ด๊ณ๋ก ์ธํด, colorPool ์์ฒด๊ฐ ๋ฐ๋๋ค. ๋ฐ๋ผ์ ํ์ ๊ฒ์์ด ๋๋๊ณ ๋ฆฌ์
ํ ๋ ์จ์ ํ colorPool์ด ์๋๊ธฐ ๋๋ฌธ์ ์นด๋ ์๊น์ด ํฐ์์ผ๋ก๋ง ๋์ค๋ ์๋ฌ๊ฐ ์๊ธด๋ค.
slice() & splice()
:
slice()
๋ฉ์๋๋ begin๋ถํฐ end ์ ๊น์ง์ ๋ณต์ฌ๋ณธ์ ์๋ก์ด ๋ฐฐ์ด ๊ฐ์ฒด๋ก ๋ฐํํ๋ค. ์ฆ, ์๋ณธ ๋ฐฐ์ด์ ์์ ๋์ง ์๋๋ค.
splice()
๋ฉ์๋๋ ๋ฐฐ์ด์ ๊ธฐ์กด ์์๋ฅผ ์ญ์ ๋๋ ๊ต์ฒดํ๊ฑฐ๋ ์ ์์๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐฐ์ด์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ค. ์ด ๋ฉ์๋๋ ์๋ณธ ๋ฐฐ์ด ์์ฒด๋ฅผ ์์ ํ๋ค.
https://im-developer.tistory.com/103
document.querySelectorAll('.card').forEach(function (card, index) {
setTimeout(() => {
card.classList.add('flipped');
}, 1000 + 100 * index);
});
setTimeout(() => {
document.querySelectorAll('.card').forEach(function (card, index) {
card.classList.remove('flipped');
});
clickFlag = true;
gameStart = new Date();
}, 5000);
setTimeout()
์ผ๋ก ์๊ฐ ์กฐ์ . clickFlag
boolean๊ฐ์ผ๋ก card๋ฅผ ๋ณด์ฌ์ฃผ๋ ์๊ฐ ๋์์๋ ์นด๋๊ฐ ํด๋ฆญ๋์ด ๋ค์งํ์ง ์๋๋ก ํ๋ค.
let clickedCard = [];
let matchedCard = [];
(function (c) {
card.addEventListener('click', () => {
if (clickFlag && !matchedCard.includes(c)) {
c.classList.toggle('flipped');
clickedCard.push(c);
if (clickedCard.length === 2) {
if (
clickedCard[0].querySelector('.card-back').style
.backgroundColor ===
clickedCard[1].querySelector('.card-back').style.backgroundColor
) {
matchedCard.push(clickedCard[0]);
matchedCard.push(clickedCard[1]);
clickedCard = [];
includes()
: ๋ฉ์๋๋ ๋ฐฐ์ด์ด ํน์ ์์๋ฅผ ํฌํจํ๊ณ ์๋์ง ํ๋ณhttps://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
toggle()
: ํด๋์ค ๋ค์์ () ์์๋ฅผ ํฌํจํ๊ณ ์๋์ง ํ๋ณํ๊ณ , ์๋ค๋ฉด ์ถ๊ฐํด์ฃผ๊ณ ์๋ค๋ฉด ์ ๊ฑฐํด์ค๋ค.
if (matchedCard.length === cardWidth * cardHeight) {
let gameFinish = new Date();
alert(
`Congratulations๐ Time record: ${parseInt(
(gameFinish - gameStart) / 1000
)} seconds`
);
document.querySelector('#gameTable').innerHTML = '';
cardColorset = colorPool.slice();
cardColor = [];
matchedCard = [];
gameStart = null;
shuffle();
cardSet(cardWidth, cardHeight);
}
} else {
clickFlag = false;
setTimeout(() => {
clickedCard[0].classList.remove('flipped');
clickedCard[1].classList.remove('flipped');
clickFlag = true;
clickedCard = [];
}, 1000);
}
}
}
});
})(card);
matchedCard.length === cardWidth * cardHeight ์ด ๋๋ฉด ์นด๋ ๊ฒ์์ ์ด๊ธฐํ ํ๋ค.
๊ฒ์ ํ
์ด๋ธ์ innerHTML
๋ก ์ง์๋ฒ๋ฆฌ๊ณ , ๋ชจ๋ ์์๋ค์ ์ฐจ๋ก๋๋ก [] ์ด๊ธฐํ ์ํจ๋ค.