From 0d556a9107c7c5087cfd6cc513ca36a579d22aba Mon Sep 17 00:00:00 2001 From: Andrea <634arl@gmail.com> Date: Mon, 20 Jan 2025 14:18:49 -0600 Subject: [PATCH] Sprig App - pun pun oranges --- games/img/pun-pun-oranges.png | Bin 0 -> 34025 bytes games/pun-pun-oranges.js | 208 ++++++++++++++++++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 100644 games/img/pun-pun-oranges.png create mode 100644 games/pun-pun-oranges.js diff --git a/games/img/pun-pun-oranges.png b/games/img/pun-pun-oranges.png new file mode 100644 index 0000000000000000000000000000000000000000..8910a8d47336e28cf3852cf30c1739fd0db1faef GIT binary patch literal 34025 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 literal 0 HcmV?d00001 diff --git a/games/pun-pun-oranges.js b/games/pun-pun-oranges.js new file mode 100644 index 0000000000..da92ae0cd7 --- /dev/null +++ b/games/pun-pun-oranges.js @@ -0,0 +1,208 @@ +/* +@title: getting_started +@author: leo, edits +@tags: ['tutorial'] +@addedOn: 2022-07-26 + +Check the tutorial in the bottom right, the run button is in the top right. +Make sure to remix this tutorial if you want to save your progress! +*/ + +// Create a tune: +const arriba = tune` +500, +500: B4~500, +15000`; +const abajo = tune` +500, +500: G5^500, +15000`; +const izquierda = tune` +500, +500: G5-500, +15000;`; +const derecha = tune` +500, +500: D5/500, +15000`; + +// define the sprites in our game +const player = "p"; +const box = "b"; +const goal = "g"; +const wall = "w"; + +// assign bitmap art to each sprite +setLegend( + [ player, bitmap` +......000....... +.....00.00...... +....00...0...... +....0....0...... +....0.0.00...... +....0....0...... +...00....00..... +...0.......0.... +...0....00000... +...0....0.0000.. +...0....0...00.. +...000000....... +.....0.0........ +.....0.0........ +.....0.0........ +.....0000.......`], + [ box, bitmap` +................ +................ +........DD...... +........DDDDDD.. +.......9999DD... +.....99999999... +....999999999... +....999999999... +....999999999... +....999999999... +....99999999.... +.....9999999.... +.......9999..... +................ +................ +................`], + [ goal, bitmap` +................ +................ +................ +.CC.........C... +CCCC.......C.CC. +CC..CC....CCCC.. +.CCCCCCCCCCCC... +..CCCCC.CCCCC... +..C.C.444C.CC... +..CCCC999CCCC... +..C.C.999CCCC... +..C.CC999CC.C... +..CCCCCCCCCCC... +................ +................ +................`], + [ wall, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`] +); + +// create game levels +let level = 0; // this tracks the level we are on +const levels = [ + map` +..p. +.b.g +....`, + map` +p.. +.b. +..g`, + map` +p.wg +.bw. +.... +....`, + map` +p... +...b +...b +.bbg`, + map` +... +.p. +...`, + map` +p.w. +.bwg +.... +..bg` +]; + +// set the map displayed to the current level +const currentLevel = levels[level]; +setMap(currentLevel); + +setSolids([ player, box, wall ]); // other sprites cannot go inside of these sprites + +// allow certain sprites to push certain other sprites +setPushables({ + [player]: [box], + [box]: [box] +}); + +// inputs for player movement control +onInput("w", () => { + getFirst(player).y -= 1; + playTune(arriba); +}); + +onInput("a", () => { + getFirst(player).x -= 1; + playTune(izquierda); +}); + +onInput("s", () => { + getFirst(player).y += 1; + playTune(abajo); +}); + +onInput("d", () => { + getFirst(player).x += 1; + playTune(derecha); +}); + +// input to reset level +onInput("j", () => { + const currentLevel = levels[level]; // get the original map of the level + + // make sure the level exists before we load it + if (currentLevel !== undefined) { + clearText(""); + setMap(currentLevel); + } +}); + +// these get run after every input +afterInput(() => { + // count the number of tiles with goals + const targetNumber = tilesWith(goal).length; + + // count the number of tiles with goals and boxes + const numberCovered = tilesWith(goal, box).length; + + // if the number of goals is the same as the number of goals covered + // all goals are covered and we can go to the next level + if (numberCovered === targetNumber) { + // increase the current level number + level = level + 1; + + const currentLevel = levels[level]; + + // make sure the level exists and if so set the map + // otherwise, we have finished the last level, there is no level + // after the last level + if (currentLevel !== undefined) { + setMap(currentLevel); + } else { + addText("you win!", { y: 4, color: color`3` }); + } + } +});