/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 20; // Increased speed for player bullets self.direction = 1; // 1 for right, -1 for left self.update = function () { self.x += self.speed * self.direction; }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.health = 1; self.shootTimer = 0; self.shootInterval = 150; // Fixed interval of 2.5 seconds at 60 FPS self.hit = function () { self.health--; LK.getSound('hit').play(); // Flash red when hit LK.effects.flashObject(self, 0xffffff, 300); if (self.health <= 0) { return true; // Enemy is dead } return false; // Enemy is still alive }; self.update = function () { self.shootTimer++; if (self.shootTimer >= self.shootInterval) { self.shootTimer = 0; return true; // Ready to shoot } return false; // Not ready to shoot }; return self; }); var Platform = Container.expand(function () { var self = Container.call(this); var platformGraphics = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('masterChief', { anchorX: 0.5, anchorY: 0.5 }); self.facingDirection = 1; // 1 for right, -1 for left self.shoot = function () { LK.getSound('shoot').play(); return true; }; self.update = function () { // Ensure player stays within screen bounds if (self.x < 0) { self.x = 0; } else if (self.x > 2048) { self.x = 2048; } }; self.flip = function (direction) { if (direction !== self.facingDirection) { self.facingDirection = direction; playerGraphics.scaleX = direction; } }; self.down = function (x, y, obj) { // Handle player touch/click events if (self.shoot()) { // Create a storm of bullets for (var angle = -Math.PI / 8; angle <= Math.PI / 8; angle += Math.PI / 8) { for (var offset = -1.5; offset <= 1.5; offset += 1) { var bullet = new Bullet(); bullet.x = self.x + offset * 10; // Offset for four lines bullet.y = self.y; bullet.direction = self.facingDirection; bullet.speed = 20; // Set bullet speed bullet.angle = angle; // Set bullet angle for spread bullet.update = function () { this.x += this.speed * Math.cos(this.angle) * this.direction; this.y += this.speed * Math.sin(this.angle); }; playerBullets.push(bullet); game.addChild(bullet); } } return true; } return false; }; self.jump = function () { if (!self.jumping || self.jumpCount < 10) { if (!self.jumping) { self.jumpCount = 0; // Initialize jump count } self.jumpCount++; self.jumping = true; var initialY = self.y; var jumpHeight = 200; var jumpDuration = 30; // frames var jumpSpeed = jumpHeight / (jumpDuration / 2); self.jumpTimer = 0; self.update = function () { if (self.jumping) { self.jumpTimer++; if (self.jumpTimer <= jumpDuration / 2) { self.y -= jumpSpeed; } else if (self.jumpTimer <= jumpDuration) { self.y += jumpSpeed; } else { self.jumping = false; self.jumpCount = 0; // Reset jump count when player lands self.y = initialY; } } // Ensure player stays within screen bounds if (self.x < 0) { self.x = 0; } else if (self.x > 2048) { self.x = 2048; } }; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Keep background color black }); /**** * Game Code ****/ // Add background feature var background = LK.getAsset('backgroundImage', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); // Game variables var player; var playerPlatform; var enemyPlatforms = []; var enemies = []; var playerBullets = []; var enemyBullets = []; var ammoBar; var ammoBarBg; var waveNumber = 1; var score = 0; var waveText; var scoreText; var enemiesRemaining = 0; var gameActive = true; var startSwipeX; // Initialize startSwipeX var startSwipeY; // Initialize startSwipeY // Initialize the game function initGame() { // Create player platform playerPlatform = game.addChild(new Platform()); playerPlatform.x = 2048 / 2; playerPlatform.y = 2732 - 200; // Create player player = game.addChild(new Player()); player.x = playerPlatform.x; player.y = playerPlatform.y - 80; // Create wave text waveText = new Text2('Wave: ' + waveNumber, { size: 50, fill: 0xFFFFFF }); waveText.anchor.set(1, 0); LK.gui.topRight.addChild(waveText); waveText.x = -20; waveText.y = 20; // Create score text scoreText = new Text2('Score: ' + score, { size: 50, fill: 0xFFFFFF }); scoreText.anchor.set(1, 0); LK.gui.topRight.addChild(scoreText); scoreText.x = -20; scoreText.y = 80; // Start the first wave startWave(); // Play background music LK.playMusic('bgMusic'); } function startWave() { // Clear any remaining enemies and platforms for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].destroy(); enemies.splice(i, 1); } for (var i = enemyPlatforms.length - 1; i >= 0; i--) { enemyPlatforms[i].destroy(); enemyPlatforms.splice(i, 1); } // Update wave text waveText.setText('Wave: ' + waveNumber); // Number of enemies based on wave enemiesRemaining = Math.min(3 + waveNumber, 10); // Create enemy platforms and enemies for (var i = 0; i < enemiesRemaining; i++) { // Create platform at random positions var platform = game.addChild(new Platform()); platform.x = Math.random() * (2048 - 400) + 200; // Random x position away from edges platform.y = Math.random() * (2732 - 800) + 300; // Random y position not too high or low // Ensure platforms aren't too close to player var distToPlayer = Math.sqrt(Math.pow(platform.x - playerPlatform.x, 2) + Math.pow(platform.y - playerPlatform.y, 2)); if (distToPlayer < 500) { platform.x = platform.x > playerPlatform.x ? platform.x + 500 : platform.x - 500; platform.y = platform.y > playerPlatform.y ? platform.y + 200 : platform.y - 200; } // Create enemy on platform var enemy = game.addChild(new Enemy()); enemy.x = platform.x; enemy.y = platform.y - 60; enemyPlatforms.push(platform); enemies.push(enemy); } } // Touch event on game area game.down = function (x, y, obj) { if (!gameActive) { return; } startSwipeX = x; startSwipeY = y; }; game.move = function (x, y, obj) { if (!gameActive) { return; } if (startSwipeY !== undefined) { if (y < startSwipeY - 50) { player.y -= 40; // Move player up faster startSwipeY = y; } else if (y > startSwipeY + 50) { player.y += 40; // Move player down faster startSwipeY = y; } } if (startSwipeX !== undefined) { if (x > startSwipeX + 50) { player.x += 40; // Move player right faster startSwipeX = x; player.flip(1); // Face right player.shoot(); // Shoot right } else if (x < startSwipeX - 50) { player.x -= 40; // Move player left faster startSwipeX = x; player.flip(-1); // Face left player.shoot(); // Shoot left } } }; game.up = function (x, y, obj) { startSwipeX = undefined; startSwipeY = undefined; }; // Main game update loop game.update = function () { if (!gameActive) { return; } // Update player player.update(); // Automatic shooting logic if (LK.ticks % 42 === 0) { // Shoot every 60 frames (1 second at 60 FPS) // Shoot every 30 frames if (player.shoot()) { // Create bullet var bullet = new Bullet(); bullet.x = player.x; bullet.y = player.y; bullet.direction = player.facingDirection; playerBullets.push(bullet); game.addChild(bullet); } } // Update bullets updateBullets(); // Update enemies updateEnemies(); if (enemies.length === 0 && enemiesRemaining === 0) { waveNumber++; startWave(); } }; function updateBullets() { // Update player bullets for (var i = playerBullets.length - 1; i >= 0; i--) { var bullet = playerBullets[i]; // Check if bullet is off screen if (bullet.x < -50 || bullet.x > 2048 + 50) { bullet.destroy(); playerBullets.splice(i, 1); continue; } // Check for collisions with enemies for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { // Enemy hit var isDead = enemy.hit(); bullet.destroy(); playerBullets.splice(i, 1); if (isDead) { // Enemy killed LK.getSound('enemyDeath').play(); enemy.destroy(); enemies.splice(j, 1); enemiesRemaining--; // Increase score score += 100; scoreText.setText('Score: ' + score); } break; } } } // Update enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { var bullet = enemyBullets[i]; // Check if bullet is off screen if (bullet.x < -50 || bullet.x > 2048 + 50) { bullet.destroy(); enemyBullets.splice(i, 1); continue; } // Check for collision with player if (bullet.intersects(player)) { bullet.destroy(); enemyBullets.splice(i, 1); // Player hit - game over gameActive = false; LK.effects.flashScreen(0xff0000, 1000); LK.setScore(score); LK.showGameOver(); } } } function updateEnemies() { for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; var readyToShoot = enemy.update(); // Add horizontal movement for enemies if (enemy.lastX === undefined) { enemy.lastX = enemy.x; } // Initialize lastX for tracking changes on X enemy.x += enemy.speed * enemy.direction; // Check if enemy reached the screen edges and reverse direction if (enemy.x <= 0 || enemy.x >= 2048) { enemy.direction *= -1; // Reverse direction } // Make enemy face the player var direction = enemy.x > player.x ? -1 : 1; if (direction === -1) { enemy.scale.x = -1; } else { enemy.scale.x = 1; } enemy.lastX = enemy.x; // Update lastX // Enemy shoots if (readyToShoot) { var bullet = new Bullet(); bullet.x = enemy.x; bullet.y = enemy.y; // Direction toward player bullet.direction = direction; enemyBullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); // Play shooting sound } } } // Initialize the game initGame();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 20; // Increased speed for player bullets
self.direction = 1; // 1 for right, -1 for left
self.update = function () {
self.x += self.speed * self.direction;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 1;
self.shootTimer = 0;
self.shootInterval = 150; // Fixed interval of 2.5 seconds at 60 FPS
self.hit = function () {
self.health--;
LK.getSound('hit').play();
// Flash red when hit
LK.effects.flashObject(self, 0xffffff, 300);
if (self.health <= 0) {
return true; // Enemy is dead
}
return false; // Enemy is still alive
};
self.update = function () {
self.shootTimer++;
if (self.shootTimer >= self.shootInterval) {
self.shootTimer = 0;
return true; // Ready to shoot
}
return false; // Not ready to shoot
};
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('masterChief', {
anchorX: 0.5,
anchorY: 0.5
});
self.facingDirection = 1; // 1 for right, -1 for left
self.shoot = function () {
LK.getSound('shoot').play();
return true;
};
self.update = function () {
// Ensure player stays within screen bounds
if (self.x < 0) {
self.x = 0;
} else if (self.x > 2048) {
self.x = 2048;
}
};
self.flip = function (direction) {
if (direction !== self.facingDirection) {
self.facingDirection = direction;
playerGraphics.scaleX = direction;
}
};
self.down = function (x, y, obj) {
// Handle player touch/click events
if (self.shoot()) {
// Create a storm of bullets
for (var angle = -Math.PI / 8; angle <= Math.PI / 8; angle += Math.PI / 8) {
for (var offset = -1.5; offset <= 1.5; offset += 1) {
var bullet = new Bullet();
bullet.x = self.x + offset * 10; // Offset for four lines
bullet.y = self.y;
bullet.direction = self.facingDirection;
bullet.speed = 20; // Set bullet speed
bullet.angle = angle; // Set bullet angle for spread
bullet.update = function () {
this.x += this.speed * Math.cos(this.angle) * this.direction;
this.y += this.speed * Math.sin(this.angle);
};
playerBullets.push(bullet);
game.addChild(bullet);
}
}
return true;
}
return false;
};
self.jump = function () {
if (!self.jumping || self.jumpCount < 10) {
if (!self.jumping) {
self.jumpCount = 0; // Initialize jump count
}
self.jumpCount++;
self.jumping = true;
var initialY = self.y;
var jumpHeight = 200;
var jumpDuration = 30; // frames
var jumpSpeed = jumpHeight / (jumpDuration / 2);
self.jumpTimer = 0;
self.update = function () {
if (self.jumping) {
self.jumpTimer++;
if (self.jumpTimer <= jumpDuration / 2) {
self.y -= jumpSpeed;
} else if (self.jumpTimer <= jumpDuration) {
self.y += jumpSpeed;
} else {
self.jumping = false;
self.jumpCount = 0; // Reset jump count when player lands
self.y = initialY;
}
}
// Ensure player stays within screen bounds
if (self.x < 0) {
self.x = 0;
} else if (self.x > 2048) {
self.x = 2048;
}
};
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Keep background color black
});
/****
* Game Code
****/
// Add background feature
var background = LK.getAsset('backgroundImage', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(background);
// Game variables
var player;
var playerPlatform;
var enemyPlatforms = [];
var enemies = [];
var playerBullets = [];
var enemyBullets = [];
var ammoBar;
var ammoBarBg;
var waveNumber = 1;
var score = 0;
var waveText;
var scoreText;
var enemiesRemaining = 0;
var gameActive = true;
var startSwipeX; // Initialize startSwipeX
var startSwipeY; // Initialize startSwipeY
// Initialize the game
function initGame() {
// Create player platform
playerPlatform = game.addChild(new Platform());
playerPlatform.x = 2048 / 2;
playerPlatform.y = 2732 - 200;
// Create player
player = game.addChild(new Player());
player.x = playerPlatform.x;
player.y = playerPlatform.y - 80;
// Create wave text
waveText = new Text2('Wave: ' + waveNumber, {
size: 50,
fill: 0xFFFFFF
});
waveText.anchor.set(1, 0);
LK.gui.topRight.addChild(waveText);
waveText.x = -20;
waveText.y = 20;
// Create score text
scoreText = new Text2('Score: ' + score, {
size: 50,
fill: 0xFFFFFF
});
scoreText.anchor.set(1, 0);
LK.gui.topRight.addChild(scoreText);
scoreText.x = -20;
scoreText.y = 80;
// Start the first wave
startWave();
// Play background music
LK.playMusic('bgMusic');
}
function startWave() {
// Clear any remaining enemies and platforms
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].destroy();
enemies.splice(i, 1);
}
for (var i = enemyPlatforms.length - 1; i >= 0; i--) {
enemyPlatforms[i].destroy();
enemyPlatforms.splice(i, 1);
}
// Update wave text
waveText.setText('Wave: ' + waveNumber);
// Number of enemies based on wave
enemiesRemaining = Math.min(3 + waveNumber, 10);
// Create enemy platforms and enemies
for (var i = 0; i < enemiesRemaining; i++) {
// Create platform at random positions
var platform = game.addChild(new Platform());
platform.x = Math.random() * (2048 - 400) + 200; // Random x position away from edges
platform.y = Math.random() * (2732 - 800) + 300; // Random y position not too high or low
// Ensure platforms aren't too close to player
var distToPlayer = Math.sqrt(Math.pow(platform.x - playerPlatform.x, 2) + Math.pow(platform.y - playerPlatform.y, 2));
if (distToPlayer < 500) {
platform.x = platform.x > playerPlatform.x ? platform.x + 500 : platform.x - 500;
platform.y = platform.y > playerPlatform.y ? platform.y + 200 : platform.y - 200;
}
// Create enemy on platform
var enemy = game.addChild(new Enemy());
enemy.x = platform.x;
enemy.y = platform.y - 60;
enemyPlatforms.push(platform);
enemies.push(enemy);
}
}
// Touch event on game area
game.down = function (x, y, obj) {
if (!gameActive) {
return;
}
startSwipeX = x;
startSwipeY = y;
};
game.move = function (x, y, obj) {
if (!gameActive) {
return;
}
if (startSwipeY !== undefined) {
if (y < startSwipeY - 50) {
player.y -= 40; // Move player up faster
startSwipeY = y;
} else if (y > startSwipeY + 50) {
player.y += 40; // Move player down faster
startSwipeY = y;
}
}
if (startSwipeX !== undefined) {
if (x > startSwipeX + 50) {
player.x += 40; // Move player right faster
startSwipeX = x;
player.flip(1); // Face right
player.shoot(); // Shoot right
} else if (x < startSwipeX - 50) {
player.x -= 40; // Move player left faster
startSwipeX = x;
player.flip(-1); // Face left
player.shoot(); // Shoot left
}
}
};
game.up = function (x, y, obj) {
startSwipeX = undefined;
startSwipeY = undefined;
};
// Main game update loop
game.update = function () {
if (!gameActive) {
return;
}
// Update player
player.update();
// Automatic shooting logic
if (LK.ticks % 42 === 0) {
// Shoot every 60 frames (1 second at 60 FPS)
// Shoot every 30 frames
if (player.shoot()) {
// Create bullet
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y;
bullet.direction = player.facingDirection;
playerBullets.push(bullet);
game.addChild(bullet);
}
}
// Update bullets
updateBullets();
// Update enemies
updateEnemies();
if (enemies.length === 0 && enemiesRemaining === 0) {
waveNumber++;
startWave();
}
};
function updateBullets() {
// Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
// Check if bullet is off screen
if (bullet.x < -50 || bullet.x > 2048 + 50) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check for collisions with enemies
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
// Enemy hit
var isDead = enemy.hit();
bullet.destroy();
playerBullets.splice(i, 1);
if (isDead) {
// Enemy killed
LK.getSound('enemyDeath').play();
enemy.destroy();
enemies.splice(j, 1);
enemiesRemaining--;
// Increase score
score += 100;
scoreText.setText('Score: ' + score);
}
break;
}
}
}
// Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
// Check if bullet is off screen
if (bullet.x < -50 || bullet.x > 2048 + 50) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check for collision with player
if (bullet.intersects(player)) {
bullet.destroy();
enemyBullets.splice(i, 1);
// Player hit - game over
gameActive = false;
LK.effects.flashScreen(0xff0000, 1000);
LK.setScore(score);
LK.showGameOver();
}
}
}
function updateEnemies() {
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
var readyToShoot = enemy.update();
// Add horizontal movement for enemies
if (enemy.lastX === undefined) {
enemy.lastX = enemy.x;
} // Initialize lastX for tracking changes on X
enemy.x += enemy.speed * enemy.direction;
// Check if enemy reached the screen edges and reverse direction
if (enemy.x <= 0 || enemy.x >= 2048) {
enemy.direction *= -1; // Reverse direction
}
// Make enemy face the player
var direction = enemy.x > player.x ? -1 : 1;
if (direction === -1) {
enemy.scale.x = -1;
} else {
enemy.scale.x = 1;
}
enemy.lastX = enemy.x; // Update lastX
// Enemy shoots
if (readyToShoot) {
var bullet = new Bullet();
bullet.x = enemy.x;
bullet.y = enemy.y;
// Direction toward player
bullet.direction = direction;
enemyBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play(); // Play shooting sound
}
}
}
// Initialize the game
initGame();
anime landscape deep jungle amazon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
jungle soldier stand shoot the target right direction. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
jungle soldier stand shoot the target right direction. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
jungle grass. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows