User prompt
add background asset
User prompt
player can jump 7 times
User prompt
platform random location
User prompt
reduce enemy bullet multiple
User prompt
enemy interval release shoot is every one second
User prompt
player have health bar
User prompt
enemy can shoot right and can shoot left
User prompt
triple jump
Code edit (1 edits merged)
Please save this source code
User prompt
Soldier Assault: Platform Combat
Initial prompt
1. JavaScript 2D side scroling ground and Platformer Game soldier shooter attack game. 2. player soldier game mobe right and right. 3 enemy soldier move left and right. 4. random platform. 5. game end when all enemies died. 6. game over when player died. 7. touchscreen controler button for move left and right. touch controler button A for soldier shoot attack. touch controler S for jump. 8.limited platform just 7 paltform and enemy on the platform. 9.enemy not same platform with player
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var ActionButton = Container.expand(function (label) { var self = Container.call(this); var buttonGraphics = self.attachAsset('actionButton', { anchorX: 0.5, anchorY: 0.5, alpha: 0.5 }); var buttonText = new Text2(label, { size: 60, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); self.buttonType = label; self.isPressed = false; self.down = function () { self.isPressed = true; buttonGraphics.alpha = 0.8; if (self.buttonType === 'A') { player.shoot(); } else if (self.buttonType === 'B') { player.jump(); } }; self.up = function () { self.isPressed = false; buttonGraphics.alpha = 0.5; }; return self; }); var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.direction = 1; // 1 for right, -1 for left self.speed = 15; self.fromPlayer = true; self.update = function () { self.x += self.speed * self.direction; // Check if bullet is off-screen if (self.x < -50 || self.x > 2100) { self.shouldRemove = true; } }; return self; }); var Character = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('soldier', { anchorX: 0.5, anchorY: 1.0 }); self.direction = 1; // 1 for right, -1 for left self.velocityY = 0; self.velocityX = 0; self.speed = 8; self.jumpForce = -20; self.gravity = 1; self.isJumping = false; self.isGrounded = false; self.jumpsRemaining = 0; self.maxJumps = 3; self.platform = null; self.jump = function () { if (self.isGrounded || self.jumpsRemaining > 0) { self.velocityY = self.jumpForce; self.isJumping = true; if (self.isGrounded) { self.jumpsRemaining = self.maxJumps - 1; } else { self.jumpsRemaining--; } self.isGrounded = false; LK.getSound('jump').play(); } }; self.shoot = function () { var bullet = new Bullet(); bullet.x = self.x + self.direction * 40; bullet.y = self.y - 60; bullet.direction = self.direction; bullet.fromPlayer = true; bullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); }; self.moveLeft = function () { self.direction = -1; self.velocityX = -self.speed; graphics.scaleX = -1; }; self.moveRight = function () { self.direction = 1; self.velocityX = self.speed; graphics.scaleX = 1; }; self.stopMoving = function () { self.velocityX = 0; }; self.update = function () { // Apply gravity self.velocityY += self.gravity; // Apply velocity self.x += self.velocityX; self.y += self.velocityY; // Check screen boundaries if (self.x < 40) { self.x = 40; } else if (self.x > 2008) { self.x = 2008; } // Check if character fell off the bottom of the screen if (self.y > 2732) { LK.getSound('playerDeath').play(); LK.effects.flashScreen(0xff0000, 500); LK.showGameOver(); } // Reset grounded state self.isGrounded = false; // Check platform collisions for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; // Simple collision detection with platform if (self.velocityY >= 0 && // Only check collision when falling self.x >= platform.x && self.x <= platform.x + platform.width && self.y >= platform.y - 10 && self.y <= platform.y + 10) { self.isGrounded = true; self.isJumping = false; self.jumpsRemaining = self.maxJumps; self.velocityY = 0; self.y = platform.y; self.platform = platform; break; } } }; return self; }); var Enemy = Character.expand(function () { var self = Character.call(this); // Replace soldier asset with enemy asset self.removeChildren(); var graphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 1.0 }); // Adjust enemy properties self.speed = 4; self.direction = -1; self.shootCooldown = 0; self.shootInterval = Math.floor(Math.random() * 120) + 60; // Random interval between 1-3 seconds graphics.scaleX = -1; // Override update method var parentUpdate = self.update; self.update = function () { parentUpdate.call(this); // AI movement: patrol the platform if (self.platform) { // Check if reached edge of platform if (self.x <= self.platform.x + 40) { self.direction = 1; graphics.scaleX = 1; self.velocityX = self.speed; } else if (self.x >= self.platform.x + self.platform.width - 40) { self.direction = -1; graphics.scaleX = -1; self.velocityX = -self.speed; } } // Shooting logic self.shootCooldown++; if (self.shootCooldown >= self.shootInterval) { // Face the player before shooting if (player) { var directionToPlayer = player.x < self.x ? -1 : 1; graphics.scaleX = directionToPlayer; } self.shoot(); self.shootCooldown = 0; self.shootInterval = Math.floor(Math.random() * 120) + 60; } }; // Override shoot method self.shoot = function () { // Determine direction to shoot based on player position var directionToPlayer = player.x < self.x ? -1 : 1; var bullet = new Bullet(); bullet.x = self.x + directionToPlayer * 40; bullet.y = self.y - 60; bullet.direction = directionToPlayer; bullet.fromPlayer = false; bullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); }; return self; }); var ControlButton = Container.expand(function (type) { var self = Container.call(this); var buttonGraphics = self.attachAsset('controlButton', { anchorX: 0.5, anchorY: 0.5, alpha: 0.5 }); var buttonText = new Text2(type, { size: 60, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); self.buttonType = type; self.isPressed = false; self.down = function () { self.isPressed = true; buttonGraphics.alpha = 0.8; }; self.up = function () { self.isPressed = false; buttonGraphics.alpha = 0.5; }; return self; }); var Platform = Container.expand(function () { var self = Container.call(this); var platformGraphics = self.attachAsset('platform', { anchorX: 0, anchorY: 0 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game variables var player; var platforms = []; var enemies = []; var bullets = []; var leftButton, rightButton, jumpButton, shootButton; var scoreText; var jumpIndicator; // Setup game UI function setupUI() { // Create score display scoreText = new Text2('Enemies: ' + enemies.length, { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); // Create jump counter display jumpIndicator = new Text2('Jumps: 3', { size: 60, fill: 0xFFFFFF }); jumpIndicator.anchor.set(0, 0); jumpIndicator.x = 50; LK.gui.top.addChild(jumpIndicator); // Create control buttons leftButton = new ControlButton('←'); leftButton.x = 150; leftButton.y = 2500; game.addChild(leftButton); rightButton = new ControlButton('→'); rightButton.x = 350; rightButton.y = 2500; game.addChild(rightButton); jumpButton = new ActionButton('B'); jumpButton.x = 1850; jumpButton.y = 2500; game.addChild(jumpButton); shootButton = new ActionButton('A'); shootButton.x = 1650; shootButton.y = 2500; game.addChild(shootButton); } // Create game platforms function createPlatforms() { // Create ground platform var ground = new Platform(); ground.x = 0; ground.y = 2600; ground.width = 2048; ground.scaleX = 5.12; // Scale to fit screen width (2048/400) platforms.push(ground); game.addChild(ground); // Create elevated platforms (6 more for a total of 7) var platformPositions = [{ x: 200, y: 2300, scale: 1 }, { x: 1200, y: 2300, scale: 1 }, { x: 500, y: 2000, scale: 1.2 }, { x: 1300, y: 1700, scale: 1 }, { x: 200, y: 1400, scale: 1.1 }, { x: 900, y: 1100, scale: 1.3 }]; for (var i = 0; i < platformPositions.length; i++) { var pos = platformPositions[i]; var platform = new Platform(); platform.x = pos.x; platform.y = pos.y; platform.scaleX = pos.scale; platform.width = 400 * pos.scale; platforms.push(platform); game.addChild(platform); } } // Create enemies function createEnemies() { // Place enemies on different platforms than the player var enemyPositions = [{ x: 300, platform: 1 }, { x: 1300, platform: 2 }, { x: 700, platform: 3 }, { x: 1400, platform: 4 }, { x: 300, platform: 5 }]; for (var i = 0; i < enemyPositions.length; i++) { var pos = enemyPositions[i]; var enemy = new Enemy(); var platform = platforms[pos.platform]; enemy.x = pos.x; enemy.y = platform.y; enemy.platform = platform; enemies.push(enemy); game.addChild(enemy); } } // Create player function createPlayer() { player = new Character(); player.x = 100; player.y = platforms[0].y; // Start on ground player.platform = platforms[0]; game.addChild(player); } // Initialize game function initGame() { // Create game elements createPlatforms(); createEnemies(); createPlayer(); setupUI(); // Play background music LK.playMusic('bgMusic'); } // Handle input game.down = function (x, y, obj) { // Only respond to direct object clicks if (!obj) return; if (obj === leftButton) { leftButton.down(); } else if (obj === rightButton) { rightButton.down(); } else if (obj === jumpButton) { jumpButton.down(); } else if (obj === shootButton) { shootButton.down(); } }; game.up = function (x, y, obj) { // First check if any button was directly clicked if (obj) { if (obj === leftButton) { leftButton.up(); } else if (obj === rightButton) { rightButton.up(); } else if (obj === jumpButton) { jumpButton.up(); } else if (obj === shootButton) { shootButton.up(); } return; } // Check if any button is being released if (leftButton.isPressed) leftButton.up(); if (rightButton.isPressed) rightButton.up(); if (jumpButton.isPressed) jumpButton.up(); if (shootButton.isPressed) shootButton.up(); }; // Update function gets called every frame game.update = function () { if (!player) { initGame(); return; } // Handle control input if (leftButton && leftButton.isPressed) { player.moveLeft(); } else if (rightButton && rightButton.isPressed) { player.moveRight(); } else { player.stopMoving(); } // Update player player.update(); // Update jump indicator text if (jumpIndicator) { jumpIndicator.setText("Jumps: " + (player.isGrounded ? player.maxJumps : player.jumpsRemaining)); } // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].update(); } // Update bullets for (var j = bullets.length - 1; j >= 0; j--) { var bullet = bullets[j]; bullet.update(); // Check if bullet should be removed if (bullet.shouldRemove) { bullet.destroy(); bullets.splice(j, 1); continue; } // Check bullet collisions with enemies if (bullet.fromPlayer) { for (var k = enemies.length - 1; k >= 0; k--) { var enemy = enemies[k]; if (bullet.intersects(enemy)) { // Enemy hit LK.getSound('enemyDeath').play(); LK.effects.flashObject(enemy, 0xFF0000, 300); // Remove enemy enemy.destroy(); enemies.splice(k, 1); // Remove bullet bullet.destroy(); bullets.splice(j, 1); // Update score scoreText.setText('Enemies: ' + enemies.length); // Check if all enemies are defeated if (enemies.length === 0) { LK.showYouWin(); } break; } } } // Check bullet collisions with player else if (!bullet.fromPlayer && bullet.intersects(player)) { // Player hit LK.getSound('playerDeath').play(); LK.effects.flashObject(player, 0xFF0000, 300); LK.effects.flashScreen(0xFF0000, 500); // Game over LK.showGameOver(); // Remove bullet bullet.destroy(); bullets.splice(j, 1); } } };
===================================================================
--- original.js
+++ change.js
@@ -180,19 +180,26 @@
}
// Shooting logic
self.shootCooldown++;
if (self.shootCooldown >= self.shootInterval) {
+ // Face the player before shooting
+ if (player) {
+ var directionToPlayer = player.x < self.x ? -1 : 1;
+ graphics.scaleX = directionToPlayer;
+ }
self.shoot();
self.shootCooldown = 0;
self.shootInterval = Math.floor(Math.random() * 120) + 60;
}
};
// Override shoot method
self.shoot = function () {
+ // Determine direction to shoot based on player position
+ var directionToPlayer = player.x < self.x ? -1 : 1;
var bullet = new Bullet();
- bullet.x = self.x + self.direction * 40;
+ bullet.x = self.x + directionToPlayer * 40;
bullet.y = self.y - 60;
- bullet.direction = self.direction;
+ bullet.direction = directionToPlayer;
bullet.fromPlayer = false;
bullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();