User prompt
put tree images on bothsides of the screen
User prompt
speed increases 20% by each 1000 points after first 1000 points
User prompt
object intensity increases after 1000 points
User prompt
obstacles continue to show all game
User prompt
put objects continuously
User prompt
rocks and trees keep coming
User prompt
games continues till hit
User prompt
snow boarder does not come down
User prompt
place the snowboarder on top
User prompt
reverse the flow
Code edit (1 edits merged)
Please save this source code
User prompt
Downhill Dash: Snowboard Escape
Initial prompt
down hill snowboard game
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Obstacle class (tree or rock) var Obstacle = Container.expand(function () { var self = Container.call(this); self.type = Math.random() < 0.6 ? 'tree' : 'rock'; var assetId = self.type === 'tree' ? 'tree' : 'rock'; var obs = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.radius = obs.width * 0.45; self.speed = 0; // Set by game return self; }); // Powerup class (shield or boost) var Powerup = Container.expand(function () { var self = Container.call(this); self.kind = Math.random() < 0.5 ? 'shield' : 'boost'; var assetId = self.kind === 'shield' ? 'shield' : 'boost'; var pu = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); self.radius = pu.width * 0.45; self.speed = 0; // Set by game return self; }); // Snowboarder (player) class var Snowboarder = Container.expand(function () { var self = Container.call(this); var sb = self.attachAsset('snowboarder', { anchorX: 0.5, anchorY: 0.5 }); self.radius = sb.width * 0.45; // For collision self.hasShield = false; self.shieldNode = null; // Show shield visual if active self.setShield = function (active) { self.hasShield = active; if (active && !self.shieldNode) { self.shieldNode = self.attachAsset('shield', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.3, scaleY: 1.3, alpha: 0.5 }); } else if (!active && self.shieldNode) { self.shieldNode.destroy(); self.shieldNode = null; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xffffff // White for snow }); /**** * Game Code ****/ // Speed boost powerup // Shield powerup // Rock obstacle // Tree obstacle // Snowboarder (player) // Game constants var GAME_WIDTH = 2048; var GAME_HEIGHT = 2732; var PLAY_AREA_MARGIN = 120; // px, left/right margin for obstacles var OBSTACLE_MIN_Y_DIST = 400; // Minimum vertical distance between obstacles var OBSTACLE_MAX_Y_DIST = 700; var OBSTACLE_MIN_X = PLAY_AREA_MARGIN; var OBSTACLE_MAX_X = GAME_WIDTH - PLAY_AREA_MARGIN; var POWERUP_CHANCE = 0.12; // Chance to spawn a powerup instead of obstacle // Game state var snowboarder; var obstacles = []; var powerups = []; var dragNode = null; var dragOffsetX = 0; var dragStartX = 0; var dragStartSnowboarderX = 0; var lastObstacleY = 0; var speed = 18; // Initial speed (pixels per frame) var maxSpeed = 48; var speedIncreaseEvery = 600; // Increase speed every N ticks var ticksSinceStart = 0; var distance = 0; // Distance traveled (score) var scoreTxt; var shieldTimer = 0; var boostTimer = 0; var isBoosting = false; // GUI: Score scoreTxt = new Text2('0', { size: 120, fill: "#222" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Initialize player snowboarder = new Snowboarder(); game.addChild(snowboarder); snowboarder.x = GAME_WIDTH / 2; snowboarder.y = GAME_HEIGHT * 0.12; // Helper: Clamp value function clamp(val, min, max) { return Math.max(min, Math.min(max, val)); } // Helper: Distance between two objects function dist(a, b) { var dx = a.x - b.x; var dy = a.y - b.y; return Math.sqrt(dx * dx + dy * dy); } // Spawn an obstacle or powerup function spawnObstacleOrPowerup(y) { if (Math.random() < POWERUP_CHANCE) { // Powerup var pu = new Powerup(); pu.x = Math.random() * (OBSTACLE_MAX_X - OBSTACLE_MIN_X) + OBSTACLE_MIN_X; pu.y = y; pu.speed = speed; powerups.push(pu); game.addChild(pu); } else { // Obstacle var obs = new Obstacle(); obs.x = Math.random() * (OBSTACLE_MAX_X - OBSTACLE_MIN_X) + OBSTACLE_MIN_X; obs.y = y; obs.speed = speed; obstacles.push(obs); game.addChild(obs); } } // Initial obstacles lastObstacleY = snowboarder.y - 600; for (var i = 0; i < 6; i++) { lastObstacleY -= Math.random() * (OBSTACLE_MAX_Y_DIST - OBSTACLE_MIN_Y_DIST) + OBSTACLE_MIN_Y_DIST; spawnObstacleOrPowerup(lastObstacleY); } // Touch/drag controls game.down = function (x, y, obj) { // Only allow drag if touch is on lower 2/3 of screen (to avoid top menu) if (y > GAME_HEIGHT * 0.2) { dragNode = snowboarder; dragStartX = x; dragStartSnowboarderX = snowboarder.x; } }; game.move = function (x, y, obj) { if (dragNode === snowboarder) { var dx = x - dragStartX; var newX = clamp(dragStartSnowboarderX + dx, OBSTACLE_MIN_X, OBSTACLE_MAX_X); snowboarder.x = newX; } }; game.up = function (x, y, obj) { dragNode = null; }; // Main game loop game.update = function () { ticksSinceStart++; // Increase speed over time if (ticksSinceStart % speedIncreaseEvery === 0 && speed < maxSpeed) { speed += 2; } // If boosting, increase speed temporarily var currentSpeed = isBoosting ? speed * 1.7 : speed; // Move obstacles and powerups up (reverse flow) for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; obs.y -= currentSpeed; obs.speed = currentSpeed; // Remove if off screen (now above screen) if (obs.y + obs.height / 2 < -100) { obs.destroy(); obstacles.splice(i, 1); } } for (var i = powerups.length - 1; i >= 0; i--) { var pu = powerups[i]; pu.y -= currentSpeed; pu.speed = currentSpeed; // Remove if off screen (now above screen) if (pu.y + pu.height / 2 < -100) { pu.destroy(); powerups.splice(i, 1); } } // Spawn new obstacles/powerups as needed (now below player) while (lastObstacleY < snowboarder.y + 3000) { lastObstacleY += Math.random() * (OBSTACLE_MAX_Y_DIST - OBSTACLE_MIN_Y_DIST) + OBSTACLE_MIN_Y_DIST; spawnObstacleOrPowerup(lastObstacleY); } // Collision: obstacles var collided = false; for (var i = 0; i < obstacles.length; i++) { var obs = obstacles[i]; if (dist(snowboarder, obs) < snowboarder.radius + obs.radius) { collided = true; break; } } if (collided) { if (snowboarder.hasShield) { snowboarder.setShield(false); // Flash snowboarder LK.effects.flashObject(snowboarder, 0xffe066, 600); } else { // Game over LK.effects.flashScreen(0xff0000, 900); LK.showGameOver(); return; } } // Collision: powerups for (var i = powerups.length - 1; i >= 0; i--) { var pu = powerups[i]; if (dist(snowboarder, pu) < snowboarder.radius + pu.radius) { if (pu.kind === 'shield') { snowboarder.setShield(true); shieldTimer = 360; // 6 seconds at 60fps } else if (pu.kind === 'boost') { isBoosting = true; boostTimer = 180; // 3 seconds at 60fps // Flash snowboarder red for boost LK.effects.flashObject(snowboarder, 0xff3b3b, 400); } pu.destroy(); powerups.splice(i, 1); } } // Powerup timers if (snowboarder.hasShield) { shieldTimer--; if (shieldTimer <= 0) { snowboarder.setShield(false); } } if (isBoosting) { boostTimer--; if (boostTimer <= 0) { isBoosting = false; } } // Move snowboarder down the screen (reverse flow) snowboarder.y += currentSpeed; // Score: distance traveled distance += currentSpeed; var scoreVal = Math.floor(distance / 10); LK.setScore(scoreVal); scoreTxt.setText(scoreVal); // Win condition: none (endless), but you could add a win at e.g. 10000m }; /* End of game code */
===================================================================
--- original.js
+++ change.js
@@ -113,9 +113,9 @@
// Initialize player
snowboarder = new Snowboarder();
game.addChild(snowboarder);
snowboarder.x = GAME_WIDTH / 2;
-snowboarder.y = GAME_HEIGHT * 0.75;
+snowboarder.y = GAME_HEIGHT * 0.12;
// Helper: Clamp value
function clamp(val, min, max) {
return Math.max(min, Math.min(max, val));
}
pine tree seen from above. In-Game asset. 2d. High contrast. No shadows
snowboarder seen from above. In-Game asset. 2d. High contrast. No shadows
rock. In-Game asset. 2d. High contrast. No shadows
grey rock. In-Game asset. 2d. High contrast. No shadows
boost arrow. In-Game asset. 2d. High contrast. No shadows
remove background