Code edit (5 edits merged)
Please save this source code
User prompt
add an object to the player object, use that object for player colision detection instead of the main player sprite
Code edit (3 edits merged)
Please save this source code
User prompt
with the star field effect, randomise between two images (depth_1,depth_2)
Code edit (8 edits merged)
Please save this source code
User prompt
enemy_4 seems to be creating lag
Code edit (1 edits merged)
Please save this source code
User prompt
change the opacity of the stars
User prompt
the stars are not rendered above the background
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
create a star field effect as the stars are comming from the top center
User prompt
the player is being killed by one hit of enemy_1 when the player should just loose energy
Code edit (5 edits merged)
Please save this source code
User prompt
when a player is hit by an enemy , the player energy is reduced and that enemy is destroied
User prompt
when the player gets hit by an enemy or enemy bullet, reduce there energy, they die when all energy has gone
User prompt
give the player an energy bar
User prompt
Please fix the bug: 'self is undefined' in or related to this line: 'self.energy = 100; // Initialize player energy' Line Number: 909
User prompt
now gove the player an energy bar
Code edit (1 edits merged)
Please save this source code
User prompt
now change the text of the enemy health bars to an actual bar
User prompt
Please fix the bug: 'TypeError: enemy_3.healthBar.setText is not a function' in or related to this line: 'enemy_3.healthBar.setText(Math.max(0, Math.floor(enemy_3.lives / enemy_3.maxLives * 100)) + '%');' Line Number: 750
User prompt
Please fix the bug: 'TypeError: enemy_2.healthBar.setText is not a function' in or related to this line: 'enemy_2.healthBar.setText(Math.max(0, Math.floor(enemy_2.lives / enemy_2.maxLives * 100)) + '%');' Line Number: 707
User prompt
Please fix the bug: 'Timeout.tick error: LK.utils is undefined' in or related to this line: 'self.healthBarForeground.tint = LK.utils.interpolateColor(0xFF0000, 0x00FF00, self.lives / self.maxLives);' Line Number: 178
User prompt
Please fix the bug: 'Timeout.tick error: LK.utils is undefined' in or related to this line: 'self.healthBarForeground.tint = LK.utils.interpolateColor(0xFF0000, 0x00FF00, self.lives / self.maxLives);' Line Number: 178
/**** * Classes ****/ // Bullet class var Bullet = Container.expand(function () { var self = Container.call(this); //var bulletGraphics = self.attachAsset('bullet', { // anchorX: 0.5, // anchorY: 0.5 //}); self.direction = 0; self.speed_y = -10; self.speed_x = 0; self.power = 2; self.update = function () { self.x += self.speed_x; self.y += self.speed_y; }; }); // EnemyBullet class var EnemyBullet = Container.expand(function () { var self = Container.call(this); self.speed_y = 5; // Default speed for enemy bullets going down self.update = function () { self.y += self.speed_y; if (self.y < 0 || self.y > 2732) { self.destroy(); } }; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.shoot = function () { LK.getSound('Player_shoot').play(); if (powerup_between(0, 5)) { split_shot(); shotside *= -1; } else if (powerup_between(5, 15)) { split_shot(); shotside *= -1; split_shot(); shotside *= -1; } else if (powerup_between(15, 20)) { split_shot(); shotside *= -1; forward_lazer(); } else if (powerup_between(20, 30)) { split_shot(); shotside *= -1; split_shot(); shotside *= -1; forward_lazer(); } else if (powerup_between(30, 40)) { split_shot(); shotside *= -1; split_shot(); shotside *= -1; forward_plazma(); } }; }); // PowerUp class var PowerUp = Container.expand(function () { var self = Container.call(this); var powerUpGraphics = self.attachAsset('powerUp', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { self.y += 1; self.rotation += Math.PI / 40; }; }); var Star = Container.expand(function () { var self = Container.call(this); var starGraphics = self.attachAsset('depth_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = Math.random() * 2 + 1; // Random speed for each star self.update = function () { self.y += self.speed; if (self.y > 2732) { self.y = -50; // Reset star to top self.x = Math.random() * 2048; // Randomize x position } }; }); // Function to spawn power-ups //<Assets used in the game will automatically appear here> //<Write imports for supported plugins here> // enemy_1 class var enemy_1 = Container.expand(function () { var self = Container.call(this); self.n = 0; self.xpos = 0.0; self.lives = 1; self.maxLives = self.lives; // Store the maximum lives for percentage calculation self.healthBarForeground = LK.getAsset('healthBarForeground', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 10, y: -60 }); self.addChild(self.healthBarForeground); var enemy_1Graphics = self.attachAsset('enemy_1', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3 + LK.getScore() / 5000; self.update = function () { self.y += self.speed; movement = Math.sin(self.y / 100); self.rotation = -movement / 2; self.x = self.xpos + movement * enemy_1_movemwnt_amplitude; // Make enemy_1 move in a sine wave self.r; //self.x = self.xpos + Math.floor(self.y); }; }); // enemy_2 class var enemy_2 = Container.expand(function () { var self = Container.call(this); self.n = 0; self.xpos = 0.0; self.lives = 5; self.maxLives = self.lives; // Store the maximum lives for percentage calculation self.healthBarForeground = LK.getAsset('healthBarForeground', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 10, y: -60 }); self.addChild(self.healthBarForeground); var enemy_2Graphics = self.attachAsset('enemy_2', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3 + LK.getScore() / 5000; ; self.update = function () { self.y += self.speed; self.x = self.xpos + Math.sin(self.y / 100) * enemy_2_movemwnt_amplitude; // Make enemy_2 move in a sine wave }; }); // enemy_3 class var enemy_3 = Container.expand(function () { var self = Container.call(this); self.n = 0; self.xpos = 0.0; self.lives = 10; self.maxLives = self.lives; // Store the maximum lives for percentage calculation self.healthBarForeground = LK.getAsset('healthBarForeground', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 10, y: -60 }); self.addChild(self.healthBarForeground); self.odd = 0; var enemy_3Graphics = self.attachAsset('enemy_3', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 4 + LK.getScore() / 5000; ; self.update = function () { self.y += self.speed; self.x = self.xpos + self.odd * Math.sin(self.y / 200) * enemy_1_movemwnt_amplitude; // Make enemy_3 move in a sine wave }; }); // enemy_4 class var enemy_4 = Container.expand(function () { var self = Container.call(this); var enemy_4Graphics = self.attachAsset('enemy_4', { anchorX: 0.5, anchorY: 0.5 }); self.lives = 8; self.maxLives = self.lives; // Store the maximum lives for percentage calculation self.healthBarForeground = LK.getAsset('healthBarForeground', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 10, y: -60 }); self.addChild(self.healthBarForeground); self.speed = Math.random() > 0.5 ? 5 : -5; // Randomize direction self.update = function () { self.x += self.speed; // Randomly shoot bullets up or down if (Math.random() < 0.01) { // 1% chance to shoot each frame var bullet = new EnemyBullet(); bullet.x = self.x; bullet.y = self.y; bullet.speed_y = Math.random() > 0.5 ? 5 : -5; // Randomize bullet direction bullet.attachAsset('bullet_2', { anchorX: 0.5, anchorY: 0.5 }); game.addChild(bullet); // Ensure bullets are deleted when they come off the screen bullet.update = function () { bullet.y += bullet.speed_y; if (bullet.y < 0 || bullet.y > 2732) { bullet.destroy(); } }; } // Check if enemy_4 has moved off the screen if (self.speed > 0 && self.x > 2048 || self.speed < 0 && self.x < 0) { self.destroy(); } }; }); // enemy_5 class var enemy_5 = Container.expand(function () { var self = Container.call(this); var enemy_5Graphics = self.attachAsset('enemy_5', { anchorX: 0.5, anchorY: 0.5 }); self.speedX = (Math.random() - 0.5) * 10; // Random horizontal speed self.speedY = (Math.random() - 0.5) * 10; // Random vertical speed // Random initial position if (Math.random() > 0.5) { self.x = Math.random() * 2048; self.y = Math.random() > 0.5 ? -50 : 2732 + 50; } else { self.x = Math.random() > 0.5 ? -50 : 2048 + 50; self.y = Math.random() * 2732; } self.lives = 50; // Initialize lives for enemy_5 self.maxLives = self.lives; // Store the maximum lives for percentage calculation self.healthBarForeground = LK.getAsset('healthBarForeground', { anchorX: 0.5, anchorY: 0.5, width: 100, height: 10, y: -60 }); self.addChild(self.healthBarForeground); self.update = function () { self.x += self.speedX; self.y += self.speedY; // Check if enemy_5 has moved off the screen if (self.x < -50 || self.x > 2048 + 50 || self.y < -50 || self.y > 2732 + 50) { self.destroy(); } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ var stars = []; for (var i = 0; i < 100; i++) { // Create 100 stars var star = new Star(); star.x = Math.random() * 2048; // Random x position star.y = Math.random() * 2732; // Random y position stars.push(star); game.addChild(star); } function powerup_between(a, b) { return poweruplevel >= a && poweruplevel < b; } function createExplosion(x, y) { var explosion = LK.getAsset('explosion', { anchorX: 0.5, anchorY: 0.5, x: x, y: y }); game.addChild(explosion); LK.effects.flashObject(explosion, 0xFFFFFF, 100); LK.setTimeout(function () { explosion.destroy(); }, 100); } function forward_lazer() { var bullet = new Bullet(); bullet.x = player.x; bullet.y = player.y - 50; bullet.power = 2; bullet.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); bullets.push(bullet); game.addChild(bullet); } function forward_plazma() { var bullet = new Bullet(); bullet.x = player.x; bullet.y = player.y - 50; bullet.speedY = -18; bullet.power = 4; bullet.attachAsset('plazma', { anchorX: 0.5, anchorY: 0.5 }); bullets.push(bullet); game.addChild(bullet); } function split_shot() { var bullet1 = new Bullet(); bullet1.x = player.x + 80 * shotside; bullet1.y = player.y - 50; bullet1.power = 1; bullet1.speed_x = -0.9; bullet1.attachAsset('bullet2', { anchorX: 0.5, anchorY: 0.5 }); bullets.push(bullet1); game.addChild(bullet1); } var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); LK.playMusic('background_music', { loop: true }); function spawnPowerUp() { var powerUp = new PowerUp(); powerUp.x = Math.random() * 2048; powerUp.y = -50; powerUps.push(powerUp); game.addChild(powerUp); } // Function to spawn enemy_1s function spawnEnemy_1() { if (enemy_1s.length > 1 * enemy_1_wave_length) { return; } var groupX = Math.random() * (2048 - enemy_1_movemwnt_amplitude * 2) + enemy_1_movemwnt_amplitude; // Generate a random x position for the group for (var i = 0.0; i < enemy_1_wave_length; i++) { var enemy = new enemy_1(); enemy.n = i; enemy.y = -50 - i * 110; // Assign a slightly different y position to each enemy enemy.xpos = groupX; // Assign the group x position to the enemy enemy.group = enemy_1GroupCount; // Assign the group number to the enemy enemy_1s.push(enemy); game.addChild(enemy); } // Increment enemy_1 group counter enemy_1GroupCount += 1; } // Function to spawn enemy_2s function spawnEnemy_2() { if (enemy_2s.length > 2 * enemy_2_wave_length) { return; } if (LK.getScore() > 200) { var groupX = Math.random() * (2048 - enemy_2_movemwnt_amplitude * 2) + enemy_2_movemwnt_amplitude; // Generate a random x position for the group for (var i = 0.0; i < enemy_2_wave_length; i++) { var groupX = Math.random() * (2048 - enemy_2_movemwnt_amplitude * 2) + enemy_2_movemwnt_amplitude; // Generate a random x position var enemy = new enemy_2(); enemy.n = i; enemy.y = -50 - i * 110; // Assign a slightly different y position to each enemy enemy.xpos = groupX; // Assign the group x position to the enemy enemy.group = enemy_2GroupCount; // Assign the group number to the enemy enemy_2s.push(enemy); game.addChild(enemy); } } // Increment enemy_1 group counter enemy_2GroupCount += 1; } // Function to spawn enemy_3s function spawnEnemy_3() { if (enemy_3s.length > 2 * enemy_3_wave_length) { return; } if (LK.getScore() > 1000) { var groupX = Math.random() * (2048 - enemy_3_movemwnt_amplitude * 2) + enemy_3_movemwnt_amplitude; // Generate a random x position for the group odd = -1; for (var i = 0.0; i < enemy_3_wave_length; i++) { var enemy = new enemy_3(); enemy.n = i; enemy.odd = odd; enemy.y = -50 - i / 2 * 50; // Assign a slightly different y position to each enemy enemy.xpos = groupX; // Assign the group x position to the enemy enemy.group = enemy_3GroupCount; // Assign the group number to the enemy enemy_3s.push(enemy); game.addChild(enemy); odd *= -1; } // Increment enemy_1 group counter enemy_3GroupCount += 1; } } // Function to spawn enemy_4 function spawnEnemy_4() { if (LK.getScore() >= 2000) { var enemy = new enemy_4(); enemy.y = Math.random() * 2732; // Random y position enemy.x = enemy.speed > 0 ? 0 : 2048; // Start from left or right based on speed game.addChild(enemy); } } // Function to spawn enemy_5 function spawnEnemy_5() { if (LK.getScore() > 3000) { var enemy = new enemy_5(); game.addChild(enemy); } } var powerUpLevelText = new Text2('Power-Up Level: 0', { size: 100, fill: 0xFFFFFF }); powerUpLevelText.anchor.set(0, 0); LK.gui.topLeft.addChild(powerUpLevelText); // Function to update the power-up level display function updatePowerUpLevelDisplay() { powerUpLevelText.setText('Power-Up Level: ' + poweruplevel); } // Example: Update power-up level when player collects a power-up function onPowerUpCollected() { poweruplevel += 1; updatePowerUpLevelDisplay(); if (poweruplevel == 5) { LK.getSound('upgrade').play(); } else if (poweruplevel == 5) { LK.getSound('upgrade').play(); } else if (poweruplevel == 15) { LK.getSound('upgrade').play(); } else if (poweruplevel == 20) { LK.getSound('upgrade').play(); } else if (poweruplevel == 30) { LK.getSound('upgrade').play(); } } var scoreText = new Text2('Score: 0', { size: 100, fill: 0xFFFFFF }); scoreText.anchor.set(1, 0); LK.gui.topRight.addChild(scoreText); // Function to update the score display function updateScoreDisplay() { scoreText.setText('Score: ' + LK.getScore()); } // Update the score display whenever the score changes LK.on('scoreChange', updateScoreDisplay); /**** * Variables ****/ // Initialize player var enemy_1_movemwnt_amplitude = 200; var enemy_2_movemwnt_amplitude = 20; var enemy_3_movemwnt_amplitude = 40; var game_speed = 1.0; var poweruplevel = 0; var playerFireSpeed = 15; // Variable to control the player's fire speed var player = game.addChild(new Player()); shotside = -1; player.x = 2048 / 2; player.y = 2500; // Initialize arrays var bullets = []; var powerUps = []; // Initialize arrays for enemy_1 instances var enemy_1s = []; // Initialize arrays for enemy_2 instances var enemy_2s = []; // Initialize arrays for enemy_3 instances var enemy_3s = []; // Initialize enemy_1 group counter var enemy_1GroupCount = 0; var enemy_2GroupCount = 0; var enemy_3GroupCount = 0; var enemy_1_wave_length = 5; var enemy_2_wave_length = 5; var enemy_3_wave_length = 14; // Game update function game.update = function () { // Make the player auto fire at a reasonable frequency if (LK.ticks % playerFireSpeed === 0) { // Fire every 15 ticks player.shoot(); } // Update stars for (var i = 0; i < stars.length; i++) { stars[i].update(); } // Update enemy_1s for (var i = enemy_1s.length - 1; i >= 0; i--) { var enemy_1 = enemy_1s[i]; //enemy_1.update(); if (enemy_1.y > 2732) { enemy_1.destroy(); enemy_1s.splice(i, 1); } } // Update enemy_2s for (var i = enemy_2s.length - 1; i >= 0; i--) { var enemy_2 = enemy_2s[i]; //enemy_2.update(); if (enemy_2.y > 2732) { enemy_2.destroy(); enemy_2s.splice(i, 1); } } // Update enemy_3s for (var i = enemy_3s.length - 1; i >= 0; i--) { var enemy_3 = enemy_3s[i]; //enemy_3.update(); if (enemy_3.y > 2732) { enemy_3.destroy(); enemy_3s.splice(i, 1); } } // Update bullets for (var j = bullets.length - 1; j >= 0; j--) { var bullet = bullets[j]; bullet.update(); if (bullet.y < 0) { bullet.destroy(); bullets.splice(j, 1); } } // Update enemy_4s for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child instanceof enemy_4) { child.update(); } } // Update power-ups for (var k = powerUps.length - 1; k >= 0; k--) { var powerUp = powerUps[k]; powerUp.update(); if (powerUp.y > 2732) { powerUp.destroy(); powerUps.splice(k, 1); } } // Check for collisions checkCollisions(); }; // Function to check for collisions function checkCollisions() { // Check bullet and enemy_4 collisions for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; for (var j = game.children.length - 1; j >= 0; j--) { var child = game.children[j]; if (child instanceof enemy_4 && bullet.intersects(child)) { LK.getSound('bullet_hit').play(); LK.effects.flashObject(child, 0xFFFFFF, 100); // Flash enemy_4 white for 100ms createExplosion(bullet.x, bullet.y); bullet.destroy(); child.lives -= bullet.power; child.healthBarForeground.width = Math.max(0, child.lives / child.maxLives * 100); if (child.lives <= 0) { createExplosion(child.x, child.y); child.destroy(); LK.getSound('enemy_eplode').play(); LK.setScore(LK.getScore() + 15); // Increase score by 15 for enemy_4 updateScoreDisplay(); } else { bullets.splice(i, 1); } break; } } } // Check player and power-up collisions for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; for (var j = enemy_1s.length - 1; j >= 0; j--) { var enemy_1 = enemy_1s[j]; if (bullet.intersects(enemy_1)) { LK.getSound('bullet_hit').play(); LK.effects.flashObject(enemy_1, 0xFFFFFF, 100); // Flash enemy_1 white for 100ms createExplosion(bullet.x, bullet.y); bullet.destroy(); enemy_1.lives -= bullet.power; enemy_1.healthBarForeground.width = Math.max(0, enemy_1.lives / enemy_1.maxLives * 100); if (enemy_1.lives <= 0) { createExplosion(enemy_1.x, enemy_1.y); enemy_1.destroy(); enemy_1s.splice(j, 1); LK.getSound('enemy_eplode').play(); LK.setScore(LK.getScore() + 10); // Increase score by 10 for enemy_1 updateScoreDisplay(); // Update the score display // Check if all enemies in the defeated enemy's group are also defeated if (!enemy_1s.some(function (e) { return e.group === enemy_1.group; })) { // If true, spawn a powerup spawnPowerUp(); } } else { bullets.splice(i, 1); } break; } } } // Check bullet and enemy_2 collisions for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; for (var j = enemy_2s.length - 1; j >= 0; j--) { var enemy_2 = enemy_2s[j]; if (bullet.intersects(enemy_2)) { LK.getSound('bullet_hit').play(); LK.effects.flashObject(enemy_2, 0xFFFFFF, 100); // Flash enemy_2 white for 100ms createExplosion(bullet.x, bullet.y); bullet.destroy(); enemy_2.lives -= bullet.power; enemy_2.healthBarForeground.width = Math.max(0, enemy_2.lives / enemy_2.maxLives * 100); if (enemy_2.lives < 0) { var explosion2 = LK.getAsset('explosion2', { anchorX: 0.5, anchorY: 0.5, x: enemy_2.x, y: enemy_2.y }); game.addChild(explosion2); LK.effects.flashObject(explosion2, 0xFFFFFF, 100); LK.setTimeout(function () { explosion2.destroy(); }, 100); enemy_2.destroy(); enemy_2s.splice(j, 1); LK.getSound('enemy_eplode').play(); LK.setScore(LK.getScore() + 20 * bullet.power); // Increase score by 20 for enemy_2 updateScoreDisplay(); // Update the score display if (!enemy_2s.some(function (e) { return e.group === enemy_2.group; })) { // If true, spawn a powerup spawnPowerUp(); } } else { bullets.splice(i, 1); } break; } } } // Check bullet and enemy_3 collisions for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; for (var j = enemy_3s.length - 1; j >= 0; j--) { var enemy_3 = enemy_3s[j]; if (bullet.intersects(enemy_3)) { LK.getSound('bullet_hit').play(); LK.effects.flashObject(enemy_3, 0xFFFFFF, 100); // Flash enemy_3 white for 100ms createExplosion(bullet.x, bullet.y); bullet.destroy(); enemy_3.lives -= bullet.power; enemy_3.healthBarForeground.width = Math.max(0, enemy_3.lives / enemy_3.maxLives * 100); if (enemy_3.lives < 0) { var explosion2 = LK.getAsset('explosion2', { anchorX: 0.5, anchorY: 0.5, x: enemy_3.x, y: enemy_3.y }); game.addChild(explosion2); LK.effects.flashObject(explosion2, 0xFFFFFF, 100); LK.setTimeout(function () { explosion2.destroy(); }, 100); createExplosion(enemy_3.x, enemy_3.y); enemy_3.destroy(); enemy_3s.splice(j, 1); LK.getSound('enemy_eplode').play(); LK.setScore(LK.getScore() + 50 * bullet.power); // Increase score by 20 for enemy_2 updateScoreDisplay(); // Update the score display if (!enemy_3s.some(function (e) { return e.group === enemy_3.group; })) { // If true, spawn a powerup spawnPowerUp(); } } else { bullets.splice(i, 1); } break; } } } // Check player and enemy_4 bullet collisions for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child instanceof EnemyBullet && player.intersects(child)) { var explosion2 = LK.getAsset('explosion2', { anchorX: 0.5, anchorY: 0.5, x: player.x, y: player.y }); game.addChild(explosion2); LK.effects.flashObject(explosion2, 0xFFFFFF, 100); LK.setTimeout(function () { explosion2.destroy(); }, 200); player.destroy(); LK.getSound('player_dead').play(); LK.setTimeout(function () { LK.showGameOver(); }, 3000); // Delay of 1000ms before showing game over return; } } // Check bullet and enemy_5 collisions for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; for (var j = game.children.length - 1; j >= 0; j--) { var child = game.children[j]; if (child instanceof enemy_5 && bullet.intersects(child)) { LK.getSound('bullet_hit').play(); LK.effects.flashObject(child, 0xFFFFFF, 100); // Flash enemy_5 white for 100ms createExplosion(bullet.x, bullet.y); bullet.destroy(); child.lives -= bullet.power; // Reduce lives by bullet power child.healthBarForeground.width = Math.max(0, child.lives / child.maxLives * 100); LK.setScore(LK.getScore() + 100 * bullet.power); // Increase score by 25 for enemy_5 if (child.lives <= 0) { var explosion_a = LK.getAsset('explosion2', { anchorX: 0.5, anchorY: 0.5, x: child.x, y: child.y }); var explosion_b = LK.getAsset('explosion2', { anchorX: 0.5, anchorY: 0.5, x: child.x + (Math.random() - 0.5) * 300, y: child.y + (Math.random() - 0.5) * 300 }); var explosion_c = LK.getAsset('explosion2', { anchorX: 0.5, anchorY: 0.5, x: child.x + (Math.random() - 0.5) * 300, y: child.y + (Math.random() - 0.5) * 300 }); game.addChild(explosion_a); game.addChild(explosion_b); game.addChild(explosion_c); LK.setTimeout(function () { explosion_a.destroy(); explosion_b.destroy(); explosion_c.destroy(); }, 100); createExplosion(child.x, child.y); child.destroy(); LK.getSound('enemy_eplode').play(); updateScoreDisplay(); } bullets.splice(i, 1); break; } } } // Check player bullet and enemy bullet collisions for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; for (var j = game.children.length - 1; j >= 0; j--) { var child = game.children[j]; if (child instanceof EnemyBullet && bullet.intersects(child)) { LK.getSound('bullet_hit').play(); createExplosion(bullet.x, bullet.y); bullet.destroy(); child.destroy(); bullets.splice(i, 1); break; } } } // Check player and power-up collisions for (var k = powerUps.length - 1; k >= 0; k--) { var powerUp = powerUps[k]; if (player.intersects(powerUp)) { powerUp.destroy(); powerUps.splice(k, 1); onPowerUpCollected(); } } // Check player and enemy collisions for (var i = enemy_1s.length - 1; i >= 0; i--) { var enemy_1 = enemy_1s[i]; if (player.intersects(enemy_1)) { var explosion2 = LK.getAsset('explosion2', { anchorX: 0.5, anchorY: 0.5, x: player.x, y: player.y }); game.addChild(explosion2); LK.effects.flashObject(explosion2, 0xFFFFFF, 100); LK.setTimeout(function () { explosion2.destroy(); }, 200); player.destroy(); LK.getSound('player_dead').play(); LK.setTimeout(function () { LK.showGameOver(); }, 3000); // Delay of 1000ms before showing game over return; } } for (var i = enemy_2s.length - 1; i >= 0; i--) { var enemy_2 = enemy_2s[i]; if (player.intersects(enemy_2)) { LK.showGameOver(); return; } } for (var i = enemy_3s.length - 1; i >= 0; i--) { var enemy_3 = enemy_3s[i]; if (player.intersects(enemy_3)) { LK.showGameOver(); return; } } for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child instanceof enemy_4 && player.intersects(child)) { var explosion2 = LK.getAsset('explosion2', { anchorX: 0.5, anchorY: 0.5, x: player.x, y: player.y }); game.addChild(explosion2); LK.effects.flashObject(explosion2, 0xFFFFFF, 100); LK.setTimeout(function () { explosion2.destroy(); }, 200); player.destroy(); LK.getSound('player_dead').play(); LK.setTimeout(function () { LK.showGameOver(); }, 3000); // Delay of 1000ms before showing game over return; } } // Check player and enemy_5 collisions for (var i = game.children.length - 1; i >= 0; i--) { var child = game.children[i]; if (child instanceof enemy_5 && player.intersects(child)) { var explosion2 = LK.getAsset('explosion2', { anchorX: 0.5, anchorY: 0.5, x: player.x, y: player.y }); game.addChild(explosion2); LK.effects.flashObject(explosion2, 0xFFFFFF, 100); LK.setTimeout(function () { explosion2.destroy(); }, 200); player.destroy(); LK.getSound('player_dead').play(); LK.setTimeout(function () { LK.showGameOver(); }, 3000); // Delay of 1000ms before showing game over return; } } } // Set intervals for spawning LK.setInterval(spawnEnemy_1, 4000); LK.setInterval(spawnEnemy_2, 5200); LK.setInterval(spawnEnemy_3, 6400); LK.setInterval(spawnEnemy_4, 5000); LK.setInterval(spawnEnemy_5, 4000); // Player controls 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) { //player.shoot(); };
===================================================================
--- original.js
+++ change.js
@@ -34,25 +34,8 @@
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
- self.energy = 100; // Initialize player energy
- self.maxEnergy = 100; // Maximum energy value
- self.energyBarBackground = LK.getAsset('energyBarBackground', {
- anchorX: 0.5,
- anchorY: 0.5,
- y: -120 // Position above the player
- });
- self.addChild(self.energyBarBackground);
- self.energyBarForeground = LK.getAsset('energyBarForeground', {
- anchorX: 0.5,
- anchorY: 0.5,
- y: -120 // Position above the player
- });
- self.addChild(self.energyBarForeground);
- self.updateEnergyBar = function () {
- self.energyBarForeground.width = Math.max(0, self.energy / self.maxEnergy * 200);
- };
self.shoot = function () {
LK.getSound('Player_shoot').play();
if (powerup_between(0, 5)) {
split_shot();
@@ -92,8 +75,23 @@
self.y += 1;
self.rotation += Math.PI / 40;
};
});
+var Star = Container.expand(function () {
+ var self = Container.call(this);
+ var starGraphics = self.attachAsset('depth_1', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = Math.random() * 2 + 1; // Random speed for each star
+ self.update = function () {
+ self.y += self.speed;
+ if (self.y > 2732) {
+ self.y = -50; // Reset star to top
+ self.x = Math.random() * 2048; // Randomize x position
+ }
+ };
+});
// Function to spawn power-ups
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
// enemy_1 class
@@ -270,8 +268,17 @@
/****
* Game Code
****/
+var stars = [];
+for (var i = 0; i < 100; i++) {
+ // Create 100 stars
+ var star = new Star();
+ star.x = Math.random() * 2048; // Random x position
+ star.y = Math.random() * 2732; // Random y position
+ stars.push(star);
+ game.addChild(star);
+}
function powerup_between(a, b) {
return poweruplevel >= a && poweruplevel < b;
}
function createExplosion(x, y) {
@@ -493,10 +500,13 @@
// Make the player auto fire at a reasonable frequency
if (LK.ticks % playerFireSpeed === 0) {
// Fire every 15 ticks
player.shoot();
- player.updateEnergyBar();
}
+ // Update stars
+ for (var i = 0; i < stars.length; i++) {
+ stars[i].update();
+ }
// Update enemy_1s
for (var i = enemy_1s.length - 1; i >= 0; i--) {
var enemy_1 = enemy_1s[i];
//enemy_1.update();
@@ -710,19 +720,14 @@
LK.effects.flashObject(explosion2, 0xFFFFFF, 100);
LK.setTimeout(function () {
explosion2.destroy();
}, 200);
- player.energy -= 20; // Reduce player energy by 20
- player.updateEnergyBar(); // Update the energy bar display
- if (player.energy <= 0) {
- player.destroy();
- LK.getSound('player_dead').play();
- LK.setTimeout(function () {
- LK.showGameOver();
- }, 3000); // Delay of 1000ms before showing game over
- return;
- }
- child.destroy(); // Destroy the enemy bullet
+ player.destroy();
+ LK.getSound('player_dead').play();
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 3000); // Delay of 1000ms before showing game over
+ return;
}
}
// Check bullet and enemy_5 collisions
for (var i = bullets.length - 1; i >= 0; i--) {
@@ -801,10 +806,8 @@
// Check player and enemy collisions
for (var i = enemy_1s.length - 1; i >= 0; i--) {
var enemy_1 = enemy_1s[i];
if (player.intersects(enemy_1)) {
- player.energy -= 20; // Reduce player energy by 20
- player.updateEnergyBar(); // Update the energy bar display
var explosion2 = LK.getAsset('explosion2', {
anchorX: 0.5,
anchorY: 0.5,
x: player.x,
@@ -814,19 +817,14 @@
LK.effects.flashObject(explosion2, 0xFFFFFF, 100);
LK.setTimeout(function () {
explosion2.destroy();
}, 200);
- player.energy -= 20; // Reduce player energy by 20
- player.updateEnergyBar(); // Update the energy bar display
- if (player.energy <= 0) {
- player.destroy();
- LK.getSound('player_dead').play();
- LK.setTimeout(function () {
- LK.showGameOver();
- }, 3000); // Delay of 1000ms before showing game over
- return;
- }
- enemy_1.destroy(); // Destroy the enemy
+ player.destroy();
+ LK.getSound('player_dead').play();
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 3000); // Delay of 1000ms before showing game over
+ return;
}
}
for (var i = enemy_2s.length - 1; i >= 0; i--) {
var enemy_2 = enemy_2s[i];
spaceship, retro game, 2d. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
yellow ball. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
game flying saucer. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
star field. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
neon circle with a 'p'. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
fire explosion. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
double sided space ship. symetrical. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows, color, neon
hot stone, red. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
large rock. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows