-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
140 lines (118 loc) · 3.05 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
129
130
131
132
133
134
135
136
137
138
139
140
// Genius Game
let order = [];
let clickedOrder = [];
let score = 0;
// indice de identificação das cores por valor numérico
const GREEN = 0; //0 - verde
const RED = 1; //1 - vermelho
const YELLOW = 2; //2 - amarelo
const BLUE = 3; //3 - azul
// Identificação dos elementos Div de cada cor do jogo
const blue = document.querySelector('.blue');
const red = document.querySelector('.red');
const yellow = document.querySelector('.yellow');
const green = document.querySelector('.green');
/**
* Função que gera a ordem aleatória de cores
*/
let shuffleOrder = () => {
let colorOrder = Math.floor(Math.random() * 4);
order[order.length] = colorOrder;
clickedOrder = [];
for (let i in order) {
let elementColor = createColorElement(order[i]);
lightColor(elementColor, Number(i) + 1);
}
}
/**
* Acende a cor do elemento informado após atraso definido.
* @param {HTMLDivElement} element Cor do elemento a acender
* @param {Float} time Tempo de atraso para acender
*/
let lightColor = (element, time) => {
time = time * 500;
setTimeout(() => {
element.classList.add('selected');
}, time - 250);
setTimeout(() => {
element.classList.remove('selected');
}, time);
}
/**
* Checa se os botões foram clicados na mesma
* ordem gerada na função shuffleOrder().
*/
let checkOrder = () => {
for (let i in clickedOrder) {
if (clickedOrder[i] != order[i]) {
gameOver();
break;
}
}
if (clickedOrder.length == order.length) {
score++;
alert(`Pontuação: [ ${score} ]\n\nVocê acertou! \nClique em OK para próxima rodada.`);
nextLevel();
}
}
/**
* Função de click do usuário
* @param {Integer} color valor inteiro do indice da cor clicada
*/
let click = (color) => {
clickedOrder[clickedOrder.length] = color;
createColorElement(color).classList.add('selected');
setTimeout(() => {
createColorElement(color).classList.remove('selected');
checkOrder();
}, 250);
}
/**
* Função que retorna o elemento da cor do argumento informado
* @param {Integer} color Valor inteiro com indice da cor
* @returns HTMLDivElement (Div da cor informada)
*/
let createColorElement = (color) => {
if (color == GREEN) {
return green;
} else if (color == RED) {
return red;
} else if (color == YELLOW) {
return yellow;
} else if (color == BLUE) {
return blue;
}
}
/**
* função para chamar próximo nível do jogo.
*/
let nextLevel = () => {
shuffleOrder();
}
/**
* Função game over.
* Encerra o jogo e mostra a pontuação.
*/
let gameOver = () => {
alert(`< FIM DE JOGO >\n\nPontuação: [ ${score} ].\n\nVocê perdeu!\nClique em OK para recomeçar.`);
order = [];
clickedOrder = [];
playGame();
}
/**
* Função que inicia o jogo.
*/
let playGame = () => {
alert('Bem vindo ao Genius! \niniciando o jogo!')
score = 0;
nextLevel();
}
/**
* eventos de clique dos botões de cada cor
*/
green.onclick = () => click(GREEN);
red.onclick = () => click(RED);
yellow.onclick = () => click(YELLOW);
blue.onclick = () => click(BLUE);
// Inicia o jogo
playGame();