-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
156 lines (131 loc) ยท 4.41 KB
/
Copy pathmain.js
File metadata and controls
156 lines (131 loc) ยท 4.41 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
144
145
146
147
148
149
150
151
152
153
154
155
156
const game = document.getElementById('game');
const title = document.createElement('h1');
title.innerHTML = 'Emoji Match';
game.appendChild(title);
const board = document.createElement('div');
board.setAttribute('id', 'board');
game.appendChild(board);
// Edit dimensions only
const boardWidth = 6;
const boardLength = 6;
board.style.display = 'grid';
board.style.width = 'fit-content';
board.style.gridTemplateColumns = `repeat(${boardWidth}, 1fr)`;
board.style.gridTemplateRows = 'auto auto';
const numberOfTiles = boardWidth * boardLength;
const numberOfSets = numberOfTiles / 2;
const tiles = [];
const sets = [];
const foundSets = [];
let remainingSets = numberOfSets;
let openTiles = 0;
let selectedSet = '';
let gameEnded = false;
let mistakes = 0;
let moves = 0;
// prettier-ignore
const emoji = [
// Smileys
'๐', '๐ฉ', '๐คก', '๐',
// Clothing and Accessories
'๐ ', '๐งฆ', '๐ฆบ',
// Animals & Nature
'๐ถ', '๐ฑ', '๐ญ', '๐น', '๐ฐ', '๐ฆ', '๐ป', '๐ผ', '๐จ', '๐ธ', '๐ฆ', '๐ท', '๐ต', '๐ฎ', '๐ฅ', '๐ฆ', '๐', '๐', '๐บ', '๐' , '๐', '๐ซ', '๐ง',
// Food
'๐', '๐', '๐', '๐', '๐', '๐', '๐ฅ', '๐', '๐', '๐',
// Activity and Sports
'๐', '๐พ', '๐น', '๐', '๐', '๐ฒ',
// Travel & Places
'๐', '๐', '๐', '๐', '๐', '๐', '๐', '๐', '๐', '๐',
// Objects
'๐พ', 'โฐ', 'โ๏ธ', '๐ฃ', '๐งธ', '๐', '๐',
// Symbols
'๐ฉท', '๐งก', '๐', '๐',
];
const pickSets = (sourceArray, targetArray, numberOfElements) => {
// Create a copy of the source array to avoid modifying the original
let tempArray = [...sourceArray];
// Check if the number of elements to pick is greater than the source array length
if (numberOfElements > tempArray.length) {
numberOfElements = tempArray.length;
}
for (let i = 0; i < numberOfElements; i++) {
let randomIndex = Math.floor(Math.random() * tempArray.length);
// Remove the element from the temp array and insert it into the target array
let element = tempArray.splice(randomIndex, 1)[0];
targetArray.push(element);
}
// Directly modify the targetArray to double its elements
targetArray.push(...targetArray);
};
pickSets(emoji, sets, numberOfSets);
const insertTileContent = (array) => {
if (array.length === 0) return undefined;
// Generate a random index
const randomIndex = Math.floor(Math.random() * array.length);
// Remove the element from the array and return it
return array.splice(randomIndex, 1)[0];
};
const populateTiles = () => {
for (i = 0; i < numberOfTiles; i++) {
const tile = {};
tile.num = i;
tile.content = insertTileContent(sets);
tiles.push(tile);
}
};
populateTiles();
tiles.forEach((tile) => {
const tileElement = document.createElement('div');
tileElement.innerHTML = '';
tileElement.classList.add('tile');
tileElement.setAttribute('id', tile.num);
tileElement.addEventListener('click', () => {
if (gameEnded === false) {
moves += 1;
movesIndicator.innerHTML = `Moves: ${moves}`;
openTiles += 1;
if (openTiles == 1 && selectedSet == '') {
tileElement.innerHTML = `${tile.content}`;
selectedSet = tile.content;
return;
} else if (openTiles == 2) {
tileElement.innerHTML = tile.content;
if (selectedSet == tile.content) {
openTiles = 0;
selectedSet = '';
remainingSets -= 1;
if (remainingSets == 0) {
gameEnded = true;
const winMessage = document.createElement('div');
winMessage.innerHTML = 'You win!';
game.appendChild(winMessage);
}
foundSets.push(tile.content);
return;
} else {
openTiles = 0;
selectedSet = '';
setTimeout(() => {
tileElemes.forEach((tileElement) => {
if (foundSets.includes(tileElement.innerHTML)) {
return;
}
tileElement.innerHTML = '';
});
}, 500);
}
} else {
return;
}
}
});
board.appendChild(tileElement);
});
const tileElements = document.getElementsByClassName('tile');
const tileElemes = [...tileElements];
// Moves indicator
const movesIndicator = document.createElement('div');
movesIndicator.setAttribute('id', 'moves');
movesIndicator.innerHTML = `Moves: ${moves}`;
game.appendChild(movesIndicator);