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.health = 100;
self.maxHealth = 100;
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 HealthBar = Container.expand(function () {
var self = Container.call(this);
// Background bar
self.background = new Container();
var bgGraphics = self.background.attachAsset('platform', {
anchorX: 0,
anchorY: 0
});
bgGraphics.tint = 0x333333;
self.addChild(self.background);
// Health bar
self.bar = new Container();
var barGraphics = self.bar.attachAsset('platform', {
anchorX: 0,
anchorY: 0
});
barGraphics.tint = 0x00FF00;
self.addChild(self.bar);
// Set size
self.width = 200;
self.height = 20;
self.background.width = self.width;
self.background.height = self.height;
self.background.scaleX = self.width / 400;
self.background.scaleY = self.height / 50;
// Update health percentage
self.updateHealth = function (current, max) {
var percentage = Math.max(0, Math.min(1, current / max));
self.bar.width = self.width * percentage;
self.bar.scaleX = self.width / 400 * percentage;
self.bar.scaleY = self.height / 50;
// Change color based on health
var barGraphics = self.bar.children[0];
if (percentage > 0.6) {
barGraphics.tint = 0x00FF00; // Green
} else if (percentage > 0.3) {
barGraphics.tint = 0xFFFF00; // Yellow
} else {
barGraphics.tint = 0xFF0000; // Red
}
};
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;
var healthBar;
// 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 health bar
healthBar = new HealthBar();
healthBar.x = 50;
healthBar.y = 100;
LK.gui.top.addChild(healthBar);
// 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];
player.health = player.maxHealth; // Initialize full health
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 health bar
if (healthBar) {
healthBar.updateHealth(player.health, player.maxHealth);
}
// 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('shoot').play();
LK.effects.flashObject(player, 0xFF0000, 300);
// Reduce player health
player.health -= 20; // Each bullet deals 20 damage
healthBar.updateHealth(player.health, player.maxHealth);
// Game over if health is depleted
if (player.health <= 0) {
LK.getSound('playerDeath').play();
LK.effects.flashScreen(0xFF0000, 500);
// Game over
LK.showGameOver();
}
// Remove bullet
bullet.destroy();
bullets.splice(j, 1);
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -71,8 +71,10 @@
self.isGrounded = false;
self.jumpsRemaining = 0;
self.maxJumps = 3;
self.platform = null;
+ self.health = 100;
+ self.maxHealth = 100;
self.jump = function () {
if (self.isGrounded || self.jumpsRemaining > 0) {
self.velocityY = self.jumpForce;
self.isJumping = true;
@@ -230,8 +232,51 @@
buttonGraphics.alpha = 0.5;
};
return self;
});
+var HealthBar = Container.expand(function () {
+ var self = Container.call(this);
+ // Background bar
+ self.background = new Container();
+ var bgGraphics = self.background.attachAsset('platform', {
+ anchorX: 0,
+ anchorY: 0
+ });
+ bgGraphics.tint = 0x333333;
+ self.addChild(self.background);
+ // Health bar
+ self.bar = new Container();
+ var barGraphics = self.bar.attachAsset('platform', {
+ anchorX: 0,
+ anchorY: 0
+ });
+ barGraphics.tint = 0x00FF00;
+ self.addChild(self.bar);
+ // Set size
+ self.width = 200;
+ self.height = 20;
+ self.background.width = self.width;
+ self.background.height = self.height;
+ self.background.scaleX = self.width / 400;
+ self.background.scaleY = self.height / 50;
+ // Update health percentage
+ self.updateHealth = function (current, max) {
+ var percentage = Math.max(0, Math.min(1, current / max));
+ self.bar.width = self.width * percentage;
+ self.bar.scaleX = self.width / 400 * percentage;
+ self.bar.scaleY = self.height / 50;
+ // Change color based on health
+ var barGraphics = self.bar.children[0];
+ if (percentage > 0.6) {
+ barGraphics.tint = 0x00FF00; // Green
+ } else if (percentage > 0.3) {
+ barGraphics.tint = 0xFFFF00; // Yellow
+ } else {
+ barGraphics.tint = 0xFF0000; // Red
+ }
+ };
+ return self;
+});
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.attachAsset('platform', {
anchorX: 0,
@@ -257,8 +302,9 @@
var bullets = [];
var leftButton, rightButton, jumpButton, shootButton;
var scoreText;
var jumpIndicator;
+var healthBar;
// Setup game UI
function setupUI() {
// Create score display
scoreText = new Text2('Enemies: ' + enemies.length, {
@@ -274,8 +320,13 @@
});
jumpIndicator.anchor.set(0, 0);
jumpIndicator.x = 50;
LK.gui.top.addChild(jumpIndicator);
+ // Create health bar
+ healthBar = new HealthBar();
+ healthBar.x = 50;
+ healthBar.y = 100;
+ LK.gui.top.addChild(healthBar);
// Create control buttons
leftButton = new ControlButton('←');
leftButton.x = 150;
leftButton.y = 2500;
@@ -375,8 +426,9 @@
player = new Character();
player.x = 100;
player.y = platforms[0].y; // Start on ground
player.platform = platforms[0];
+ player.health = player.maxHealth; // Initialize full health
game.addChild(player);
}
// Initialize game
function initGame() {
@@ -441,8 +493,12 @@
// Update jump indicator text
if (jumpIndicator) {
jumpIndicator.setText("Jumps: " + (player.isGrounded ? player.maxJumps : player.jumpsRemaining));
}
+ // Update health bar
+ if (healthBar) {
+ healthBar.updateHealth(player.health, player.maxHealth);
+ }
// Update enemies
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].update();
}
@@ -482,13 +538,20 @@
}
// Check bullet collisions with player
else if (!bullet.fromPlayer && bullet.intersects(player)) {
// Player hit
- LK.getSound('playerDeath').play();
+ LK.getSound('shoot').play();
LK.effects.flashObject(player, 0xFF0000, 300);
- LK.effects.flashScreen(0xFF0000, 500);
- // Game over
- LK.showGameOver();
+ // Reduce player health
+ player.health -= 20; // Each bullet deals 20 damage
+ healthBar.updateHealth(player.health, player.maxHealth);
+ // Game over if health is depleted
+ if (player.health <= 0) {
+ LK.getSound('playerDeath').play();
+ LK.effects.flashScreen(0xFF0000, 500);
+ // Game over
+ LK.showGameOver();
+ }
// Remove bullet
bullet.destroy();
bullets.splice(j, 1);
}