/**** * Classes ****/ // Bot class var Bot = Container.expand(function () { var self = Container.call(this); var botGraphics = self.attachAsset('bot', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.update = function () { self.y += self.speed; // Check if the bot has crossed the line and remove it if (self.y > 2732) { self.destroy(); var index = bots.indexOf(self); if (index > -1) { bots.splice(index, 1); } } // Bot firing logic if (LK.ticks % Math.max(30, 120 - level * 5) == 0) { // Adjust the firing rate by changing the modulus value var botBullet = new BotBullet(); botBullet.x = self.x; botBullet.y = self.y; game.addChild(botBullet); botBullets.push(botBullet); } }; }); // BotBullet class var BotBullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5 + level * 0.5; self.update = function () { self.y += self.speed; }; }); // Bullet class var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 10; self.update = function () { self.y -= self.speed; }; }); // 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 }); self.speed = 5; self.update = function () { // Player movement logic goes here }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ // Initialize player var player = game.addChild(new Player()); player.x = 2048 / 2; player.y = 2732 - 100; // Initialize player lives var playerLives = 3; // Initialize lives display var livesTxt = new Text2('Lives: ' + playerLives, { size: 100, fill: "#ffffff" }); livesTxt.anchor.set(1, 0); // Set anchor to the right edge LK.gui.topRight.addChild(livesTxt); // Position lives display at the top-right corner // Initialize level var level = 1; // Initialize score display var score = 0; var scoreTxt = new Text2('Score: 0', { size: 100, fill: "#ffffff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Initialize level display var levelTxt = new Text2('Level: 1', { size: 100, fill: "#ffffff" }); levelTxt.anchor.set(0, 0); // Set anchor to the left edge LK.gui.topLeft.addChild(levelTxt); // Position level display at the top-left corner // Initialize bots and bullets var bots = []; var bullets = []; var botBullets = []; // Game update function game.update = function () { // Update player player.update(); // Update all game objects and handle collisions for (var i = bots.length - 1; i >= 0; i--) { bots[i].update(); if (bots[i].intersects(player)) { playerLives--; if (playerLives <= 3) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } else {} } // Update bot bullets within the same loop for (var j = botBullets.length - 1; j >= 0; j--) { botBullets[j].update(); if (botBullets[j].intersects(player)) { botBullets[j].destroy(); botBullets.splice(j, 1); playerLives--; if (playerLives <= 0) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } else { livesTxt.setText('Lives: ' + playerLives); } for (var i = bullets.length - 1; i >= 0; i--) { bullets[i].update(); for (var j = bots.length - 1; j >= 0; j--) { if (bullets[i].intersects(bots[j])) { bullets[i].destroy(); bullets.splice(i, 1); bots[j].destroy(); bots.splice(j, 1); score += 10; scoreTxt.setText('Score: ' + score); // Increase level and difficulty if (score % 100 === 0) { level++; levelTxt.setText('Level: ' + level); // Increase bot speed for (var k = 0; k < bots.length; k++) { bots[k].speed += level * 0.5; } } break; } } } LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } } } // Autofire bullets if (LK.ticks % 90 == 0) { var bullet = new Bullet(); bullet.x = player.x; bullet.y = player.y - player.height / 2; bullets.push(bullet); game.addChild(bullet); // Set a timeout to destroy the bullet after 4 seconds LK.setTimeout(function () { if (bullets.includes(bullet)) { bullet.destroy(); bullets.splice(bullets.indexOf(bullet), 1); } }, 4000); } // Collision detection for (var i = bots.length - 1; i >= 0; i--) { for (var j = bullets.length - 1; j >= 0; j--) { if (bots[i].intersects(bullets[j])) { bullets[j].destroy(); bullets.splice(j, 1); bots[i].destroy(); bots.splice(i, 1); // Update score score += 10; scoreTxt.setText('Score: ' + score); // Increase level and difficulty if (score % 100 === 0) { level++; levelTxt.setText('Level: ' + level); // Increase bot speed for (var i = 0; i < bots.length; i++) { bots[i].speed += level * 0.5; } // Increase bot spawn rate if (LK.ticks % Math.max(60, 240 - level * 10) == 0) { var bot = new Bot(); bot.x = Math.random() * 2048; bot.y = 0; bots.push(bot); game.addChild(bot); } } break; } } } // Spawn bots if (LK.ticks % 240 == 0) { // Reduced spawning frequency var bot = new Bot(); bot.x = Math.random() * 2048; bot.y = 0; bots.push(bot); game.addChild(bot); } }; // Player control game.down = function (x, y, obj) { player.x = x; player.y = y; }; game.move = function (x, y, obj) { player.x = x; player.y = y; }; game.up = function (x, y, obj) { var bullet = new Bullet(); bullet.x = player.x; bullet.y = player.y; bullets.push(bullet); game.addChild(bullet); };
/****
* Classes
****/
// Bot class
var Bot = Container.expand(function () {
var self = Container.call(this);
var botGraphics = self.attachAsset('bot', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
// Check if the bot has crossed the line and remove it
if (self.y > 2732) {
self.destroy();
var index = bots.indexOf(self);
if (index > -1) {
bots.splice(index, 1);
}
}
// Bot firing logic
if (LK.ticks % Math.max(30, 120 - level * 5) == 0) {
// Adjust the firing rate by changing the modulus value
var botBullet = new BotBullet();
botBullet.x = self.x;
botBullet.y = self.y;
game.addChild(botBullet);
botBullets.push(botBullet);
}
};
});
// BotBullet class
var BotBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5 + level * 0.5;
self.update = function () {
self.y += self.speed;
};
});
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 10;
self.update = function () {
self.y -= self.speed;
};
});
// 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
});
self.speed = 5;
self.update = function () {
// Player movement logic goes here
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Initialize player
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 - 100;
// Initialize player lives
var playerLives = 3;
// Initialize lives display
var livesTxt = new Text2('Lives: ' + playerLives, {
size: 100,
fill: "#ffffff"
});
livesTxt.anchor.set(1, 0); // Set anchor to the right edge
LK.gui.topRight.addChild(livesTxt); // Position lives display at the top-right corner
// Initialize level
var level = 1;
// Initialize score display
var score = 0;
var scoreTxt = new Text2('Score: 0', {
size: 100,
fill: "#ffffff"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Initialize level display
var levelTxt = new Text2('Level: 1', {
size: 100,
fill: "#ffffff"
});
levelTxt.anchor.set(0, 0); // Set anchor to the left edge
LK.gui.topLeft.addChild(levelTxt); // Position level display at the top-left corner
// Initialize bots and bullets
var bots = [];
var bullets = [];
var botBullets = [];
// Game update function
game.update = function () {
// Update player
player.update();
// Update all game objects and handle collisions
for (var i = bots.length - 1; i >= 0; i--) {
bots[i].update();
if (bots[i].intersects(player)) {
playerLives--;
if (playerLives <= 3) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
} else {}
}
// Update bot bullets within the same loop
for (var j = botBullets.length - 1; j >= 0; j--) {
botBullets[j].update();
if (botBullets[j].intersects(player)) {
botBullets[j].destroy();
botBullets.splice(j, 1);
playerLives--;
if (playerLives <= 0) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
} else {
livesTxt.setText('Lives: ' + playerLives);
}
for (var i = bullets.length - 1; i >= 0; i--) {
bullets[i].update();
for (var j = bots.length - 1; j >= 0; j--) {
if (bullets[i].intersects(bots[j])) {
bullets[i].destroy();
bullets.splice(i, 1);
bots[j].destroy();
bots.splice(j, 1);
score += 10;
scoreTxt.setText('Score: ' + score);
// Increase level and difficulty
if (score % 100 === 0) {
level++;
levelTxt.setText('Level: ' + level);
// Increase bot speed
for (var k = 0; k < bots.length; k++) {
bots[k].speed += level * 0.5;
}
}
break;
}
}
}
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
}
}
// Autofire bullets
if (LK.ticks % 90 == 0) {
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y - player.height / 2;
bullets.push(bullet);
game.addChild(bullet);
// Set a timeout to destroy the bullet after 4 seconds
LK.setTimeout(function () {
if (bullets.includes(bullet)) {
bullet.destroy();
bullets.splice(bullets.indexOf(bullet), 1);
}
}, 4000);
}
// Collision detection
for (var i = bots.length - 1; i >= 0; i--) {
for (var j = bullets.length - 1; j >= 0; j--) {
if (bots[i].intersects(bullets[j])) {
bullets[j].destroy();
bullets.splice(j, 1);
bots[i].destroy();
bots.splice(i, 1);
// Update score
score += 10;
scoreTxt.setText('Score: ' + score);
// Increase level and difficulty
if (score % 100 === 0) {
level++;
levelTxt.setText('Level: ' + level);
// Increase bot speed
for (var i = 0; i < bots.length; i++) {
bots[i].speed += level * 0.5;
}
// Increase bot spawn rate
if (LK.ticks % Math.max(60, 240 - level * 10) == 0) {
var bot = new Bot();
bot.x = Math.random() * 2048;
bot.y = 0;
bots.push(bot);
game.addChild(bot);
}
}
break;
}
}
}
// Spawn bots
if (LK.ticks % 240 == 0) {
// Reduced spawning frequency
var bot = new Bot();
bot.x = Math.random() * 2048;
bot.y = 0;
bots.push(bot);
game.addChild(bot);
}
};
// Player control
game.down = function (x, y, obj) {
player.x = x;
player.y = y;
};
game.move = function (x, y, obj) {
player.x = x;
player.y = y;
};
game.up = function (x, y, obj) {
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y;
bullets.push(bullet);
game.addChild(bullet);
};