-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy path짝맞추기.js
84 lines (80 loc) · 3.07 KB
/
짝맞추기.js
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
var 가로 = 4;
var 세로 = 3;
var 색깔들 = ['red', 'red', 'orange', 'orange', 'green', 'green', 'yellow', 'yellow', 'white', 'white', 'pink', 'pink'];
var 색깔후보 = 색깔들.slice();
var 색깔 = [];
var 클릭플래그 = true;
var 클릭카드 = [];
var 완성카드 = [];
var 시작시간;
function 셔플() { // 피셔예이츠 셔플
for (var i = 0; 색깔후보.length > 0; i += 1) {
색깔 = 색깔.concat(색깔후보.splice(Math.floor(Math.random() * 색깔후보.length), 1));
}
}
function 카드세팅(가로, 세로) {
클릭플래그 = false;
for (var i = 0; i < 가로 * 세로; i += 1) {
var card = document.createElement('div');
card.className = 'card';
var cardInner = document.createElement('div');
cardInner.className = 'card-inner';
var cardFront = document.createElement('div');
cardFront.className = 'card-front';
var cardBack = document.createElement('div');
cardBack.className = 'card-back';
cardBack.style.backgroundColor = 색깔[i];
cardInner.appendChild(cardFront);
cardInner.appendChild(cardBack);
card.appendChild(cardInner);
(function (c) { // 클로저 문제 해결
card.addEventListener('click', function() {
if (클릭플래그 && !완성카드.includes(c)) {
c.classList.toggle('flipped');
클릭카드.push(c);
if (클릭카드.length === 2) {
if (클릭카드[0].querySelector('.card-back').style.backgroundColor === 클릭카드[1].querySelector('.card-back').style.backgroundColor) {
완성카드.push(클릭카드[0]);
완성카드.push(클릭카드[1]);
클릭카드 = [];
if (완성카드.length === 12) {
var 끝시간 = new Date();
alert('축하합니다! 성공! ' + (끝시간 - 시작시간) / 1000 + '초 걸렸습니다.');
document.querySelector('#wrapper').innerHTML = '';
색깔후보 = 색깔들.slice();
색깔 = [];
완성카드 = [];
시작시간 = null;
셔플();
카드세팅(가로, 세로);
}
} else { // 두 카드의 색깔이 다르면
클릭플래그 = false;
setTimeout(function() {
클릭카드[0].classList.remove('flipped');
클릭카드[1].classList.remove('flipped');
클릭플래그 = true;
클릭카드 = [];
}, 1000);
}
}
}
});
})(card);
document.querySelector('#wrapper').appendChild(card);
}
document.querySelectorAll('.card').forEach(function (card, index) { // 초반 카드 공개
setTimeout(function() {
card.classList.add('flipped');
}, 1000 + 100 * index);
});
setTimeout(function() { // 카드 감추기
document.querySelectorAll('.card').forEach(function (card) {
card.classList.remove('flipped');
});
클릭플래그 = true;
시작시간 = new Date();
}, 5000);
}
셔플();
카드세팅(가로, 세로);