-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
129 lines (111 loc) · 5.08 KB
/
script.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
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
$(document).ready(function () {
// масив усіх зображень
const allImages = ['arch.png', 'ubuntu.png', 'mint.png', 'fedora.png', 'red_star.png', 'debian.png', 'centos.png', 'elementary.png', 'linux.webp', 'manjaro.png', 'popos.png', 'endeavouros.png'];
let cardImages = [];
let attempts = 0;
let mistakes = 0;
let matchedPairs = 0;
let totalPairs = 0;
// ініціалізація гри
function initGame() {
attempts = 0;
mistakes = 0;
matchedPairs = 0;
updateStats(); // оновлення статистики
shuffleCards(); // перемішувння карт
$('.game-board').empty(); // стирання дошки
cardImages.forEach((image, index) => {
const card = $(`
<div class="card" data-image="${image}">
<img src="images/${image}" alt="${image}">
</div>
`); // темплейн для карт
$('.game-board').append(card); // додавання до дошки
});
bindCardClick(); // прикриплюємо обробку натискання до всіх карт
}
// функція для перемішування карт
function shuffleCards() {
cardImages.sort(() => 0.5 - Math.random());
}
// логіка натискання на карту
let flippedCards = [];
let lockBoard = false;
function bindCardClick() {
$('.card').click(function () {
if (lockBoard || $(this).hasClass('flipped')) return; // перевірка на перевнуту карту
$(this).addClass('flipped'); // додавання класу перевернута для відображення зображенння
flippedCards.push($(this));
if (flippedCards.length === 2) { // якщо перевернутих карт 2, то збільшується кількість спроб
attempts++;
checkForMatch(); // перевірка на збіг
}
});
}
// перевірка на збіг
function checkForMatch() {
lockBoard = true; // блок дошки
const card1 = flippedCards[0];
const card2 = flippedCards[1];
if (card1.data('image') === card2.data('image')) {
matchedPairs++; // збільшення відгаданих пар
flippedCards = []; // очистка перевернутих карт
lockBoard = false; // розблок дошки
updateStats(); // оновлення статистики
if (matchedPairs === totalPairs) { // перевірка на перемогу
setTimeout(() => alert("Вітаю! Ви знайшли всі пари!"), 500);
}
} else {
mistakes++; // збільшення кількісті помилок якщо не вірно
setTimeout(() => {
card1.removeClass('flipped'); // поверення в початковий стан
card2.removeClass('flipped'); // те саме для 2-ї карти
flippedCards = []; // очистка
lockBoard = false; // розблок
updateStats(); // оновлення статистики
}, 1000);
}
}
// функція для оновлення статистики
function updateStats() {
$('#attempts').text(`Кількість спроб: ${attempts}`);
$('#mistakes').text(`Кількість помилок: ${mistakes}`);
$('#pairs').text(`Знайдено пар: ${matchedPairs}/${totalPairs}`);
}
// вибір рівня складності
$('#difficulty').change(function () {
const difficulty = $(this).val();
let columns, rows;
switch (difficulty) {
case 'easy': // 6 пар, 4х3 поле
totalPairs = 6;
columns = 3;
rows = 4;
break;
case 'medium': // 8 пар, 4х4 поле
totalPairs = 8;
columns = 4;
rows = 4;
break;
case 'hard': // 12 пар, 6х4 поле
totalPairs = 12;
columns = 6;
rows = 4;
break;
}
// створення пари карт
cardImages = allImages.slice(0, totalPairs).concat(allImages.slice(0, totalPairs));
// зміна поля на основі рівня складності
$('.game-board').css({
'grid-template-columns': `repeat(${columns}, 100px)`,
'grid-template-rows': `repeat(${rows}, 100px)`
});
initGame(); // ініціалізація гри після вибору складності
});
// перезапуск гри
$('#restart').click(function () {
initGame();
});
// запуск гри з вибором рівня
$('#difficulty').trigger('change');
});