From 9e3e433ed927860fa6092b25dc86589a3ced8eb5 Mon Sep 17 00:00:00 2001 From: Adam Xu Date: Fri, 3 Jan 2025 05:47:10 -0800 Subject: [PATCH] [Sprig App] Simple Platformer (#2734) * Sprig App - Simple Platformer * Fixing metadata --------- Co-authored-by: graham --- games/Simple-Platformer.js | 359 ++++++++++++++++++++++++++++++++ games/img/Simple-Platformer.png | Bin 0 -> 20419 bytes 2 files changed, 359 insertions(+) create mode 100644 games/Simple-Platformer.js create mode 100644 games/img/Simple-Platformer.png diff --git a/games/Simple-Platformer.js b/games/Simple-Platformer.js new file mode 100644 index 0000000000..92755d9e65 --- /dev/null +++ b/games/Simple-Platformer.js @@ -0,0 +1,359 @@ +/* +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@title: Platformer +@author: Adam Xu +@tags: [] +@addedOn: 2025-01-03 +*/ + +const player = "p" +const grass = "g" +const platform = "c" +const platform_left = "l" +const platform_right = "r" +const end_1 = "e" +const end_2 = "f" +const sky = "s" +const dirt = "d" + +setLegend( + [ player, bitmap` +......0000...... +.....002200..... +.....022220..... +.....022200..... +.....00220...... +......0000...... +.......L0....... +.......L0....... +.......0L....... +.......0L....... +.......0L....... +.......00....... +.......0.0...... +......0..0...... +......0..0...... +......0..0......` ], + [ platform, bitmap` +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDCDDDDDDDCDCDD +CCDCCCDCDDCCCCCD +CCCCCCCCCCCCCCCC +CC9CCCCCCC9CCCCC +9CCCCCC9CCCCC9CC +CCCCCCCCCCCCCCCC +................ +................ +................ +................ +................ +................ +................ +................` ], + [ platform_left, bitmap` +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDCDDDDDDDCDCDD +CCDCCCDCDDCCCCCD +.CCCCCCCCCCCCCCC +.CCC9CCCCC9CCCCC +..CCCCC9CCCCC9CC +....CCCCCCCCCCCC +................ +................ +................ +................ +................ +................ +................ +................` ], + [ platform_right, bitmap` +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDCDDDDDDDCDCDD +CCDCCCDCDDCCCCCD +CCCCCCCCCCCCC9C. +CC9CCCCCCC9CCCC. +9CCCCCC9CCCCCC.. +CCCCCCCCCCCC.... +................ +................ +................ +................ +................ +................ +................ +................` ], + [ grass, bitmap` +DDDDDDDDDDDDDDDD +DDDDDDDDDDDDDDDD +DDDCDDDDDDDCDCDD +CCDCCCDCDDCCCCCD +CCCCCCCCCCCCCCCC +CCCCCCCCCC9CCCCC +CC9CCC9CCCCCC9CC +CCCCCCCCCCCCCCCC +CCCCCCCC9CCCCCCC +CCCCCCCCCCCCC9CC +C9CCC9CCCCCCCCCC +CCCCCCCCCCCCCCCC +CCC9CCCC9CCC9CCC +9CCCCCCCCCCCCCC9 +CCCCCCCCCCCCCCCC +CCCCC9CCCCC9CCCC` ], + [ dirt, bitmap` +CCCC9CCCCCCCCCCC +C9CCCCCCC9CCCCCC +CCCCCCCCCCCCCC9C +CCCC9CCCCCCCCCCC +CCCCCCCCCCCCCCCC +CCCCCCCCCC9CCCCC +CC9CCC9CCCCCC9CC +CCCCCCCCCCCCCCCC +CCCCCCCC9CCCCCCC +CCCCCCCCCCCCC9CC +C9CCC9CCCCCCCCCC +CCCCCCCCCCCCCCCC +CCC9CCCC9CCC9CCC +9CCCCCCCCCCCCCC9 +CCCCCCCCCCCCCCCC +CCCCC9CCCCC9CCCC` ], + [ end_1, bitmap` +....57777775.... +...5775555777... +..755555555577.. +.75577777555577. +7577755577755575 +5575557777755577 +5755577557775557 +7755775757575577 +7555755775575575 +7755775555775775 +5755577777755755 +5575555555557757 +.55775555557757. +..557775777555.. +...5557775555... +....77777777....` ], + [ end_2, bitmap` +....77777777.... +...5557775555... +..557775777555.. +.55775555557757. +5575555555557757 +5755577777755755 +7755775555775775 +7555755775575575 +7755775757575577 +5755577557775557 +5575557777755577 +7577755577755575 +.75577777555577. +..755555555577.. +...5775555777... +....57777775....` ], + [ sky, bitmap` +2727272727272727 +7272727272727272 +2727272727272727 +7272727272727272 +2727272727272727 +7272727272727272 +2727272727272727 +7272727272727272 +2727272727272727 +7272727272727272 +2727272727272727 +7272727272727272 +2727272727272727 +7272727272727272 +2727272727272727 +7272727272727272` ], +) + +// setBackground(sky) + +setSolids([player, grass, platform, platform_left, platform_right, dirt]) + +let level = 0 +const levels = [ + map` +.......... +.......... +.......... +.lccccr... +.......... +.......... +.p......e. +gggggggggg`, + map` +.......... +.......... +.........e +........lr +.....lr... +.......... +p..lr..... +gg........`, + map` +p......... +ggr....... +dd..lr.... +dd.......e +dd......lg +dd.......d +dd.......d +dd.......d`, + map` +.......... +p......... +g..gcccr.. +d..d...... +d..de....l +d..dcr.... +d..d...... +d..d......`, + map` +e......... +r......... +.......... +cr....lr.. +.......... +.........l +p......... +ggg....ggg`, + map` +g........g +d........d +d...p....d +.lccccccr. +.........e +.......... +.......... +..........` +] + +setMap(levels[level]) + +setPushables({ + [ player ]: [] +}) + +addText(" W^", { + x: 3, + y: 4, + color: color`D` +}) + +isJumping = false; +isDied = false; + +function gravity() { + let prev_y = getFirst(player).y; + const gravity_interval = setInterval(function() { + if (isDied) { + clearInterval(gravity_interval); + return; + } + prev_y = getFirst(player).y; + getFirst(player).y += 1; + if (getFirst(player).y == prev_y) { + clearInterval(gravity_interval); + isJumping = false; + } else if (getFirst(player).y == 7) { + clearInterval(gravity_interval); + isDied = true; + setMap(map` +.......... +.......... +.......... +.......... +.......... +cccccccccc +.......... +..........`); + addText("You Died", { + x: 6, + y: 7, + color: color`D` + }); + return; + } + after_move(); + }, 250); + // clearInterval(gravity_interval); +} + +onInput("w", () => { + if (!isDied) { + if (!isJumping) { + isJumping = true + getFirst(player).y -= 1; + setTimeout(function(){ getFirst(player).y -= 1;}, 50); + setTimeout(gravity, 100); + } + } +}); +onInput("a", () => { + if (!isDied) { + getFirst(player).x -= 1; + if (!isJumping) gravity(); + } +}); +onInput("d", () => { + if (!isDied) { + getFirst(player).x += 1; + if (!isJumping) gravity(); + } +}); + +function after_move() { + if (tilesWith(player, end_1).length == 1 || tilesWith(player, end_2).length == 1) { + level = level + 1; + + const currentLevel = levels[level]; + + if (currentLevel !== undefined) { + setMap(currentLevel); + animation = false; + clearText(); + if (level == 5) { + addText("Thanks for playing!", { + x: 1, + y: 14, + color: color`D` + }) + } + } + } +} + +afterInput(() => { + after_move(); +}) + +var animation = false + +const portal_animate = setInterval(function() { + if (!isDied) { + if (animation) { + animation = false + let tmp = getFirst(end_2) + clearTile(tmp.x, tmp.y) + addSprite(tmp.x, tmp.y, end_1) + } else { + animation = true + let tmp = getFirst(end_1) + clearTile(tmp.x, tmp.y) + addSprite(tmp.x, tmp.y, end_2) + } + } else { + clearInterval(portal_animate); + } +}, 250); + + + diff --git a/games/img/Simple-Platformer.png b/games/img/Simple-Platformer.png new file mode 100644 index 0000000000000000000000000000000000000000..8bab58b917fce4089f07dc987246d8b80b14e96a GIT binary patch literal 20419 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 BTYUfk literal 0 HcmV?d00001