/****
* 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