forked from hackclub/sprig
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAsteroid_Apocalypse.js
256 lines (218 loc) · 5.77 KB
/
Asteroid_Apocalypse.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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
/*
@title: asteroid apocalypse
@author: zcsop1206
@tags: ['endless']
@addedOn: 2022-12-31
Move the lazer with "a" and "d" for left and right, "w" and "s" for up and down
Try to destroy the asteroid before it hits the bas
The game ends if the asteroid hits the base.
You gain a point when you hit an asteroid.
*/
//adds music if alien is hit and background music.
const zap = tune `
41.666666666666664: b5~41.666666666666664 + a5-41.666666666666664 + g5/41.666666666666664 + f5^41.666666666666664,
41.666666666666664: b5-41.666666666666664 + a5/41.666666666666664 + g5^41.666666666666664,
41.666666666666664: b5/41.666666666666664 + a5^41.666666666666664,
41.666666666666664: b5^41.666666666666664,
1166.6666666666665`
const boom = tune`
30: c4~30 + d4-30 + e4/30 + f4^30 + g4~30,
30: c4-30 + d4/30 + e4^30 + f4~30,
30: c4/30 + d4^30 + e4~30,
30: c4^30 + d4~30,
30: c4~30,
810`
const background = tune `
166.66666666666666: c5~166.66666666666666,
166.66666666666666: c5~166.66666666666666,
166.66666666666666: d5~166.66666666666666,
166.66666666666666: f5~166.66666666666666,
166.66666666666666: g5~166.66666666666666,
166.66666666666666: f5~166.66666666666666,
166.66666666666666: e5~166.66666666666666,
166.66666666666666: d5~166.66666666666666,
166.66666666666666: b4~166.66666666666666,
166.66666666666666: b4~166.66666666666666,
166.66666666666666: c5~166.66666666666666,
166.66666666666666: e5~166.66666666666666,
166.66666666666666: d5~166.66666666666666,
166.66666666666666: e5~166.66666666666666,
166.66666666666666: d5~166.66666666666666,
166.66666666666666: c5~166.66666666666666,
166.66666666666666: b4~166.66666666666666,
166.66666666666666: a4~166.66666666666666,
166.66666666666666: g4~166.66666666666666,
166.66666666666666: a4~166.66666666666666,
166.66666666666666: b4~166.66666666666666,
166.66666666666666: c5~166.66666666666666,
166.66666666666666: e5~166.66666666666666,
166.66666666666666: f5~166.66666666666666,
166.66666666666666: e5~166.66666666666666,
166.66666666666666: d5~166.66666666666666,
166.66666666666666: d5~166.66666666666666,
166.66666666666666: a4~166.66666666666666,
166.66666666666666: g4~166.66666666666666,
166.66666666666666: f4~166.66666666666666,
166.66666666666666: f4~166.66666666666666,
166.66666666666666: d4~166.66666666666666`
const playback = playTune(background, Infinity);
const asteroid="a";
const lazer="l";
const base="b";
const space="s";
let score = 0;
setLegend(
[ asteroid, bitmap`
................
.....8..........
.....866666.....
...688CCCC686...
...C8CCCCC888...
..68888CCC838888
.888CCC888C3333.
..388CCC88C3333.
..3CCCCC8888833.
..33CCC88883888.
8888883838333388
8.33338838833338
..3333883838333.
...33386683883..
......8..8..88..
................`],
[ lazer, bitmap`
................
................
................
................
................
................
......4444......
......4444......
......4444......
................
................
................
................
................
................
................`],
[ base, bitmap`
77L7777L77777L77
77L7777L7777L777
7LL17711117L1777
77711L1L11LL1777
7777111L1L171777
LL771111111177LL
71LL111111L17LL7
711L1L111LL1L777
771111L1111L7777
77771LL111117777
7771111111111LL7
7LL1111111LL17LL
11111LL17117L777
L77177LL7777L777
7771777L77777777
7777777LL7777777`],
[ space, bitmap`
0000000000000000
0000000000000000
0000000200000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0020000000000000
0000000000020000
0000000000000000
0000000000000000`]
);
setBackground(space);
setSolids([ base, lazer ])
//lazer movement
onInput("w", () => {
const l = getFirst(lazer);
if (!l) return;
l.y -= 1;
});
onInput("a", () => {
const l = getFirst(lazer);
if (!l) return;
l.x -= 1;
});
onInput("s", () => {
const l = getFirst(lazer);
if (!l) return;
l.y += 1;
});
onInput("d", () => {
const l = getFirst(lazer);
if (!l) return;
l.x += 1;
});
var downloadTimer = setInterval(function(){
const a = getFirst(asteroid);
const b = getFirst(base);
if (a.x>b.x) {
a.x -= 1
}
else if (a.x<b.x) {
a.x += 1
}
if (a.y>b.y) {
a.y -= 1
}
else if (a.y<b.y) {
a.y += 1
}
},750);
//map location
setMap( map`
..........
.......a..
..........
.b........
..........
..........
..........
.......l..
..........
..........`);
afterInput(() => {
//Ends the game if the base is hit by asteroid
const baseHit = tilesWith(asteroid, base).length;
const numBase = tilesWith(base).length;
if (baseHit === numBase) {
clearTile(getFirst(lazer).x,getFirst(lazer).y);
clearTile(getFirst(asteroid).x,getFirst(asteroid).y);
clearText()
addText("You Lost", {y:4, color: color`3` });
addText("Final Score: "+score, {y:5, color: color`3`});
playTune(boom)
if (playback) playback.end();
}
// count the number of tiles with lazer
const targetNumber = tilesWith(lazer).length;
// count the number of tiles with lazers and asteroid
const numberCovered = tilesWith(lazer, asteroid).length;
//checking if the lazer has hit the asteroid
if (numberCovered === targetNumber) {
playTune(zap)
const l = getFirst(lazer);
const a = getFirst(asteroid);
const b = getFirst(base);
if (!l || !a || !b) return;
clearTile(l.x, a.y);
clearTile(b.x, b.y);
addSprite(Math.floor(Math.random() * 8)+1, Math.floor(Math.random() * 3)+6, lazer);
addSprite(Math.floor(Math.random() * 4)+5, Math.floor(Math.random() * 2)+1, asteroid);
addSprite(Math.floor(Math.random() * 4)+1, Math.floor(Math.random() * 3)+5, base);
score++;
//Displays the score.
addText("score: "+score, { y: 1 , color: color`3`} );
}
});