-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmemoryGame.js
More file actions
144 lines (124 loc) · 3.61 KB
/
memoryGame.js
File metadata and controls
144 lines (124 loc) · 3.61 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
document.addEventListener('DOMContentLoaded', function (){
const cards = document.querySelectorAll('.memoryCard');
const counter = document.querySelector(".move");
const pointer = document.querySelector(".points");
const hover = document.querySelector(".hoverGameOff");
const afterGame = document.querySelector(".game");
const counterEnd = document.querySelector(".moveEnd");
const pointerEnd = document.querySelector(".pointsEnd");
const seconds = document.querySelector('.seconds');
const timeIsOut = document.querySelector('.timeIsOut');
var hasFlippedCard = false;
var lockBoard = false;
var firstCard, secondCard;
var move = 0;
var points = 0;
var timeleft;
var downloadTimer = 0;
var intervalId = '';
// starta/ starta om 0-ställer/ sartar timer
function start(){
cards.forEach(kort => {
kort.classList.remove("flip");
kort.classList.remove("match");
});
counter.innerHTML = move = 0;
pointer.innerHTML = points = 0;
hasFlippedCard = false;
secondCard = null;
firstCard = null;
lockBoard = false;
timeleft = 30;
hover.classList.toggle('gameOn');
timer();
}
// räknar antal klick
function moves(){
move++;
counter.innerHTML = move;
}
// lägger till css-flip vid klick
function flipCard() {
if (lockBoard) return;
if (this === firstCard) return;
this.classList.add('flip');
moves();
if (!hasFlippedCard) {
hasFlippedCard = true;
firstCard = this;
return;
}
secondCard = this;
checkForMatch();
}
// kollar om dataset matchar, gör dom de tas klick bort från korten med flip aktiv, är det inte match, tas flip bort med 1 sekunds fördröjning.
function checkForMatch() {
let isMatch = firstCard.id === secondCard.id;
isMatch ? ifMatch() : notMatch();
}
function ifMatch() {
firstCard.removeEventListener('click', flipCard);
secondCard.removeEventListener('click', flipCard);
points++;
pointer.innerHTML = points;
firstCard.classList.add('match');
secondCard.classList.add('match');
// kollar om omgången är klar, startar om (ska ersättas med nåt som visar hur det gick, och val om att starta om)
if (points == 6){
setTimeout(() => {
gameOver();
}, 2500);
}
resetBoard();
}
// om ej match, tar bort css klass flip. så korten vänds tillbaka.
function notMatch() {
lockBoard = true;
setTimeout(() => {
firstCard.classList.remove('flip');
secondCard.classList.remove('flip');
resetBoard();
}, 1000);
}
// 0-ställer
function resetBoard() {
[hasFlippedCard, lockBoard] = [false, false];
[firstCard, secondCard] = [null, null];
}
// blandar kortens ordning med Math.random, "()" runt funktionen gör att funktionen körs direkt.
(function shuffle() {
cards.forEach(card => {
let randomPos = Math.floor(Math.random() * 12);
card.style.order = randomPos;
});
})();
// klick funktion på korten
cards.forEach(card => card.addEventListener('click', flipCard));
// startar spelet vid klick på start-knappen
document.getElementById("replay").addEventListener("click", start);
// gör gameOver sidan synlig
function gameOver(){
afterGame.classList.add('gameOver');
afterGame.classList.remove('game');
counterEnd.innerHTML = move;
pointerEnd.innerHTML = points;
}
// timer
function timer () {
intervalId = setInterval(function(){
document.getElementById("progressBar").value = 30 - --timeleft;
if (timeleft == 0|| points == 6 ){
let tid = 30 - timeleft - 1;
if (timeleft > 0) {
seconds.innerHTML=tid;
} else
{
timeIsOut.innerHTML = '';
}
clearInterval(downloadTimer);
gameOver();
clearInterval(intervalId);
}
}, 1000);
}
});