|
| 1 | +/* |
| 2 | +First time? Check out the tutorial game: |
| 3 | +https://sprig.hackclub.com/gallery/getting_started |
| 4 | +
|
| 5 | +@title: a-maze-ing |
| 6 | +@author: |
| 7 | +@tags: [] |
| 8 | +@addedOn: 2025-00-00 |
| 9 | +*/ |
| 10 | + |
| 11 | +const player = "p" |
| 12 | +const wall = "w" |
| 13 | +const checkpoint = "c" |
| 14 | +const melody = tune` |
| 15 | +500, |
| 16 | +500: D4~500 + B4^500, |
| 17 | +500: D4~500 + B4^500, |
| 18 | +500: G4~500 + D5^500, |
| 19 | +500: G4~500 + D5^500, |
| 20 | +500: E4~500 + B4^500, |
| 21 | +500: D4^500 + A4~500, |
| 22 | +500: E4~500 + B4^500, |
| 23 | +500: G4~500 + A4^500 + F4-500, |
| 24 | +500, |
| 25 | +500: G4~500 + A4^500 + F4-500, |
| 26 | +500: G4~500 + A4^500 + F4-500, |
| 27 | +500: D4/500, |
| 28 | +500: E4/500, |
| 29 | +500: D4~500 + B4^500 + F4/500, |
| 30 | +500: D4~500 + B4^500, |
| 31 | +500: G4~500 + D5^500, |
| 32 | +500: G4~500 + D5^500, |
| 33 | +500: E4~500 + B4^500, |
| 34 | +500: A4~500 + D4^500, |
| 35 | +500: E4~500 + B4^500, |
| 36 | +500: G4~500 + A4^500 + F4-500, |
| 37 | +500, |
| 38 | +500: G4~500 + A4^500 + F4-500, |
| 39 | +500: G4~500 + A4^500 + F4-500, |
| 40 | +500: D4/500, |
| 41 | +500: E4/500 + A4^500, |
| 42 | +500: F4/500 + B4~500 + G4^500, |
| 43 | +500: A4~500 + F4^500, |
| 44 | +500: G4~500 + E4^500, |
| 45 | +500: F4~500 + D4^500, |
| 46 | +500: C4^500 + E4~500` |
| 47 | +const teleport = tune` |
| 48 | +500, |
| 49 | +500: C5/500, |
| 50 | +15000` |
| 51 | +const falsewall = "f" |
| 52 | +const greg ="g" |
| 53 | +const gork = "r" |
| 54 | + |
| 55 | + |
| 56 | +setLegend( |
| 57 | + [ player, bitmap` |
| 58 | +4444444444444444 |
| 59 | +4444444444444444 |
| 60 | +4444444444444444 |
| 61 | +4444444444444444 |
| 62 | +4440044444400444 |
| 63 | +4440044444400444 |
| 64 | +4444444444444444 |
| 65 | +4444444444444444 |
| 66 | +4440000000000444 |
| 67 | +4444000000004444 |
| 68 | +4444444444444444 |
| 69 | +4444444444444444 |
| 70 | +4444444444444444 |
| 71 | +4444444444444444 |
| 72 | +4444444444444444 |
| 73 | +4444444444444444` ], |
| 74 | + [ wall, bitmap` |
| 75 | +0000000000000000 |
| 76 | +0000000000000000 |
| 77 | +0000000000000000 |
| 78 | +0000000000000000 |
| 79 | +0000000000000000 |
| 80 | +0000000000000000 |
| 81 | +0000000000000000 |
| 82 | +0000000000000000 |
| 83 | +0000000000000000 |
| 84 | +0000000000000000 |
| 85 | +0000000000000000 |
| 86 | +0000000000000000 |
| 87 | +0000000000000000 |
| 88 | +0000000000000000 |
| 89 | +0000000000000000 |
| 90 | +0000000000000000` ], |
| 91 | + [ checkpoint, bitmap` |
| 92 | +....00000000.... |
| 93 | +...0888888880... |
| 94 | +..008000000800.. |
| 95 | +.00007777770000. |
| 96 | +0880000000000880 |
| 97 | +0807000880007080 |
| 98 | +0807000000007080 |
| 99 | +0807080770807080 |
| 100 | +0807080770807080 |
| 101 | +0807000000007080 |
| 102 | +0807000880007080 |
| 103 | +0880000000000880 |
| 104 | +.00007777770000. |
| 105 | +..008000000800.. |
| 106 | +...0888888880... |
| 107 | +....00000000....`], |
| 108 | + [ falsewall, bitmap` |
| 109 | +0000000000L00000 |
| 110 | +000L000000LL0000 |
| 111 | +0LL0L0000L00LL00 |
| 112 | +L0000L0LL0000000 |
| 113 | +0000000000000000 |
| 114 | +0000000000000000 |
| 115 | +000000000000LLL0 |
| 116 | +00LLLLLL000LL00L |
| 117 | +LL00000L00L00000 |
| 118 | +00000000LL000000 |
| 119 | +000000LL0000L0L0 |
| 120 | +0000000000000000 |
| 121 | +0000000000L00000 |
| 122 | +000LLLL0000LLLL0 |
| 123 | +0LL0000000LLL000 |
| 124 | +L000000000L00000`], |
| 125 | + [ greg, bitmap` |
| 126 | +................ |
| 127 | +....00000000.... |
| 128 | +...000LLLLL00... |
| 129 | +..000L00000L00.. |
| 130 | +.000L0000000L00. |
| 131 | +.00L110011111L0. |
| 132 | +.000L110110LLL0. |
| 133 | +.0000LL100L0000. |
| 134 | +.00000L0111L000. |
| 135 | +.00000L101L0000. |
| 136 | +.0011110011L000. |
| 137 | +.00L00000010L00. |
| 138 | +..00L000001L00.. |
| 139 | +...00LLLLLL00... |
| 140 | +....00000000.... |
| 141 | +................`], |
| 142 | + [ gork, bitmap` |
| 143 | +0000000000000000 |
| 144 | +0000000000000000 |
| 145 | +0000000000000000 |
| 146 | +0000000000000000 |
| 147 | +0000033333300000 |
| 148 | +0000300000030000 |
| 149 | +0200302002030020 |
| 150 | +0020300000030200 |
| 151 | +0002700000072000 |
| 152 | +0000700000070000 |
| 153 | +0000700000070000 |
| 154 | +0000077777700000 |
| 155 | +0000000000000000 |
| 156 | +0000000000000000 |
| 157 | +0000000000000000 |
| 158 | +0000000000000000`] |
| 159 | + ) |
| 160 | + |
| 161 | +setSolids([player, wall, gork, greg]); |
| 162 | +setPushables({ |
| 163 | + [player]: [falsewall] |
| 164 | +}); |
| 165 | + |
| 166 | + |
| 167 | +let level = 0 |
| 168 | +const levels = [ |
| 169 | + map` |
| 170 | +wwwwwwwww |
| 171 | +wpw...w.w |
| 172 | +w.w.w.w.w |
| 173 | +w.w.w.w.w |
| 174 | +w.w.w.w.w |
| 175 | +w...w...w |
| 176 | +www.w.w.w |
| 177 | +w.....w.c |
| 178 | +wwwwwwwww`, |
| 179 | + map` |
| 180 | +pf.w.w. |
| 181 | +.www.f. |
| 182 | +...w.w. |
| 183 | +ww.w.w. |
| 184 | +...w.wc |
| 185 | +.wwwrww |
| 186 | +.......`, |
| 187 | + map` |
| 188 | +pw..w.... |
| 189 | +.ww.w.wwf |
| 190 | +......w.. |
| 191 | +www.www.w |
| 192 | +....w.... |
| 193 | +.wwww.ww. |
| 194 | +......wc.`, |
| 195 | + map` |
| 196 | +p....w..... |
| 197 | +wwww.f.www. |
| 198 | +..cw.w.w... |
| 199 | +.wwf.w.f.ww |
| 200 | +.w.....w... |
| 201 | +.wwwwwwww.w |
| 202 | +.....r.....`, |
| 203 | + map` |
| 204 | +.f..w...w |
| 205 | +pww...w.. |
| 206 | +wwwwwww.w |
| 207 | +..cw..f.. |
| 208 | +..ww..rw. |
| 209 | +.wgwwwfw. |
| 210 | +.w....... |
| 211 | +.....www.`, |
| 212 | + map` |
| 213 | +pw...w... |
| 214 | +.wcw...w. |
| 215 | +..wwwfwr..... |
| 216 | +w........`, |
| 217 | + map` |
| 218 | +p..ww.wwc |
| 219 | +ww....r.. |
| 220 | +...wwww.w |
| 221 | +fwww..... |
| 222 | +.....wwww`, |
| 223 | + map` |
| 224 | +c....rwww |
| 225 | +wwwww.... |
| 226 | +....wfwww |
| 227 | +www.w.w.. |
| 228 | +p.....w..` |
| 229 | +] |
| 230 | + |
| 231 | +const playback = playTune(melody, Infinity) |
| 232 | + |
| 233 | + |
| 234 | +setMap(levels[level]) |
| 235 | + |
| 236 | +onInput("w", () => { |
| 237 | + getFirst(player).y -= 1 |
| 238 | +}) |
| 239 | +onInput("s", () => { |
| 240 | + getFirst(player).y += 1 |
| 241 | +}) |
| 242 | +onInput("a", () => { |
| 243 | + getFirst(player).x -= 1 |
| 244 | +}) |
| 245 | +onInput("d", () => { |
| 246 | + getFirst(player).x += 1 |
| 247 | +}) |
| 248 | + |
| 249 | + |
| 250 | + |
| 251 | +onInput("i", () => { |
| 252 | + const g = getFirst(gork) |
| 253 | + if (!g) return |
| 254 | + g.y -= 1 |
| 255 | +}) |
| 256 | + |
| 257 | +onInput("k", () => { |
| 258 | + const g = getFirst(gork) |
| 259 | + if (!g) return |
| 260 | + g.y += 1 |
| 261 | +}) |
| 262 | + |
| 263 | +onInput("j", () => { |
| 264 | + const g = getFirst(gork) |
| 265 | + if (!g) return |
| 266 | + g.x -= 1 |
| 267 | +}) |
| 268 | + |
| 269 | +onInput("l", () => { |
| 270 | + const g = getFirst(gork) |
| 271 | + if (!g) return |
| 272 | + g.x += 1 |
| 273 | +}) |
| 274 | + |
| 275 | + |
| 276 | +afterInput(() => { |
| 277 | + |
| 278 | +}) |
| 279 | + |
| 280 | + |
| 281 | +afterInput(() => { |
| 282 | + // check if the player is on a checkpoint |
| 283 | + const playerOnCheckpoint = tilesWith(player, checkpoint).length > 0; |
| 284 | + |
| 285 | + if (playerOnCheckpoint) { |
| 286 | + // increase the current level number |
| 287 | + level = level + 1; |
| 288 | + playTune(teleport) |
| 289 | + |
| 290 | + |
| 291 | + const currentLevel = levels[level]; |
| 292 | + |
| 293 | + // make sure the level exists and if so set the map |
| 294 | + if (currentLevel !== undefined) { |
| 295 | + setMap(currentLevel); |
| 296 | + } else { |
| 297 | + addText("you win!", { y: 8, color: color`7` }); |
| 298 | + } |
| 299 | + } |
| 300 | +}); |
| 301 | + |
| 302 | + |
| 303 | + |
0 commit comments