From 1d8bf3224cc59781e2d675945946267386f2d55d Mon Sep 17 00:00:00 2001 From: vexxdarkz11 <73542318+vexxdarkz11@users.noreply.github.com> Date: Sat, 4 Jan 2025 20:02:07 +0500 Subject: [PATCH] Sprig App - byen --- games/byen.js | 452 +++++++++++++++++++++++++++++++++++++++++++++ games/img/byen.png | Bin 0 -> 19360 bytes 2 files changed, 452 insertions(+) create mode 100644 games/byen.js create mode 100644 games/img/byen.png diff --git a/games/byen.js b/games/byen.js new file mode 100644 index 0000000000..ae4b8a49d2 --- /dev/null +++ b/games/byen.js @@ -0,0 +1,452 @@ +/* +First time? Check out the tutorial game: +https://sprig.hackclub.com/gallery/getting_started + +@title: shoot and kill +@author: +@tags: [] +@addedOn: 2024-00-00 +*/ +const melody = tune` +250: E5~250, +250: C5~250, +250: D5~250, +250: G4~250, +250: E5~250, +250: C5~250, +250: D5~250, +250: G4~250, +250: E5~250, +250: C5~250, +250: D5~250, +250: G4~250, +250: E5~250, +250: C5~250, +250: D5~250, +250: G4~250, +250: F5~250, +250: G5~250, +250: E5~250, +250: C5~250, +250: D5~250, +250: G4~250, +250: B4~250, +250: C5~250, +250: E5~250, +250: undefined~250, +250: F5~250, +250: G5~250, +250: E5~250, +250: C5~250, +250: D5~250, +250: G4~250` + + + +// Play it: +let move= false; +let moveDirection = null; +let moveLeft = false; +let moveRight = false; +const speed= 1 +const playback = playTune(melody, Infinity) +const player = "p" +const playerr = "r" +const ene = "e" +const solid = "s" +const node = "n" +const gun = "g" +const bullet="b" +const bg ="v" +let current = "p" +let dir = "right" +setLegend( + [player, bitmap` +.....0000....... +.....0000....... +.....0000....... +.00000000000.... +.0..000000.0.... +.0..000000.0.... +.0..000000.0.... +.0..000000.0.... +.0..000000.0.... +.0..000000.0.... +.0...0..0..0.... +.0...0..0..0.... +.....0..0....... +.....0..0....... +...000..000..... +...000..000.....`], + [ene, bitmap` +................ +....00000000.... +..000000000000.. +.00000000000000. +.00000000000000. +0000000000000000 +0022220220222200 +0000000220000000 +0000002222000000 +0000000000000000 +0000002222200000 +0000022000220000 +.00022000002000. +.00000000000000. +..000000000000.. +....00000000....`], + [solid, bitmap` +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000 +0000000000000000`], + [gun, bitmap` +................ +................ +................ +................ +................ +..00000000000000 +..0.........0..0 +..0.........0000 +..0...0000000... +..0...00.0...... +..0...0000...... +..0...0......... +..00000......... +................ +................ +................`], + [playerr, bitmap` +................ +.000..0000000000 +.000..0......0.0 +.000..0......000 +0000000..00000.. +0000..0..00.0... +0000..0..0..0... +0000..0..0000... +0000..0000...... +00.0............ +00.0............ +.0.0............ +.0.0............ +.0.0............ +00.00........... +................`], + [bullet, bitmap` +................ +................ +................ +....66666666.... +...6666666666... +..666666666666.. +..666666666666.. +..666666666666.. +..666666666666.. +..666666666666.. +..666666666666.. +..666666666666.. +...6666666666... +....66666666.... +................ +................`], + [bg, bitmap` +9999999999444999 +4999999994449999 +4499499944999999 +4499449949944999 +4444949444449999 +9444444444499994 +9944444444999444 +9444444444444499 +4444444444444499 +4449449449999444 +9999449944999944 +9999449994999994 +9999499994499999 +9999449999499999 +9999999999449999 +9999999999944999`] +) +setBackground(bg) +setSolids([solid, current, playerr,ene]) + +let level = 0 +const levels = [ + map` +............... +............... +p...gssss..e... +.....ssss...... +.....sssssss... +s...sss..s..... +s...ss...s..... +s........s..... +s..sssssss..... +s.ssssssss..... +........s...... +............... +.e............. +............e..`, + map` +p...g........ +............. +....ss....... +....s........ +....s........ +....s........ +....s.......e +....ssss..... +.......s..... +.......s..... +.......s..... +............e` +] + +setMap(levels[level]) + +setPushables({ + [solid]: [playerr,player, ene] +}) + + +document.addEventListener('keydown', function(event) { + if (event.key === 'j') { + const playerTile = getFirst("r"); // Get player's current position + + // Calculate spawn position based on direction + let spawnX = playerTile.x; + let spawnY = playerTile.y; + + addSprite(spawnX, spawnY, bullet); // Spawn gun at calculated position + moveDirection = 'left'; // Set the movement direction to left + } + else if (event.key === 'l') { + const playerTile = getFirst("r"); // Get player's current position + + // Calculate spawn position based on direction + let spawnX = playerTile.x; + let spawnY = playerTile.y; + + addSprite(spawnX, spawnY, bullet); // Spawn gun at calculated position + moveDirection = 'right'; // Set the movement direction to right + } + else if (event.key === 'k') { + const playerTile = getFirst("r"); // Get player's current position + + // Calculate spawn position based on direction + let spawnX = playerTile.x; + let spawnY = playerTile.y; + + addSprite(spawnX, spawnY, bullet); // Spawn gun at calculated position + moveDirection = 'down'; // Set the movement direction to right + } + else if (event.key === 'i') { + const playerTile = getFirst("r"); // Get player's current position + + // Calculate spawn position based on direction + let spawnX = playerTile.x; + let spawnY = playerTile.y; + + addSprite(spawnX, spawnY, bullet); // Spawn gun at calculated position + moveDirection = 'up'; // Set the movement direction to right + } +}); +afterInput(() => { + +if (getFirst(player).x == getFirst(gun).x && getFirst(player).y == getFirst(gun).y) { + const gunX = getFirst(gun).x; + const gunY = getFirst(gun).y; + clearTile(getFirst(gun).x, getFirst(gun).y); + addSprite(gunX,gunY,playerr) +play() + +} + +}) + + + + +function toplayer() { + const playerpos = getFirst("p"); + const enemypos = getAll(ene); + enemypos.forEach(enemy => { + if (enemy.x < playerpos.x) { + enemypos.x += 1; + } else if (enemy.x > playerpos.x) { + + enemy.x -= 1; + } + + + + if (enemy.y < playerpos.y) { + enemy.y += 1; + } else if (enemy.y > playerpos.y) { + + enemy.y -= 1; + } + + + }); +} + +function toplayerr() { + const playerrpos = getFirst("r"); + const enemypos = getAll(ene); + enemypos.forEach(enemy => { + if (enemy.x < playerrpos.x) { + enemypos.x += 1; + } else if (enemy.x > playerrpos.x) { + + enemy.x -= 1; + } + + + + if (enemy.y < playerrpos.y) { + enemy.y += 1; + } else if (enemy.y > playerrpos.y) { + + enemy.y -= 1; + } + + + }); +} +setMap(levels[level]); +movement(); +setInterval(moveBullet, 100); +setInterval(toplayer,1000); +setInterval(toplayerr,1000); +setInterval( kill,500); +setInterval( get,100); + +function play() { + +current = "r" + + + +} + + +function moveBullet() { + const bulletSprite = getFirst(bullet); // Get the current position of the bullet + + if (bulletSprite) { + // Move the bullet in the specified direction + if (moveDirection === 'left') { + bulletSprite.x -= speed; // Move the bullet to the left + } + else if (moveDirection === 'right') { + bulletSprite.x += speed; // Move the bullet to the right + } + else if (moveDirection === 'down') { + bulletSprite.y += speed; // Move the bullet down + } + else if (moveDirection === 'up') { + bulletSprite.y -= speed; // Move the bullet up + } + + // Check if the bullet collides with any solid block + const solidBlocks = getAll(solid); // Get all solid blocks + for (let i = 0; i < solidBlocks.length; i++) { + const solidBlock = solidBlocks[i]; + if (bulletSprite.x === solidBlock.x && bulletSprite.y === solidBlock.y) { + clearTile(bulletSprite.x, bulletSprite.y); // Remove the bullet if it collides with a solid block + return; // Stop the bullet's movement + } + } + + // Remove the bullet if it goes off the screen + if (bulletSprite.x < 1 || bulletSprite.x > 10 || bulletSprite.y > 10 || bulletSprite.y < 1) { + clearTile(bulletSprite.x, bulletSprite.y); // Remove the bullet from the screen + } + } +} + + + +function kill() { + const bullets = getAll(bullet); + const enemies = getAll(ene); + + bullets.forEach((bulletSprite) => { + enemies.forEach((enemySprite) => { + if (bulletSprite.x === enemySprite.x && bulletSprite.y === enemySprite.y) { + clearTile(enemySprite.x, enemySprite.y); // Remove enemy + clearTile(bulletSprite.x, bulletSprite.y); // Remove bullet + console.log("Enemy killed at", enemySprite.x, enemySprite.y); + } + }); + }); + + const remainingEnemies = getAll(ene); // Get updated list of remaining enemies + if (remainingEnemies.length === 0) { + addText("YOU WIN!", { + x: 4, + y: 4, + color: color`3` + }); + + +} +} +function get() { + const player = getFirst(current); + const enemypos = getAll(ene); + +const threshold = 1; + enemypos.forEach(enemy => { + let distance = Math.abs(player.x - enemy.x) + Math.abs(player.y - enemy.y); +if (distance <= threshold) { + clearTile(player.x, player.y); + + addText("GAME OVER", { x: 4, y: 5, color: color`3` }); + console.log('Player killed!'); + } + }); +console.log('Player position:', player.x, player.y); + console.log('Enemy position:', enemy.x, enemy.y); + console.log('Distance:', distance); + +} + +function movement () { +onInput("s", () => { + getFirst(current).y += 1 + dir="down" + + +}) + +onInput("w", () => { + getFirst(current).y -= 1 + dir= "up" +}) +onInput("a", () => { + getFirst(current).x -= 1 + dir="left" + +}) +onInput("d", () => { + getFirst(current).x += 1 + dir="right" + +}) +} diff --git a/games/img/byen.png b/games/img/byen.png new file mode 100644 index 0000000000000000000000000000000000000000..528c0276c326141ecdc832f075dcb12022722728 GIT binary patch literal 19360 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