/**** * Classes ****/ // Bullet class var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.75, scaleY: 0.75 }); self.speed = -10; self.speedX = 0; self.speedY = self.speed; self.update = function () { self.x += self.speedX; self.y += self.speedY; }; }); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.0, scaleY: 2.0 }); self.speed = 2; self.update = function () { // Mimic player movement logic for enemy self.x += Math.sin(self.y / 50) * self.speed * 2; // Zigzag horizontal movement self.y += self.speed; // Continue downward movement }; }); // The assets will be automatically created and loaded by the LK engine // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.0, scaleY: 2.0 }); self.speed = 5; self.update = function () { // Player movement logic goes here }; }); // PowerUp class var PowerUp = Container.expand(function () { var self = Container.call(this); var powerUpGraphics = self.attachAsset('powerUp', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 3; self.update = function () { self.y += self.speed; }; }); // Rubbish class var Rubbish = Container.expand(function () { var self = Container.call(this); var rubbishGraphics = self.attachAsset('rubbish', { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0 }); self.speed = 3; self.update = function () { self.y += self.speed; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ // Initialize player, bullets and enemies var player = game.addChild(new Player()); player.x = 2048 / 2; player.y = 2732 - 100; var bullets = []; var enemies = []; var score = 0; var lives = 5; var scoreText = new Text2('Score: 0', { size: 100, fill: "#ffffff" }); scoreText.x = 2048 - 500; // Move score display further to the left scoreText.y = 50; // Slightly lower from the top game.addChild(scoreText); var hearts = []; for (var i = 0; i < lives; i++) { var heart = LK.getAsset('heart', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5, x: 40 + i * 60, y: 80 }); hearts.push(heart); game.addChild(heart); } // Game update function game.update = function () { // Player movement logic game.move = function (x, y, obj) { player.x = x; player.y = y; }; // Shooting logic if (LK.ticks % 10 == 0) { // Fire a bullet every 10 ticks var bullet = new Bullet(); bullet.x = player.x; bullet.y = player.y; bullets.push(bullet); game.addChild(bullet); } // Enemy, power-up, and rubbish spawning logic if (LK.ticks % Math.max(60, 120 - Math.floor(score / 10)) == 0) { for (var i = 0; i < Math.min(5, 1 + Math.floor(score / 50)); i++) { var enemy = new Enemy(); enemy.x = Math.random() * 2048; enemy.y = 0; enemies.push(enemy); game.addChild(enemy); } // Randomly throw power-ups if (Math.random() < 0.3) { // 30% chance to throw a power-up var powerUp = new PowerUp(); powerUp.x = enemy.x; powerUp.y = enemy.y; // Ensure power-up does not overlap with rubbish var overlap = false; for (var i = 0; i < game.children.length; i++) { if (game.children[i] instanceof Rubbish && powerUp.intersects(game.children[i])) { overlap = true; break; } } if (!overlap) { game.addChild(powerUp); } } // Randomly throw rubbish if (Math.random() < 0.5) { // 50% chance to throw rubbish var rubbish = new Rubbish(); rubbish.x = enemy.x; rubbish.y = enemy.y; // Ensure rubbish does not overlap with power-ups var overlap = false; for (var i = 0; i < game.children.length; i++) { if (game.children[i] instanceof PowerUp && rubbish.intersects(game.children[i])) { overlap = true; break; } } if (!overlap) { game.addChild(rubbish); } } } // Bullet and enemy update logic for (var i = bullets.length - 1; i >= 0; i--) { if (bullets[i].y < 0) { bullets[i].destroy(); bullets.splice(i, 1); } } for (var i = enemies.length - 1; i >= 0; i--) { if (enemies[i].y > 2732) { enemies[i].destroy(); enemies.splice(i, 1); } } // Collision detection for (var i = bullets.length - 1; i >= 0; i--) { for (var j = enemies.length - 1; j >= 0; j--) { if (bullets[i].intersects(enemies[j])) { bullets[i].destroy(); bullets.splice(i, 1); enemies[j].destroy(); enemies.splice(j, 1); score += 10; scoreText.setText('Score: ' + score); break; } } } // Check for collision between player and enemies for (var j = enemies.length - 1; j >= 0; j--) { if (player.intersects(enemies[j])) { enemies[j].destroy(); enemies.splice(j, 1); lives -= 1; if (hearts.length > lives) { var heartToRemove = hearts.pop(); heartToRemove.destroy(); } if (lives <= 0) { // Show game over LK.showGameOver(); } } } // Power-up collection and rubbish collision for (var i = 0; i < game.children.length; i++) { var child = game.children[i]; if (child instanceof PowerUp && player.intersects(child)) { child.destroy(); // Implement power-up effect: scatter bullets for (var angle = 0; angle < 360; angle += 45) { var scatterBullet = new Bullet(); scatterBullet.x = player.x; scatterBullet.y = player.y; scatterBullet.speedX = Math.cos(angle * Math.PI / 180) * 10; scatterBullet.speedY = Math.sin(angle * Math.PI / 180) * 10; scatterBullet.update = function () { this.x += this.speedX; this.y += this.speedY; }; bullets.push(scatterBullet); game.addChild(scatterBullet); } } else if (child instanceof Rubbish && player.intersects(child)) { child.destroy(); // Decrease life by 1 lives -= 1; if (hearts.length > lives) { var heartToRemove = hearts.pop(); heartToRemove.destroy(); } if (lives <= 0) { // Show game over LK.showGameOver(); } } } // Increase enemy speed after score reaches 100 if (score >= 100) { for (var i = 0; i < enemies.length; i++) { enemies[i].speed += 0.01; // Gradually increase speed } } };
/****
* Classes
****/
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.75,
scaleY: 0.75
});
self.speed = -10;
self.speedX = 0;
self.speedY = self.speed;
self.update = function () {
self.x += self.speedX;
self.y += self.speedY;
};
});
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.0,
scaleY: 2.0
});
self.speed = 2;
self.update = function () {
// Mimic player movement logic for enemy
self.x += Math.sin(self.y / 50) * self.speed * 2; // Zigzag horizontal movement
self.y += self.speed; // Continue downward movement
};
});
// The assets will be automatically created and loaded by the LK engine
// Player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.0,
scaleY: 2.0
});
self.speed = 5;
self.update = function () {
// Player movement logic goes here
};
});
// PowerUp class
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerUpGraphics = self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
};
});
// Rubbish class
var Rubbish = Container.expand(function () {
var self = Container.call(this);
var rubbishGraphics = self.attachAsset('rubbish', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Initialize player, bullets and enemies
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 - 100;
var bullets = [];
var enemies = [];
var score = 0;
var lives = 5;
var scoreText = new Text2('Score: 0', {
size: 100,
fill: "#ffffff"
});
scoreText.x = 2048 - 500; // Move score display further to the left
scoreText.y = 50; // Slightly lower from the top
game.addChild(scoreText);
var hearts = [];
for (var i = 0; i < lives; i++) {
var heart = LK.getAsset('heart', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.5,
scaleY: 0.5,
x: 40 + i * 60,
y: 80
});
hearts.push(heart);
game.addChild(heart);
}
// Game update function
game.update = function () {
// Player movement logic
game.move = function (x, y, obj) {
player.x = x;
player.y = y;
};
// Shooting logic
if (LK.ticks % 10 == 0) {
// Fire a bullet every 10 ticks
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y;
bullets.push(bullet);
game.addChild(bullet);
}
// Enemy, power-up, and rubbish spawning logic
if (LK.ticks % Math.max(60, 120 - Math.floor(score / 10)) == 0) {
for (var i = 0; i < Math.min(5, 1 + Math.floor(score / 50)); i++) {
var enemy = new Enemy();
enemy.x = Math.random() * 2048;
enemy.y = 0;
enemies.push(enemy);
game.addChild(enemy);
}
// Randomly throw power-ups
if (Math.random() < 0.3) {
// 30% chance to throw a power-up
var powerUp = new PowerUp();
powerUp.x = enemy.x;
powerUp.y = enemy.y;
// Ensure power-up does not overlap with rubbish
var overlap = false;
for (var i = 0; i < game.children.length; i++) {
if (game.children[i] instanceof Rubbish && powerUp.intersects(game.children[i])) {
overlap = true;
break;
}
}
if (!overlap) {
game.addChild(powerUp);
}
}
// Randomly throw rubbish
if (Math.random() < 0.5) {
// 50% chance to throw rubbish
var rubbish = new Rubbish();
rubbish.x = enemy.x;
rubbish.y = enemy.y;
// Ensure rubbish does not overlap with power-ups
var overlap = false;
for (var i = 0; i < game.children.length; i++) {
if (game.children[i] instanceof PowerUp && rubbish.intersects(game.children[i])) {
overlap = true;
break;
}
}
if (!overlap) {
game.addChild(rubbish);
}
}
}
// Bullet and enemy update logic
for (var i = bullets.length - 1; i >= 0; i--) {
if (bullets[i].y < 0) {
bullets[i].destroy();
bullets.splice(i, 1);
}
}
for (var i = enemies.length - 1; i >= 0; i--) {
if (enemies[i].y > 2732) {
enemies[i].destroy();
enemies.splice(i, 1);
}
}
// Collision detection
for (var i = bullets.length - 1; i >= 0; i--) {
for (var j = enemies.length - 1; j >= 0; j--) {
if (bullets[i].intersects(enemies[j])) {
bullets[i].destroy();
bullets.splice(i, 1);
enemies[j].destroy();
enemies.splice(j, 1);
score += 10;
scoreText.setText('Score: ' + score);
break;
}
}
}
// Check for collision between player and enemies
for (var j = enemies.length - 1; j >= 0; j--) {
if (player.intersects(enemies[j])) {
enemies[j].destroy();
enemies.splice(j, 1);
lives -= 1;
if (hearts.length > lives) {
var heartToRemove = hearts.pop();
heartToRemove.destroy();
}
if (lives <= 0) {
// Show game over
LK.showGameOver();
}
}
}
// Power-up collection and rubbish collision
for (var i = 0; i < game.children.length; i++) {
var child = game.children[i];
if (child instanceof PowerUp && player.intersects(child)) {
child.destroy();
// Implement power-up effect: scatter bullets
for (var angle = 0; angle < 360; angle += 45) {
var scatterBullet = new Bullet();
scatterBullet.x = player.x;
scatterBullet.y = player.y;
scatterBullet.speedX = Math.cos(angle * Math.PI / 180) * 10;
scatterBullet.speedY = Math.sin(angle * Math.PI / 180) * 10;
scatterBullet.update = function () {
this.x += this.speedX;
this.y += this.speedY;
};
bullets.push(scatterBullet);
game.addChild(scatterBullet);
}
} else if (child instanceof Rubbish && player.intersects(child)) {
child.destroy();
// Decrease life by 1
lives -= 1;
if (hearts.length > lives) {
var heartToRemove = hearts.pop();
heartToRemove.destroy();
}
if (lives <= 0) {
// Show game over
LK.showGameOver();
}
}
}
// Increase enemy speed after score reaches 100
if (score >= 100) {
for (var i = 0; i < enemies.length; i++) {
enemies[i].speed += 0.01; // Gradually increase speed
}
}
};
Aliens. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Space craft facing upwards. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Power ups. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Rocks. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Bullet. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Red ♥️. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.