-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
125 lines (103 loc) · 3.46 KB
/
app.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
const grid = document.querySelector('.grid');
const resultDisplay = document.querySelector('.results');
const width = 15;
const height = 15;
const aliensRemoved = [];
let currentShooterIndex = 202;
let invadersId;
let isGoingRight = true;
let direction = 1;
let results = 0;
for (let i = 0; i < width * width; i++){
const square = document.createElement('div');
grid.appendChild(square);
}
const squares = Array.from(document.querySelectorAll('.grid div'));
const alienInvaders = [
0,1,2,3,4,5,6,7,8,9,
15,16,17,18,19,20,21,22,23,24,
30,31,32,33,34,35,36,37,38,39,
]
function draw() {
for(let i = 0; i< alienInvaders.length; i++){
if (!aliensRemoved.includes(i)){
squares[alienInvaders[i]].classList.add('invader');
}
}
}
draw();
squares[currentShooterIndex].classList.add('shooter');
function remove() {
for (let i = 0; i < alienInvaders.length; i++){
squares[alienInvaders[i]].classList.remove('invader');
}
}
function moveShooter(e) {
squares[currentShooterIndex].classList.remove('shooter');
switch(e.key){
case 'ArrowLeft':
if (currentShooterIndex % width !== 0) currentShooterIndex -= 1;
break;
case 'ArrowRight':
if (currentShooterIndex % width < width -1) currentShooterIndex += 1;
break;
}
squares[currentShooterIndex].classList.add('shooter');
}
document.addEventListener('keydown', moveShooter);
function moveInvaders(){
const leftEdge = alienInvaders[0] % width === 0;
const rightEdge = alienInvaders[alienInvaders.length - 1] % width === width - 1;
remove();
if (rightEdge && isGoingRight){
for(let i = 0; i < alienInvaders.length; i++){
alienInvaders[i] += width + 1;
direction = -1;
isGoingRight = false;
}
}
if(leftEdge && !isGoingRight){
for(let i = 0; i < alienInvaders.length; i++){
alienInvaders[i] += width - 1;
direction = 1;
isGoingRight = true;
}
}
for(let i = 0; i < alienInvaders.length; i++){
alienInvaders[i] += direction;
}
draw();
if (squares[currentShooterIndex].classList.contains("invader")){
resultDisplay.innerHTML = "GAME OVER";
clearInterval(invadersId)
}
if (aliensRemoved.length === alienInvaders.length){
resultDisplay.innerHTML = "YOU WIN";
clearInterval(invadersId)
}
}
invadersId = setInterval(moveInvaders,600);
function shoot(e){
let laserId;
let currentLaserIndex = currentShooterIndex;
function moveLaser(){
squares[currentLaserIndex].classList.remove('laser');
currentLaserIndex -= width;
squares[currentLaserIndex].classList.add('laser');
if(squares[currentLaserIndex].classList.contains("invader")){
squares[currentLaserIndex].classList.remove("invader");
squares[currentLaserIndex].classList.remove('laser');
squares[currentLaserIndex].classList.add('boom');
setTimeout(() => squares[currentLaserIndex].classList.remove('boom'), 300)
clearInterval(laserId);
const alienRemoved = alienInvaders.indexOf(currentLaserIndex);
aliensRemoved.push(alienRemoved);
results++;
resultDisplay.innerHTML = results
}
}
if (e.key === "ArrowUp"){
laserId = setInterval(moveLaser, 100);
}
}
document.addEventListener('keydown', shoot);