/**** * Classes ****/ // Define the BackgroundObject class var BackgroundObject = Container.expand(function () { var self = Container.call(this); var bgObjectGraphics = self.attachAsset('bgObject', { anchorX: 0.5, anchorY: 0.5, alpha: 0.5 // Reduce visibility to 50% }); self.speed = (Math.random() * 5 + 2) * 1.5; // Increase speed by 50% self.update = function () { self.y += self.speed; if (self.y > 2732) { self.y = -50; // Reset position to top once it goes off screen self.x = Math.random() * 2048; // Randomize x position } }; }); // Define the BackgroundObject2 class var BackgroundObject2 = Container.expand(function () { var self = Container.call(this); var bgObjectGraphics = self.attachAsset('bgObject2', { anchorX: 0.5, anchorY: 0.5, alpha: 0.5 // Reduce visibility to 50% }); self.speed = (Math.random() * 5 + 2) * 1.5; // Increase speed by 50% self.update = function () { self.y += self.speed; if (self.y > 2732) { self.y = -50; // Reset position to top once it goes off screen self.x = Math.random() * 2048; // Randomize x position } }; }); // Define the 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 = -15; self.update = function () { self.y += self.speed; }; }); // Define the Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var size = Math.random() * 100 + 100; var enemyGraphics = self.attachAsset('enemy', { width: size, height: size, anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.rotationSpeed = Math.random() * 0.1 - 0.05; self.update = function () { self.y += self.speed; self.rotation += self.rotationSpeed; }; }); var Enemy2 = Container.expand(function () { var self = Container.call(this); var size = Math.random() * 100 + 100; var enemyGraphics = self.attachAsset('enemy2', { width: size, height: size, anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.rotationSpeed = Math.random() * 0.1 - 0.05; self.hits = 0; // Track the number of hits self.update = function () { self.y += self.speed; self.rotation += self.rotationSpeed; }; }); // Define the FastEnemy class var FastEnemy = Container.expand(function () { var self = Container.call(this); var size = Math.random() * 100 + 100; var enemyGraphics = self.attachAsset('enemy3', { width: size, height: size, anchorX: 0.5, anchorY: 0.5 }); self.speed = 6.5; // 30% faster than regular enemies self.rotationSpeed = Math.random() * 0.1 - 0.05; self.update = function () { self.y += self.speed; self.rotation += self.rotationSpeed; }; }); var FireRateEnemy = Container.expand(function () { var self = Container.call(this); var size = Math.random() * 100 + 100; var enemyGraphics = self.attachAsset('enemy4', { width: size, height: size, anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.rotationSpeed = Math.random() * 0.1 - 0.05; self.update = function () { self.y += self.speed; self.rotation += self.rotationSpeed; }; }); var NewEnemy = Container.expand(function () { var self = Container.call(this); var size = Math.random() * 100 + 100; var enemyGraphics = self.attachAsset('enemy5', { width: size, height: size, anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.rotationSpeed = Math.random() * 0.1 - 0.05; self.hits = 0; // Track the number of hits self.update = function () { self.y += self.speed; self.rotation += self.rotationSpeed; }; }); var NewEnemy6 = Container.expand(function () { var self = Container.call(this); var size = Math.random() * 100 + 100; var enemyGraphics = self.attachAsset('enemy6', { width: size, height: size, anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.rotationSpeed = Math.random() * 0.1 - 0.05; self.update = function () { self.y += self.speed; self.rotation += self.rotationSpeed; }; }); var NewEnemy7 = Container.expand(function () { var self = Container.call(this); var size = Math.random() * 100 + 100; var enemyGraphics = self.attachAsset('enemy7', { width: size, height: size, anchorX: 0.5, anchorY: 0.5 }); self.speed = 4; // Slightly slower than other enemies self.rotationSpeed = Math.random() * 0.1 - 0.05; self.hits = 0; // Track the number of hits self.update = function () { self.y += self.speed; self.rotation += self.rotationSpeed; }; }); //<Assets used in the game will automatically appear here> //<Write imports for supported plugins here> // Define the 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 = 10; self.update = function () { // Player movement logic will be handled in game.down and game.move // Shooting logic if (LK.ticks - lastShot >= fireRate * 60) { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; bullets.push(bullet); game.addChild(bullet); lastShot = LK.ticks; } }; }); // Define the Wall class var Wall = Container.expand(function () { var self = Container.call(this); var wallGraphics = self.attachAsset('levelBar', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // Walls are static, no update logic needed }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ var canSpawnNewEnemy6 = true; if (typeof document !== 'undefined' && document.body) { document.body.style.cursor = 'none'; // Hide the mouse cursor } // Play background music and ensure it restarts when it finishes LK.playMusic('backmusic', { loop: true }); // New enemy asset // Initialize variables var player; var enemies = []; var bullets = []; var score = 0; var lives = 8; var level = 1; var levelText; var scoreText; var livesText; var enemySpeedMultiplier = 1; var enemySpawnRate = 1000; var enemySpawnTimer; // Function to start a new level function startLevel() { var gainedFeaturesText = 'LEVEL ' + level; // Initialize the text with the level number levelText.setText(gainedFeaturesText); // Set the level text levelText.setStyle({ fontSize: 50 }); // Reduce font size for gained features text levelText.anchor.set(0.5, 0.5); // Center the text on the screen levelText.visible = true; fireRate *= 0.997; // Reduce fire rate by 0.3% when transitioning to a new level // Declare heartAsset in the correct scope var heartAsset; // Display a heart asset at the top center and add 2 lives if (level > 1) { heartAsset = LK.getAsset('powerUpRed', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1100 }); game.addChild(heartAsset); } // Add 2 lives lives += 2; livesText.setText('Lives: ' + lives); // Remove the heart asset after a short duration LK.setTimeout(function () { if (heartAsset) { heartAsset.destroy(); } }, 2000); // Increase enemy speed and spawn rate by 5% each level enemySpeedMultiplier = 1.04 * Math.pow(1.04, level - 1); enemySpawnRate *= 0.95; // Increase background object speed by 10% each level backgroundObjects.forEach(function (bgObject) { bgObject.speed *= 1.10; }); LK.setTimeout(function () { levelText.visible = false; spawnEnemies(); }, 4000); } // Function to spawn enemies function spawnEnemies() { enemySpawnTimer = LK.setInterval(function () { var enemy; if (Math.random() < 0.1) { enemy = new FastEnemy(); enemy.speed *= 1.5; // Increase speed by 50% } else if (Math.random() < 0.05) { // 5% chance to spawn the new FireRateEnemy enemy = new FireRateEnemy(); } else if (canSpawnNewEnemy6 && Math.random() < 0.05) { // 5% chance to spawn NewEnemy6 enemy = new NewEnemy6(); canSpawnNewEnemy6 = false; LK.setTimeout(function () { canSpawnNewEnemy6 = true; }, 5000); } else if (level > 1 && Math.random() < 0.2) { // 20% chance to spawn the new enemy type after level 1 enemy = new Enemy2(); } else if (Math.random() < 0.05) { // 5% chance to spawn the new enemy type enemy = new NewEnemy7(); } else if (Math.random() < 0.15) { // 15% chance to spawn the new enemy type in all levels enemy = new NewEnemy(); } else { enemy = new Enemy(); } enemy.x = Math.random() * 2048; enemy.y = -50; enemy.speed *= enemySpeedMultiplier; enemies.push(enemy); game.addChild(enemy); }, enemySpawnRate); } // Function to update score and level function updateScore(points) { score += points; scoreText.setText('Score: ' + score); if (score >= 2500 * Math.pow(2.5, level - 1)) { level++; // Increase enemy speed and spawn rate by 10% each level enemySpeedMultiplier *= 1.1; enemySpawnRate *= 0.9; clearEnemies(); startLevel(); } } // Function to clear enemies function clearEnemies() { for (var i = 0; i < enemies.length; i++) { enemies[i].destroy(); } enemies = []; LK.clearInterval(enemySpawnTimer); } // Initialize background objects var backgroundObjects = []; for (var i = 0; i < 40; i++) { // Create 40 background objects var bgObject = new BackgroundObject(); bgObject.x = Math.random() * 2048; bgObject.y = Math.random() * 2732; backgroundObjects.push(bgObject); game.addChild(bgObject); } // Initialize new interactive background objects var backgroundObjects2 = []; for (var i = 0; i < 20; i++) { // Create 20 new background objects var bgObject2 = new BackgroundObject2(); bgObject2.x = Math.random() * 2048; bgObject2.y = Math.random() * 2732; backgroundObjects2.push(bgObject2); game.addChild(bgObject2); } // Initialize player player = new Player(); player.x = 1024; player.y = 2500; game.addChild(player); // Initialize texts levelText = new Text2('LEVEL 1', { size: 150, fill: 0xFFFFFF }); levelText.anchor.set(0.5, 0.5); LK.gui.center.addChild(levelText); scoreText = new Text2('Score: 0', { size: 50, fill: 0xFFFFFF }); scoreText.anchor.set(0, 0); LK.gui.topLeft.addChild(scoreText); // Display current fire rate below the score var fireRateText = new Text2('Fire Rate: ' + (1 / fireRate).toFixed(2), { size: 40, fill: 0xFFFFFF }); fireRateText.anchor.set(0, 0); fireRateText.y = scoreText.height + 10; // Position below the score LK.gui.topLeft.addChild(fireRateText); livesText = new Text2('Lives: 10', { size: 50, fill: 0xFFFFFF }); livesText.anchor.set(1, 0); LK.gui.topRight.addChild(livesText); // Start the first level startLevel(); // Handle player movement game.down = function (x, y, obj) { player.x = x; }; game.move = function (x, y, obj) { var deltaX = x - player.x; // Prevent player from moving through walls if (x > 100 && x < 1948) { player.x = x; } backgroundObjects.forEach(function (bgObject) { bgObject.x -= deltaX * 0.1; // Move background objects in the opposite direction }); backgroundObjects2.forEach(function (bgObject2) { bgObject2.x -= deltaX * 0.1; // Move new background objects in the opposite direction of player }); }; // Handle shooting var lastShot = 0; var fireRate = 0.5; game.up = function (x, y, obj) { if (LK.ticks - lastShot >= fireRate * 60) { var bullet = new Bullet(); bullet.x = player.x; bullet.y = player.y; bullets.push(bullet); game.addChild(bullet); lastShot = LK.ticks; } }; // Game update loop game.update = function () { // Update background objects for (var i = 0; i < backgroundObjects.length; i++) { backgroundObjects[i].update(); } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { bullets[i].update(); if (bullets[i].y < -50) { bullets[i].destroy(); bullets.splice(i, 1); } } // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { enemies[i].update(); // Prevent enemies from moving through walls if (enemies[i].x < 100) { enemies[i].x = 100; } else if (enemies[i].x > 1948) { enemies[i].x = 1948; } if (enemies[i].y > 2732) { if (!(enemies[i] instanceof FastEnemy) && !(enemies[i] instanceof FireRateEnemy)) { lives--; livesText.setText('Lives: ' + lives); if (lives <= 0) { LK.showGameOver(); } } enemies[i].destroy(); enemies.splice(i, 1); } } // Check for collisions 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); // Add explosion effect var explosion = function explosion(x, y, scale, speed, rotationSpeed) { var explosionAsset = LK.getAsset('explosion', { anchorX: 0.5, anchorY: 0.5, x: x, y: y, scaleX: scale, scaleY: scale }); explosionAsset.speed = speed; explosionAsset.rotationSpeed = rotationSpeed; explosionAsset.update = function () { this.y += this.speed; this.rotation += this.rotationSpeed; // Gradually shrink the explosion effect this.scaleX *= 0.95; this.scaleY *= 0.95; // If the explosion effect has shrunk to less than 5% of its original size, destroy it if (this.scaleX < 0.05 || this.scaleY < 0.05) { this.destroy(); } }; game.addChild(explosionAsset); }; if (enemies[j] instanceof Enemy2) { enemies[j].hits++; LK.getSound('patlama2').play(); if (enemies[j].hits >= 2) { explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed); enemies[j].destroy(); LK.getSound('patlama2').play(); enemies.splice(j, 1); updateScore(100); // Higher score for the tougher enemy } } else if (enemies[j] instanceof NewEnemy) { enemies[j].hits++; LK.getSound('patlama2').play(); if (enemies[j].hits >= 2) { explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed); enemies[j].destroy(); LK.getSound('patlama2').play(); enemies.splice(j, 1); updateScore(200); // Score for NewEnemy } } else if (enemies[j] instanceof FastEnemy) { explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed); enemies[j].destroy(); LK.getSound('patlama2').play(); enemies.splice(j, 1); updateScore(150); // Higher score for the faster enemy // Slow down other enemies by 30% enemies.forEach(function (enemy) { enemy.speed *= 0.7; }); } else if (enemies[j] instanceof FireRateEnemy) { explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed); enemies[j].destroy(); LK.getSound('patlama2').play(); enemies.splice(j, 1); updateScore(75); // Score for the FireRateEnemy fireRate *= 0.98; // Increase fire rate by 2% } else if (enemies[j] instanceof NewEnemy6) { explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed); enemies[j].destroy(); LK.getSound('patlama2').play(); enemies.splice(j, 1); updateScore(100); // Score for NewEnemy6 var originalFireRate = fireRate; fireRate /= 2; // Double the fire rate LK.setTimeout(function () { fireRate = originalFireRate; // Revert to original fire rate after 3 seconds }, 3000); } else if (enemies[j] instanceof NewEnemy7) { enemies[j].hits++; LK.getSound('patlama2').play(); if (enemies[j].hits >= 3) { // Requires 3 hits to destroy explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed); enemies[j].destroy(); LK.getSound('patlama2').play(); enemies.splice(j, 1); updateScore(250); // Score for NewEnemy7 } } else { explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed); enemies[j].destroy(); LK.getSound('patlama2').play(); enemies.splice(j, 1); updateScore(50); } break; } } } // Update fire rate text fireRateText.setText('Fire Rate: ' + (1 / fireRate).toFixed(2)); };
/****
* Classes
****/
// Define the BackgroundObject class
var BackgroundObject = Container.expand(function () {
var self = Container.call(this);
var bgObjectGraphics = self.attachAsset('bgObject', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.5 // Reduce visibility to 50%
});
self.speed = (Math.random() * 5 + 2) * 1.5; // Increase speed by 50%
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -50; // Reset position to top once it goes off screen
self.x = Math.random() * 2048; // Randomize x position
}
};
});
// Define the BackgroundObject2 class
var BackgroundObject2 = Container.expand(function () {
var self = Container.call(this);
var bgObjectGraphics = self.attachAsset('bgObject2', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.5 // Reduce visibility to 50%
});
self.speed = (Math.random() * 5 + 2) * 1.5; // Increase speed by 50%
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -50; // Reset position to top once it goes off screen
self.x = Math.random() * 2048; // Randomize x position
}
};
});
// Define the 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 = -15;
self.update = function () {
self.y += self.speed;
};
});
// Define the Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var size = Math.random() * 100 + 100;
var enemyGraphics = self.attachAsset('enemy', {
width: size,
height: size,
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.rotationSpeed = Math.random() * 0.1 - 0.05;
self.update = function () {
self.y += self.speed;
self.rotation += self.rotationSpeed;
};
});
var Enemy2 = Container.expand(function () {
var self = Container.call(this);
var size = Math.random() * 100 + 100;
var enemyGraphics = self.attachAsset('enemy2', {
width: size,
height: size,
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.rotationSpeed = Math.random() * 0.1 - 0.05;
self.hits = 0; // Track the number of hits
self.update = function () {
self.y += self.speed;
self.rotation += self.rotationSpeed;
};
});
// Define the FastEnemy class
var FastEnemy = Container.expand(function () {
var self = Container.call(this);
var size = Math.random() * 100 + 100;
var enemyGraphics = self.attachAsset('enemy3', {
width: size,
height: size,
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6.5; // 30% faster than regular enemies
self.rotationSpeed = Math.random() * 0.1 - 0.05;
self.update = function () {
self.y += self.speed;
self.rotation += self.rotationSpeed;
};
});
var FireRateEnemy = Container.expand(function () {
var self = Container.call(this);
var size = Math.random() * 100 + 100;
var enemyGraphics = self.attachAsset('enemy4', {
width: size,
height: size,
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.rotationSpeed = Math.random() * 0.1 - 0.05;
self.update = function () {
self.y += self.speed;
self.rotation += self.rotationSpeed;
};
});
var NewEnemy = Container.expand(function () {
var self = Container.call(this);
var size = Math.random() * 100 + 100;
var enemyGraphics = self.attachAsset('enemy5', {
width: size,
height: size,
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.rotationSpeed = Math.random() * 0.1 - 0.05;
self.hits = 0; // Track the number of hits
self.update = function () {
self.y += self.speed;
self.rotation += self.rotationSpeed;
};
});
var NewEnemy6 = Container.expand(function () {
var self = Container.call(this);
var size = Math.random() * 100 + 100;
var enemyGraphics = self.attachAsset('enemy6', {
width: size,
height: size,
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.rotationSpeed = Math.random() * 0.1 - 0.05;
self.update = function () {
self.y += self.speed;
self.rotation += self.rotationSpeed;
};
});
var NewEnemy7 = Container.expand(function () {
var self = Container.call(this);
var size = Math.random() * 100 + 100;
var enemyGraphics = self.attachAsset('enemy7', {
width: size,
height: size,
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4; // Slightly slower than other enemies
self.rotationSpeed = Math.random() * 0.1 - 0.05;
self.hits = 0; // Track the number of hits
self.update = function () {
self.y += self.speed;
self.rotation += self.rotationSpeed;
};
});
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
// Define the 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 = 10;
self.update = function () {
// Player movement logic will be handled in game.down and game.move
// Shooting logic
if (LK.ticks - lastShot >= fireRate * 60) {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
bullets.push(bullet);
game.addChild(bullet);
lastShot = LK.ticks;
}
};
});
// Define the Wall class
var Wall = Container.expand(function () {
var self = Container.call(this);
var wallGraphics = self.attachAsset('levelBar', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Walls are static, no update logic needed
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
var canSpawnNewEnemy6 = true;
if (typeof document !== 'undefined' && document.body) {
document.body.style.cursor = 'none'; // Hide the mouse cursor
}
// Play background music and ensure it restarts when it finishes
LK.playMusic('backmusic', {
loop: true
});
// New enemy asset
// Initialize variables
var player;
var enemies = [];
var bullets = [];
var score = 0;
var lives = 8;
var level = 1;
var levelText;
var scoreText;
var livesText;
var enemySpeedMultiplier = 1;
var enemySpawnRate = 1000;
var enemySpawnTimer;
// Function to start a new level
function startLevel() {
var gainedFeaturesText = 'LEVEL ' + level; // Initialize the text with the level number
levelText.setText(gainedFeaturesText); // Set the level text
levelText.setStyle({
fontSize: 50
}); // Reduce font size for gained features text
levelText.anchor.set(0.5, 0.5); // Center the text on the screen
levelText.visible = true;
fireRate *= 0.997; // Reduce fire rate by 0.3% when transitioning to a new level
// Declare heartAsset in the correct scope
var heartAsset;
// Display a heart asset at the top center and add 2 lives
if (level > 1) {
heartAsset = LK.getAsset('powerUpRed', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1100
});
game.addChild(heartAsset);
}
// Add 2 lives
lives += 2;
livesText.setText('Lives: ' + lives);
// Remove the heart asset after a short duration
LK.setTimeout(function () {
if (heartAsset) {
heartAsset.destroy();
}
}, 2000);
// Increase enemy speed and spawn rate by 5% each level
enemySpeedMultiplier = 1.04 * Math.pow(1.04, level - 1);
enemySpawnRate *= 0.95;
// Increase background object speed by 10% each level
backgroundObjects.forEach(function (bgObject) {
bgObject.speed *= 1.10;
});
LK.setTimeout(function () {
levelText.visible = false;
spawnEnemies();
}, 4000);
}
// Function to spawn enemies
function spawnEnemies() {
enemySpawnTimer = LK.setInterval(function () {
var enemy;
if (Math.random() < 0.1) {
enemy = new FastEnemy();
enemy.speed *= 1.5; // Increase speed by 50%
} else if (Math.random() < 0.05) {
// 5% chance to spawn the new FireRateEnemy
enemy = new FireRateEnemy();
} else if (canSpawnNewEnemy6 && Math.random() < 0.05) {
// 5% chance to spawn NewEnemy6
enemy = new NewEnemy6();
canSpawnNewEnemy6 = false;
LK.setTimeout(function () {
canSpawnNewEnemy6 = true;
}, 5000);
} else if (level > 1 && Math.random() < 0.2) {
// 20% chance to spawn the new enemy type after level 1
enemy = new Enemy2();
} else if (Math.random() < 0.05) {
// 5% chance to spawn the new enemy type
enemy = new NewEnemy7();
} else if (Math.random() < 0.15) {
// 15% chance to spawn the new enemy type in all levels
enemy = new NewEnemy();
} else {
enemy = new Enemy();
}
enemy.x = Math.random() * 2048;
enemy.y = -50;
enemy.speed *= enemySpeedMultiplier;
enemies.push(enemy);
game.addChild(enemy);
}, enemySpawnRate);
}
// Function to update score and level
function updateScore(points) {
score += points;
scoreText.setText('Score: ' + score);
if (score >= 2500 * Math.pow(2.5, level - 1)) {
level++;
// Increase enemy speed and spawn rate by 10% each level
enemySpeedMultiplier *= 1.1;
enemySpawnRate *= 0.9;
clearEnemies();
startLevel();
}
}
// Function to clear enemies
function clearEnemies() {
for (var i = 0; i < enemies.length; i++) {
enemies[i].destroy();
}
enemies = [];
LK.clearInterval(enemySpawnTimer);
}
// Initialize background objects
var backgroundObjects = [];
for (var i = 0; i < 40; i++) {
// Create 40 background objects
var bgObject = new BackgroundObject();
bgObject.x = Math.random() * 2048;
bgObject.y = Math.random() * 2732;
backgroundObjects.push(bgObject);
game.addChild(bgObject);
}
// Initialize new interactive background objects
var backgroundObjects2 = [];
for (var i = 0; i < 20; i++) {
// Create 20 new background objects
var bgObject2 = new BackgroundObject2();
bgObject2.x = Math.random() * 2048;
bgObject2.y = Math.random() * 2732;
backgroundObjects2.push(bgObject2);
game.addChild(bgObject2);
}
// Initialize player
player = new Player();
player.x = 1024;
player.y = 2500;
game.addChild(player);
// Initialize texts
levelText = new Text2('LEVEL 1', {
size: 150,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(levelText);
scoreText = new Text2('Score: 0', {
size: 50,
fill: 0xFFFFFF
});
scoreText.anchor.set(0, 0);
LK.gui.topLeft.addChild(scoreText);
// Display current fire rate below the score
var fireRateText = new Text2('Fire Rate: ' + (1 / fireRate).toFixed(2), {
size: 40,
fill: 0xFFFFFF
});
fireRateText.anchor.set(0, 0);
fireRateText.y = scoreText.height + 10; // Position below the score
LK.gui.topLeft.addChild(fireRateText);
livesText = new Text2('Lives: 10', {
size: 50,
fill: 0xFFFFFF
});
livesText.anchor.set(1, 0);
LK.gui.topRight.addChild(livesText);
// Start the first level
startLevel();
// Handle player movement
game.down = function (x, y, obj) {
player.x = x;
};
game.move = function (x, y, obj) {
var deltaX = x - player.x;
// Prevent player from moving through walls
if (x > 100 && x < 1948) {
player.x = x;
}
backgroundObjects.forEach(function (bgObject) {
bgObject.x -= deltaX * 0.1; // Move background objects in the opposite direction
});
backgroundObjects2.forEach(function (bgObject2) {
bgObject2.x -= deltaX * 0.1; // Move new background objects in the opposite direction of player
});
};
// Handle shooting
var lastShot = 0;
var fireRate = 0.5;
game.up = function (x, y, obj) {
if (LK.ticks - lastShot >= fireRate * 60) {
var bullet = new Bullet();
bullet.x = player.x;
bullet.y = player.y;
bullets.push(bullet);
game.addChild(bullet);
lastShot = LK.ticks;
}
};
// Game update loop
game.update = function () {
// Update background objects
for (var i = 0; i < backgroundObjects.length; i++) {
backgroundObjects[i].update();
}
// Update bullets
for (var i = bullets.length - 1; i >= 0; i--) {
bullets[i].update();
if (bullets[i].y < -50) {
bullets[i].destroy();
bullets.splice(i, 1);
}
}
// Update enemies
for (var i = enemies.length - 1; i >= 0; i--) {
enemies[i].update();
// Prevent enemies from moving through walls
if (enemies[i].x < 100) {
enemies[i].x = 100;
} else if (enemies[i].x > 1948) {
enemies[i].x = 1948;
}
if (enemies[i].y > 2732) {
if (!(enemies[i] instanceof FastEnemy) && !(enemies[i] instanceof FireRateEnemy)) {
lives--;
livesText.setText('Lives: ' + lives);
if (lives <= 0) {
LK.showGameOver();
}
}
enemies[i].destroy();
enemies.splice(i, 1);
}
}
// Check for collisions
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);
// Add explosion effect
var explosion = function explosion(x, y, scale, speed, rotationSpeed) {
var explosionAsset = LK.getAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5,
x: x,
y: y,
scaleX: scale,
scaleY: scale
});
explosionAsset.speed = speed;
explosionAsset.rotationSpeed = rotationSpeed;
explosionAsset.update = function () {
this.y += this.speed;
this.rotation += this.rotationSpeed;
// Gradually shrink the explosion effect
this.scaleX *= 0.95;
this.scaleY *= 0.95;
// If the explosion effect has shrunk to less than 5% of its original size, destroy it
if (this.scaleX < 0.05 || this.scaleY < 0.05) {
this.destroy();
}
};
game.addChild(explosionAsset);
};
if (enemies[j] instanceof Enemy2) {
enemies[j].hits++;
LK.getSound('patlama2').play();
if (enemies[j].hits >= 2) {
explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed);
enemies[j].destroy();
LK.getSound('patlama2').play();
enemies.splice(j, 1);
updateScore(100); // Higher score for the tougher enemy
}
} else if (enemies[j] instanceof NewEnemy) {
enemies[j].hits++;
LK.getSound('patlama2').play();
if (enemies[j].hits >= 2) {
explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed);
enemies[j].destroy();
LK.getSound('patlama2').play();
enemies.splice(j, 1);
updateScore(200); // Score for NewEnemy
}
} else if (enemies[j] instanceof FastEnemy) {
explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed);
enemies[j].destroy();
LK.getSound('patlama2').play();
enemies.splice(j, 1);
updateScore(150); // Higher score for the faster enemy
// Slow down other enemies by 30%
enemies.forEach(function (enemy) {
enemy.speed *= 0.7;
});
} else if (enemies[j] instanceof FireRateEnemy) {
explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed);
enemies[j].destroy();
LK.getSound('patlama2').play();
enemies.splice(j, 1);
updateScore(75); // Score for the FireRateEnemy
fireRate *= 0.98; // Increase fire rate by 2%
} else if (enemies[j] instanceof NewEnemy6) {
explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed);
enemies[j].destroy();
LK.getSound('patlama2').play();
enemies.splice(j, 1);
updateScore(100); // Score for NewEnemy6
var originalFireRate = fireRate;
fireRate /= 2; // Double the fire rate
LK.setTimeout(function () {
fireRate = originalFireRate; // Revert to original fire rate after 3 seconds
}, 3000);
} else if (enemies[j] instanceof NewEnemy7) {
enemies[j].hits++;
LK.getSound('patlama2').play();
if (enemies[j].hits >= 3) {
// Requires 3 hits to destroy
explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed);
enemies[j].destroy();
LK.getSound('patlama2').play();
enemies.splice(j, 1);
updateScore(250); // Score for NewEnemy7
}
} else {
explosion(enemies[j].x, enemies[j].y, 1, enemies[j].speed, enemies[j].rotationSpeed);
enemies[j].destroy();
LK.getSound('patlama2').play();
enemies.splice(j, 1);
updateScore(50);
}
break;
}
}
}
// Update fire rate text
fireRateText.setText('Fire Rate: ' + (1 / fireRate).toFixed(2));
};
daire şeklinde kraterler bulunan gir gezegen. Single Game Texture. In-Game asset. 2d. no background. High contrast. No shadows.
kırmızı gezegen. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
yuvarlak bir fire yazısı yeşil. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
uzay uydusu. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
elevler içinde 2X yazısı. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
+2 yazan bir kalp. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
fireball. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
iceball. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.