- ๊ฒ์์ ์์ํ๋ฉด ์นด๋ ์๋ฉด์ 2์ด ๋์ ๋ฏธ๋ฆฌ ๋ณผ ์ ์๋ค.
- ์นด๋๋ ์ด 12๊ฐ๋ก ๊ตฌ์ฑ๋๋ค.
- ๊ฐ์ ๊ทธ๋ฆผ์ ์นด๋๋ฅผ ๋ชจ๋ ์ฐพ์ ๊ฒฝ์ฐ ๊ฒ์์ clearํ๋ค.
- ๊ฒ์์ 30์ด ๋์ ์งํ๋๋ฉฐ ์๊ฐ ๋ด์ ๋ชจ๋ ์นด๋์ ์ง์ ๋ง์ถ์ง ๋ชปํ๋ฉด ์ข ๋ฃ๋๋ค.
- cardOne์ ๊ฐ์ด ๋น์ด์๋ ์ํ์ด๋ฉฐ, clickPause๊ฐ false์ผ ๋๋ง ๋น๊ต ์คํํ๋ค.
- ์นด๋๋ฅผ 2๋ฒ ํด๋ฆญํ์ ๋๋ง cardOne์ ๊ฐ์ด ๋ค์ด๊ฐ๋๋ก cardOne์ด ๋น์ด์๋์ง ํ์ธ
- cardOne, cardTwo์ data-idx ๊ฐ์ ๊ฐ์ ธ์์ ๋น๊ตํ๋ matchCards() ํจ์ ์คํ
const flipCard = (event) => {
let clickedCard = event.target.closest('.card');
if (cardOne !== clickedCard && !clickPause) {
clickedCard.classList.add('show');
if (!cardOne) {
return (cardOne = clickedCard);
}
cardTwo = clickedCard;
clickPause = true;
matchCards(cardOne.dataset.idx, cardTwo.dataset.idx);
}
};cardOne, cardTwo์ data-id ๊ฐ์ด ๊ฐ์ผ๋ฉด equals() ํจ์ ์คํ, ๋ค๋ฅด๋ฉด differs() ํจ์ ์คํ.
- Match๋๋ฉด ํด๋ฆญ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐํ๊ณ MatchedCount๋ฅผ 1 ์ฆ๊ฐ์ํจ ํ ์ด๊ธฐํํ๋ค
- Match๋์ง ์์ผ๋ฉด shake Css Animation์ 0.4์ด ๋์ ์คํํ ๋ค 1์ด ํ ๋ค์งํ ์นด๋ ์์๋ณต๊ทํ๋ค.
- Match๋ ์นด๋๊ฐ 6๊ฐ๊ฐ ๋๋ฉด ๊ฒ์ ์ข ๋ฃ ํ cardOne, cardTwo๋ฅผ ์ด๊ธฐํํ๋ค.
function equals() {
cardOne.removeEventListener('click', flipCard);
cardTwo.removeEventListener('click', flipCard);
matchedCount++;
if (matchedCount === 6) {
endGame(cleared);
}
cardOne = cardTwo = '';
return (clickPause = false);
}
function differs() {
setTimeout(() => {
cardOne.classList.add('shake');
cardTwo.classList.add('shake');
}, 400);
setTimeout(() => {
cardOne.classList.remove('shake', 'show');
cardTwo.classList.remove('shake', 'show');
cardOne = cardTwo = '';
return (clickPause = false);
}, 1000);
}- ๊ฒ์์ด ์ข ๋ฃ๋๋ฉด clearInterval() ๋ฉ์๋๋ก ํ์ด๋จธ ์ ๊ฑฐ ํ ๊ฒ์ ์ฌ์์ ํ์ ์ฐฝ์ ๋์ด๋ค.
- ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ํ์ ์ฐฝ์ ๋ฉ์์ง์ ์ด๋ฏธ์ง๋ฅผ ๋ณ๊ฒฝํ๊ณ , ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅธ ์์ ์ ์ฌ์ํ๋ค.
const endGame = (result) => {
let resultMsg = $dialog.querySelector('h3 span');
let resultImg = $dialog.querySelector('h3 img');
resultImg.setAttribute('src', `../asset/img/${result.img}`);
resultMsg.innerText = `Game ${result.msg}!`;
result.sound.play();
clearInterval(time);
$dialog.showModal();
};- PC๋
๊ฐ์,๋ฐ์,๋ณด์ค ๋๋ค์ผ์ด์ค๋ฅผ ์ถ๋ ฅํ๋ค. - ์ฌ์ฉ์๊ฐ
๊ฐ์,๋ฐ์,๋ณด๋ฒํผ ์ค ํ๋๋ฅผ ์ ํํ๋ ์๊ฐ ์ปดํจํฐ๊ฐ ์ ํํ ๋๋ค ๊ฐ๊ณผ ๋น๊ตํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์ ํ๋ค. - ๊ฒ์์ ์นํจ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
- ์ฌ์ฉ์๊ฐ ์ด๊ธธ ๊ฒฝ์ฐ ์ ์๊ฐ 1์ฉ ์ฆ๊ฐํ๋ค.
- Math.random() ํจ์๋ก 0~2 ์ฌ์ด์ ๋๋ค ์ซ์๋ฅผ ์์ฑํ๋ค.
- setInterval() ํจ์๋ก ๋๋ค index์ ํด๋นํ๋ ๋๋ค ๋ฐฐ์ด ๊ฐ์ ํ๋ฉด์ textContents๋ก ๋ฃ์ด์ค๋ค.
const startGame = () => {
const pcSelect = () => {
let randomCase = casesArr[parseInt(Math.random() * casesArr.length)];
$pc.textContent = randomCase;
replaceEmoji($pc);
};
// pcSelect ํจ์๋ฅผ 0.1์ด๋ง๋ค ์คํ
interval = setInterval(pcSelect, 100);
};- pc์ user์ textContent๋ฅผ ๋น๊ตํ๊ณ switch๋ฌธ์ผ๋ก ์กฐ๊ฑด์ ๊ฑธ์ด ์นํจ๋ฅผ ๋ ธ์ถ์ํค๊ณ , ์ ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- ์นํจ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ Message์ Sound๋ฅผ ์ถ๋ ฅํ๋ค.
const playGame = (pc, user) => {
if (pc === user) {
resultMessage(0);
draw.play();
} else {
switch (pc + user) {
case '๋ณด๋ฐ์':
case '๋ฐ์๊ฐ์':
case '๊ฐ์๋ณด':
addScore($pcScore);
lose.play();
resultMessage(1);
break;
default:
addScore($userScore);
win.play();
resultMessage(2);
}
}
};