User prompt
change control color to blue color
User prompt
increase control size
User prompt
enemy can jump
User prompt
add background
User prompt
add game background feature
User prompt
enemy can jump
User prompt
player get one hit dead
User prompt
slow move enemy
User prompt
4x jump
User prompt
touch not respons
Code edit (1 edits merged)
Please save this source code
User prompt
Platform Push Patrol
Initial prompt
1. The game features a 2D static image with ground sidescrolling random platformer action. 2. The player character is positioned on a lower platform. 3. An enemy patrols horizontally on a separate platform. 4. The player attacks the enemy using a push attack.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.vx = 1; // Slowed down enemy speed self.patrolStart = 0; self.patrolEnd = 500; self.width = enemyGraphics.width; self.height = enemyGraphics.height; self.update = function () { self.x += self.vx; // Patrol back and forth if (self.x > self.patrolEnd || self.x < self.patrolStart) { self.vx *= -1; } // Animate based on direction if (self.vx > 0) { enemyGraphics.scaleX = 1; } else { enemyGraphics.scaleX = -1; } }; return self; }); var Platform = Container.expand(function () { var self = Container.call(this); var platformGraphics = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); self.width = platformGraphics.width; self.height = platformGraphics.height; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.vx = 0; self.vy = 0; self.speed = 7; self.jumpPower = -20; self.gravity = 1; self.grounded = false; self.facingRight = true; self.pushCooldown = 0; self.maxPushCooldown = 30; self.width = playerGraphics.width; self.height = playerGraphics.height; self.jumpCount = 0; self.maxJumps = 4; self.jump = function () { if (self.grounded || self.jumpCount < self.maxJumps) { self.vy = self.jumpPower; self.grounded = false; self.jumpCount++; LK.getSound('jump').play(); } }; self.pushAttack = function () { if (self.pushCooldown <= 0) { var attack = new PushAttack(); attack.x = self.x + (self.facingRight ? 70 : -70); attack.y = self.y; attack.direction = self.facingRight ? 1 : -1; game.addChild(attack); pushAttacks.push(attack); self.pushCooldown = self.maxPushCooldown; LK.getSound('push').play(); } }; self.update = function () { // Apply gravity self.vy += self.gravity; // Apply velocity self.x += self.vx; self.y += self.vy; // Handle push cooldown if (self.pushCooldown > 0) { self.pushCooldown--; } // Check platform collisions self.grounded = false; for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; if (self.y + self.height / 2 > platform.y - platform.height / 2 && self.y - self.height / 2 < platform.y + platform.height / 2 && self.x + self.width / 2 > platform.x - platform.width / 2 && self.x - self.width / 2 < platform.x + platform.width / 2) { // Only handle collision if falling if (self.vy > 0) { self.y = platform.y - platform.height / 2 - self.height / 2; self.vy = 0; self.grounded = true; self.jumpCount = 0; } } } // Screen boundaries if (self.x - self.width / 2 < 0) { self.x = self.width / 2; } else if (self.x + self.width / 2 > 2048) { self.x = 2048 - self.width / 2; } // Check for collisions with enemies for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; if (self.intersects(enemy)) { // Player is defeated LK.getSound('defeat').play(); LK.effects.flashScreen(0xFF0000, 500); resetPlayer(); break; } } // If falling off screen if (self.y > 2732 + 100) { LK.getSound('fall').play(); LK.effects.flashScreen(0xFF0000, 500); resetPlayer(); } // Update facing direction based on movement if (self.vx > 0) { self.facingRight = true; } else if (self.vx < 0) { self.facingRight = false; } // Animate player based on facing direction if (self.facingRight) { playerGraphics.scaleX = 1; } else { playerGraphics.scaleX = -1; } }; return self; }); var PushAttack = Container.expand(function () { var self = Container.call(this); var attackGraphics = self.attachAsset('pushAttack', { anchorX: 0.5, anchorY: 0.5, alpha: 0.7 }); self.active = true; self.lifespan = 0; self.maxLife = 15; self.direction = 1; // 1 for right, -1 for left self.speed = 15; self.update = function () { if (self.active) { self.x += self.speed * self.direction; self.lifespan++; if (self.lifespan >= self.maxLife) { self.active = false; self.visible = false; } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Black background }); /**** * Game Code ****/ // Game variables var player; var platforms = []; var enemies = []; var pushAttacks = []; var level = 1; var score = 0; var scoreText; var levelText; var leftButton; var rightButton; var jumpButton; var pushButton; var controlsVisible = true; // Create UI elements function createUI() { // Score display scoreText = new Text2('Score: 0', { size: 70, fill: 0xFFFFFF }); scoreText.anchor.set(1, 0); LK.gui.topRight.addChild(scoreText); // Level display levelText = new Text2('Level: 1', { size: 70, fill: 0xFFFFFF }); levelText.anchor.set(0, 0); LK.gui.top.addChild(levelText); // Mobile controls (only shown on touch devices) createMobileControls(); } function createMobileControls() { // Left movement button leftButton = LK.getAsset('platform', { anchorX: 0.5, anchorY: 0.5, width: 150, height: 150, alpha: 0.5, tint: 0x888888 }); leftButton.x = 200; LK.gui.bottomLeft.addChild(leftButton); // Right movement button rightButton = LK.getAsset('platform', { anchorX: 0.5, anchorY: 0.5, width: 150, height: 150, alpha: 0.5, tint: 0x888888 }); rightButton.x = 400; LK.gui.bottomLeft.addChild(rightButton); // Jump button jumpButton = LK.getAsset('platform', { anchorX: 0.5, anchorY: 0.5, width: 150, height: 150, alpha: 0.5, tint: 0xAAAAAA }); jumpButton.x = -400; LK.gui.bottomRight.addChild(jumpButton); // Push attack button pushButton = LK.getAsset('platform', { anchorX: 0.5, anchorY: 0.5, width: 150, height: 150, alpha: 0.5, tint: 0xF39C12 }); pushButton.x = -200; LK.gui.bottomRight.addChild(pushButton); // Add touch event listeners to buttons leftButton.down = function () { leftButtonPressed = true; }; leftButton.up = function () { leftButtonPressed = false; }; rightButton.down = function () { rightButtonPressed = true; }; rightButton.up = function () { rightButtonPressed = false; }; jumpButton.down = function () { player.jump(); }; pushButton.down = function () { player.pushAttack(); }; } // Generate a level function generateLevel() { // Clear existing level elements clearLevel(); // Create platforms var platformCount = 5 + Math.min(5, Math.floor(level / 2)); var minHeight = 2000; // Start platforms from this height upward var maxHeight = 800; // Don't go higher than this for (var i = 0; i < platformCount; i++) { var platform = new Platform(); // Distribute platforms evenly across width platform.x = i * (2048 / (platformCount - 1)); // Randomize height between minHeight and maxHeight var height = minHeight - (minHeight - maxHeight) * (i / (platformCount - 1)); height += Math.random() * 200 - 100; // Add some variation platform.y = height; // Ensure ground platform is always at the bottom if (i === 0) { platform.x = 1024; // Center platform.y = 2500; // Bottom platform.width = 2048; // Full width } game.addChild(platform); platforms.push(platform); // Add enemies to platforms (except the ground platform) if (i > 0 && Math.random() < 0.7 + level * 0.05) { var enemy = new Enemy(); enemy.x = platform.x; enemy.y = platform.y - platform.height / 2 - enemy.height / 2; enemy.patrolStart = platform.x - platform.width / 2 + enemy.width / 2; enemy.patrolEnd = platform.x + platform.width / 2 - enemy.width / 2; // Increase enemy speed based on level enemy.vx = 2 + level * 0.5; if (Math.random() > 0.5) { enemy.vx *= -1; } game.addChild(enemy); enemies.push(enemy); } } // Update level text levelText.setText('Level: ' + level); } // Clear all level elements function clearLevel() { // Remove all platforms for (var i = 0; i < platforms.length; i++) { platforms[i].destroy(); } platforms = []; // Remove all enemies for (var i = 0; i < enemies.length; i++) { enemies[i].destroy(); } enemies = []; // Remove all push attacks for (var i = 0; i < pushAttacks.length; i++) { pushAttacks[i].destroy(); } pushAttacks = []; } // Create the player function createPlayer() { player = new Player(); player.x = 1024; // Center of screen player.y = 2300; // Above the ground platform game.addChild(player); } // Reset player position function resetPlayer() { player.x = 1024; player.y = 2300; player.vx = 0; player.vy = 0; } // Initialize the game function initGame() { // Reset game state level = 1; score = 0; LK.setScore(0); // Create UI createUI(); // Generate first level generateLevel(); // Create player createPlayer(); // Play background music LK.playMusic('gameMusic', { fade: { start: 0, end: 0.7, duration: 1000 } }); } // Check if all enemies are defeated function checkLevelComplete() { if (enemies.length === 0) { // Level complete level++; // Show level up message var levelUpText = new Text2('Level ' + level + '!', { size: 150, fill: 0xFFFF00 }); levelUpText.anchor.set(0.5, 0.5); levelUpText.x = 1024; levelUpText.y = 1366; game.addChild(levelUpText); // Remove the text after a delay LK.setTimeout(function () { levelUpText.destroy(); generateLevel(); }, 2000); } } // Control the player with touch/mouse function handlePlayerMovement() { // Reset horizontal velocity player.vx = 0; // Check for active touch on left/right buttons if (leftButtonPressed) { player.vx = -player.speed; } if (rightButtonPressed) { player.vx = player.speed; } } // Handle touch/mouse inputs var leftButtonPressed = false; var rightButtonPressed = false; var jumpButtonPressed = false; var pushButtonPressed = false; var touchPositions = {}; game.down = function (x, y, obj) { var touchId = Date.now(); // Generate unique ID for this touch touchPositions[touchId] = { x: x, y: y, target: null }; // Check which button was pressed if (leftButton.getBounds().contains(x, y)) { leftButtonPressed = true; touchPositions[touchId].target = 'left'; } else if (rightButton.getBounds().contains(x, y)) { rightButtonPressed = true; touchPositions[touchId].target = 'right'; } else if (jumpButton.getBounds().contains(x, y)) { player.jump(); touchPositions[touchId].target = 'jump'; } else if (pushButton.getBounds().contains(x, y)) { player.pushAttack(); touchPositions[touchId].target = 'push'; } }; game.up = function (x, y, obj) { // Find which touch this corresponds to for (var id in touchPositions) { var touch = touchPositions[id]; var target = touch.target; // Reset the appropriate state based on which button was released if (target === 'left') { leftButtonPressed = false; } else if (target === 'right') { rightButtonPressed = false; } delete touchPositions[id]; break; } }; game.move = function (x, y, obj) { // This method intentionally left empty - we use down/up for controls }; // Update game state each frame game.update = function () { // Handle player movement handlePlayerMovement(); // Update player if (player) { player.update(); } // Update enemies for (var i = 0; i < enemies.length; i++) { enemies[i].update(); } // Update push attacks and check for collisions for (var i = pushAttacks.length - 1; i >= 0; i--) { var attack = pushAttacks[i]; if (!attack.active) { attack.destroy(); pushAttacks.splice(i, 1); continue; } attack.update(); // Check for collisions with enemies for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (attack.intersects(enemy)) { // Defeated enemy LK.getSound('defeat').play(); // Add score score += 100; LK.setScore(score); scoreText.setText('Score: ' + score); // Effect LK.effects.flashObject(enemy, 0xFF0000, 500); // Remove enemy enemy.destroy(); enemies.splice(j, 1); // Remove attack attack.active = false; // Check if level is complete checkLevelComplete(); } } } }; // Initialize the game initGame();
===================================================================
--- original.js
+++ change.js
@@ -15,23 +15,12 @@
});
self.vx = 1; // Slowed down enemy speed
self.patrolStart = 0;
self.patrolEnd = 500;
- self.gravity = 1; // Gravity effect
- self.vy = 0; // Vertical velocity
- self.grounded = false; // Grounded state
self.width = enemyGraphics.width;
self.height = enemyGraphics.height;
self.update = function () {
- self.vy += self.gravity; // Apply gravity
self.x += self.vx;
- self.y += self.vy; // Apply vertical velocity
- // Jump logic
- if (self.grounded && Math.random() < 0.01) {
- // Random chance to jump
- self.vy = -15; // Jump power
- self.grounded = false;
- }
// Patrol back and forth
if (self.x > self.patrolEnd || self.x < self.patrolStart) {
self.vx *= -1;
}
@@ -115,16 +104,8 @@
self.grounded = true;
self.jumpCount = 0;
}
}
- if (self.y + self.height / 2 > platform.y - platform.height / 2 && self.y - self.height / 2 < platform.y + platform.height / 2 && self.x + self.width / 2 > platform.x - platform.width / 2 && self.x - self.width / 2 < platform.x + platform.width / 2) {
- // Only handle collision if falling
- if (self.vy > 0) {
- self.y = platform.y - platform.height / 2 - self.height / 2;
- self.vy = 0;
- self.grounded = true;
- }
- }
}
// Screen boundaries
if (self.x - self.width / 2 < 0) {
self.x = self.width / 2;
@@ -191,9 +172,9 @@
/****
* Initialize Game
****/
var game = new LK.Game({
- backgroundColor: 0x87CEEB // Sky blue background
+ backgroundColor: 0x000000 // Black background
});
/****
* Game Code