Skip to content

Commit 9e3e433

Browse files
AdamEXugrymmy
andauthored
[Sprig App] Simple Platformer (#2734)
* Sprig App - Simple Platformer * Fixing metadata --------- Co-authored-by: graham <[email protected]>
1 parent 566c007 commit 9e3e433

File tree

2 files changed

+359
-0
lines changed

2 files changed

+359
-0
lines changed

games/Simple-Platformer.js

+359
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,359 @@
1+
/*
2+
First time? Check out the tutorial game:
3+
https://sprig.hackclub.com/gallery/getting_started
4+
5+
@title: Platformer
6+
@author: Adam Xu
7+
@tags: []
8+
@addedOn: 2025-01-03
9+
*/
10+
11+
const player = "p"
12+
const grass = "g"
13+
const platform = "c"
14+
const platform_left = "l"
15+
const platform_right = "r"
16+
const end_1 = "e"
17+
const end_2 = "f"
18+
const sky = "s"
19+
const dirt = "d"
20+
21+
setLegend(
22+
[ player, bitmap`
23+
......0000......
24+
.....002200.....
25+
.....022220.....
26+
.....022200.....
27+
.....00220......
28+
......0000......
29+
.......L0.......
30+
.......L0.......
31+
.......0L.......
32+
.......0L.......
33+
.......0L.......
34+
.......00.......
35+
.......0.0......
36+
......0..0......
37+
......0..0......
38+
......0..0......` ],
39+
[ platform, bitmap`
40+
DDDDDDDDDDDDDDDD
41+
DDDDDDDDDDDDDDDD
42+
DDDCDDDDDDDCDCDD
43+
CCDCCCDCDDCCCCCD
44+
CCCCCCCCCCCCCCCC
45+
CC9CCCCCCC9CCCCC
46+
9CCCCCC9CCCCC9CC
47+
CCCCCCCCCCCCCCCC
48+
................
49+
................
50+
................
51+
................
52+
................
53+
................
54+
................
55+
................` ],
56+
[ platform_left, bitmap`
57+
DDDDDDDDDDDDDDDD
58+
DDDDDDDDDDDDDDDD
59+
DDDCDDDDDDDCDCDD
60+
CCDCCCDCDDCCCCCD
61+
.CCCCCCCCCCCCCCC
62+
.CCC9CCCCC9CCCCC
63+
..CCCCC9CCCCC9CC
64+
....CCCCCCCCCCCC
65+
................
66+
................
67+
................
68+
................
69+
................
70+
................
71+
................
72+
................` ],
73+
[ platform_right, bitmap`
74+
DDDDDDDDDDDDDDDD
75+
DDDDDDDDDDDDDDDD
76+
DDDCDDDDDDDCDCDD
77+
CCDCCCDCDDCCCCCD
78+
CCCCCCCCCCCCC9C.
79+
CC9CCCCCCC9CCCC.
80+
9CCCCCC9CCCCCC..
81+
CCCCCCCCCCCC....
82+
................
83+
................
84+
................
85+
................
86+
................
87+
................
88+
................
89+
................` ],
90+
[ grass, bitmap`
91+
DDDDDDDDDDDDDDDD
92+
DDDDDDDDDDDDDDDD
93+
DDDCDDDDDDDCDCDD
94+
CCDCCCDCDDCCCCCD
95+
CCCCCCCCCCCCCCCC
96+
CCCCCCCCCC9CCCCC
97+
CC9CCC9CCCCCC9CC
98+
CCCCCCCCCCCCCCCC
99+
CCCCCCCC9CCCCCCC
100+
CCCCCCCCCCCCC9CC
101+
C9CCC9CCCCCCCCCC
102+
CCCCCCCCCCCCCCCC
103+
CCC9CCCC9CCC9CCC
104+
9CCCCCCCCCCCCCC9
105+
CCCCCCCCCCCCCCCC
106+
CCCCC9CCCCC9CCCC` ],
107+
[ dirt, bitmap`
108+
CCCC9CCCCCCCCCCC
109+
C9CCCCCCC9CCCCCC
110+
CCCCCCCCCCCCCC9C
111+
CCCC9CCCCCCCCCCC
112+
CCCCCCCCCCCCCCCC
113+
CCCCCCCCCC9CCCCC
114+
CC9CCC9CCCCCC9CC
115+
CCCCCCCCCCCCCCCC
116+
CCCCCCCC9CCCCCCC
117+
CCCCCCCCCCCCC9CC
118+
C9CCC9CCCCCCCCCC
119+
CCCCCCCCCCCCCCCC
120+
CCC9CCCC9CCC9CCC
121+
9CCCCCCCCCCCCCC9
122+
CCCCCCCCCCCCCCCC
123+
CCCCC9CCCCC9CCCC` ],
124+
[ end_1, bitmap`
125+
....57777775....
126+
...5775555777...
127+
..755555555577..
128+
.75577777555577.
129+
7577755577755575
130+
5575557777755577
131+
5755577557775557
132+
7755775757575577
133+
7555755775575575
134+
7755775555775775
135+
5755577777755755
136+
5575555555557757
137+
.55775555557757.
138+
..557775777555..
139+
...5557775555...
140+
....77777777....` ],
141+
[ end_2, bitmap`
142+
....77777777....
143+
...5557775555...
144+
..557775777555..
145+
.55775555557757.
146+
5575555555557757
147+
5755577777755755
148+
7755775555775775
149+
7555755775575575
150+
7755775757575577
151+
5755577557775557
152+
5575557777755577
153+
7577755577755575
154+
.75577777555577.
155+
..755555555577..
156+
...5775555777...
157+
....57777775....` ],
158+
[ sky, bitmap`
159+
2727272727272727
160+
7272727272727272
161+
2727272727272727
162+
7272727272727272
163+
2727272727272727
164+
7272727272727272
165+
2727272727272727
166+
7272727272727272
167+
2727272727272727
168+
7272727272727272
169+
2727272727272727
170+
7272727272727272
171+
2727272727272727
172+
7272727272727272
173+
2727272727272727
174+
7272727272727272` ],
175+
)
176+
177+
// setBackground(sky)
178+
179+
setSolids([player, grass, platform, platform_left, platform_right, dirt])
180+
181+
let level = 0
182+
const levels = [
183+
map`
184+
..........
185+
..........
186+
..........
187+
.lccccr...
188+
..........
189+
..........
190+
.p......e.
191+
gggggggggg`,
192+
map`
193+
..........
194+
..........
195+
.........e
196+
........lr
197+
.....lr...
198+
..........
199+
p..lr.....
200+
gg........`,
201+
map`
202+
p.........
203+
ggr.......
204+
dd..lr....
205+
dd.......e
206+
dd......lg
207+
dd.......d
208+
dd.......d
209+
dd.......d`,
210+
map`
211+
..........
212+
p.........
213+
g..gcccr..
214+
d..d......
215+
d..de....l
216+
d..dcr....
217+
d..d......
218+
d..d......`,
219+
map`
220+
e.........
221+
r.........
222+
..........
223+
cr....lr..
224+
..........
225+
.........l
226+
p.........
227+
ggg....ggg`,
228+
map`
229+
g........g
230+
d........d
231+
d...p....d
232+
.lccccccr.
233+
.........e
234+
..........
235+
..........
236+
..........`
237+
]
238+
239+
setMap(levels[level])
240+
241+
setPushables({
242+
[ player ]: []
243+
})
244+
245+
addText("<A D> W^", {
246+
x: 3,
247+
y: 4,
248+
color: color`D`
249+
})
250+
251+
isJumping = false;
252+
isDied = false;
253+
254+
function gravity() {
255+
let prev_y = getFirst(player).y;
256+
const gravity_interval = setInterval(function() {
257+
if (isDied) {
258+
clearInterval(gravity_interval);
259+
return;
260+
}
261+
prev_y = getFirst(player).y;
262+
getFirst(player).y += 1;
263+
if (getFirst(player).y == prev_y) {
264+
clearInterval(gravity_interval);
265+
isJumping = false;
266+
} else if (getFirst(player).y == 7) {
267+
clearInterval(gravity_interval);
268+
isDied = true;
269+
setMap(map`
270+
..........
271+
..........
272+
..........
273+
..........
274+
..........
275+
cccccccccc
276+
..........
277+
..........`);
278+
addText("You Died", {
279+
x: 6,
280+
y: 7,
281+
color: color`D`
282+
});
283+
return;
284+
}
285+
after_move();
286+
}, 250);
287+
// clearInterval(gravity_interval);
288+
}
289+
290+
onInput("w", () => {
291+
if (!isDied) {
292+
if (!isJumping) {
293+
isJumping = true
294+
getFirst(player).y -= 1;
295+
setTimeout(function(){ getFirst(player).y -= 1;}, 50);
296+
setTimeout(gravity, 100);
297+
}
298+
}
299+
});
300+
onInput("a", () => {
301+
if (!isDied) {
302+
getFirst(player).x -= 1;
303+
if (!isJumping) gravity();
304+
}
305+
});
306+
onInput("d", () => {
307+
if (!isDied) {
308+
getFirst(player).x += 1;
309+
if (!isJumping) gravity();
310+
}
311+
});
312+
313+
function after_move() {
314+
if (tilesWith(player, end_1).length == 1 || tilesWith(player, end_2).length == 1) {
315+
level = level + 1;
316+
317+
const currentLevel = levels[level];
318+
319+
if (currentLevel !== undefined) {
320+
setMap(currentLevel);
321+
animation = false;
322+
clearText();
323+
if (level == 5) {
324+
addText("Thanks for playing!", {
325+
x: 1,
326+
y: 14,
327+
color: color`D`
328+
})
329+
}
330+
}
331+
}
332+
}
333+
334+
afterInput(() => {
335+
after_move();
336+
})
337+
338+
var animation = false
339+
340+
const portal_animate = setInterval(function() {
341+
if (!isDied) {
342+
if (animation) {
343+
animation = false
344+
let tmp = getFirst(end_2)
345+
clearTile(tmp.x, tmp.y)
346+
addSprite(tmp.x, tmp.y, end_1)
347+
} else {
348+
animation = true
349+
let tmp = getFirst(end_1)
350+
clearTile(tmp.x, tmp.y)
351+
addSprite(tmp.x, tmp.y, end_2)
352+
}
353+
} else {
354+
clearInterval(portal_animate);
355+
}
356+
}, 250);
357+
358+
359+

games/img/Simple-Platformer.png

19.9 KB
Loading

0 commit comments

Comments
 (0)