-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
145 lines (130 loc) · 4.66 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
141
142
143
144
145
// DINOSSAURO
const dino = document.querySelector('.dino');
const background = document.querySelector('.background');
let score = document.getElementById("score");
let hiscore = document.getElementById("hiscore");
var hiscoreCache = localStorage['hiscore'] || '0'; //cache local
let isJumping = false;
let position = 0;
let actualScore = 0;
let gameOver = false;
var callCreateCactus;
function handlePressSpace(event) {
if (event.keyCode === 32) {
if (!isJumping && !gameOver) {
jump();
}
}
}
function handlePressEnter(event) {
if (event.keyCode === 13) {
location.reload();
}
}
//verifica se o jogo acabou e troca a imagem do personagem
function dinoState() {
if (gameOver) {
dino.style.backgroundImage = "url('img/sonic-wait.gif')";
clearTimeout(dinoStateCall);
}
var dinoStateCall = setTimeout(dinoState, 600);
}
//pular e trocar a imagem conforme a posição, se pulando ou não
function jump() {
isJumping = true;
var tempo = 0;
var fator_up = 0;
var fator_down = 0;
dino.style.backgroundImage = "url('img/sonic-jump.gif')";
let upInterval = setInterval(() => { //para repetições em intervalo de tempo
tempo += 0.3;
fator_up = 10 * position;
fator_down = 20 + position * 0.05;
if (position >= 120) {
clearInterval(upInterval);
tempo = 0;
let downInterval = setInterval(() => {
tempo += 0.2;
if (position <= 0) {
clearInterval(downInterval);
isJumping = false;
dino.style.backgroundImage = "url('img/sonic-run2.gif')";
} else {
position -= 9.8 * ((tempo * tempo) / 2);
dino.style.bottom = position + 'px';
}
}, 20);
} else {
position = 60 * tempo - (9.8 * ((tempo * tempo) / 2));
dino.style.bottom = position + 'px';
}
}, 20); //20ms
}
//para gerar um inteiro aleatório, usado no tempo de criação dos cactus
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
//Display de Fim de Jogo e gravar em Cache a pontuação mais alta.
function gameOverDisplay() {
const gameOverMsg = document.createElement('h1');
const pressSpaceMsg = document.createElement('h2');
gameOverMsg.classList.add('gameOver'); //adicionar classe
gameOverMsg.innerHTML = 'Game Over :(';
pressSpaceMsg.classList.add('gameOver')
pressSpaceMsg.innerHTML = 'Press Enter To Reload'
background.appendChild(gameOverMsg);
background.appendChild(pressSpaceMsg);
if (hiscoreCache == 'defaultValue' || parseInt(hiscoreCache) < actualScore) {
var hi = actualScore;
hi+=1; //Algo está mantendo a pontuação do hiscore 1 abaixo do que deveria
hiscore.innerText = hi;
localStorage['hiscore'] = hi.toString();
}
}
//CACTUS e Condição de fim de jogo
function createCactus() {
const cactus = document.createElement('div');
let cactusPosition = 1000;
let randomTime = getRandomInt(2000, 360);
cactus.classList.add('cactus'); //adicionar classe
cactus.style.left = 1000 + 'px';
if (randomTime <= 1800) cactus.style.backgroundImage = "url('img/cactus.png')";
else cactus.style.backgroundImage = "url('img/dino-inverse.png')";
background.appendChild(cactus);
let leftInterval = setInterval(() => {
if (cactusPosition < -60) {
clearInterval(leftInterval);
background.removeChild(cactus);
} else if (cactusPosition > 0 && cactusPosition < 60 && position < 60) {
gameOver = true;
background.style.animationIterationCount = 0;
gameOverDisplay();
clearTimeout(callCreateCactus);
clearInterval(leftInterval);
dino.style.backgroundImage = "url('img/sonic-wait.gif')";
} else if (!gameOver) {
cactusPosition -= 10;
cactus.style.left = cactusPosition + 'px';
}
}, 20);
//executar uma função depois de um tempo
callCreateCactus = setTimeout(createCactus, randomTime);
}
//Score do jogo
function scoreMaker() {
if (!gameOver) {
let timeInterval = setInterval(() => {
actualScore += 1;
score.innerText = 'NOW: ' + actualScore.toString();
if (gameOver) clearInterval(timeInterval);
}, 100);
}
hiscore.innerText = 'HI: ' + hiscoreCache;
}
scoreMaker();
createCactus();
dinoState();
document.addEventListener('keypress', handlePressSpace);
document.addEventListener('keypress', handlePressEnter);