User prompt
when a life is lost reduce the current speed of the aliens by 75% for 2 seconds
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'forEach')' in or related to this line: 'this.particles.forEach(function (particle) {' Line Number: 186
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'forEach')' in or related to this line: 'this.particles.forEach(function (particle) {' Line Number: 186
User prompt
ensure that `ParticlePool` has a `particles` array defined and accessible in the global scope.
Code edit (1 edits merged)
Please save this source code
User prompt
move wave text 100 pixels to the right and 200 down
User prompt
show wave nunmber on the screen an update it when a new wave starts
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'length')' in or related to this line: 'for (var j = ParticlePool.particles.length - 1; j >= 0; j--) {' Line Number: 281
User prompt
Make sure particlespool is destroyed when alien is destroyed in checkcollision
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'length')' in or related to this line: 'for (var j = ParticlePool.particles.length - 1; j >= 0; j--) {' Line Number: 274
User prompt
when checkinng collisions, make sure that if the enemy collides with shield, then destroy particles
User prompt
Make sure particles are destroyed after alien is destroyed by shield in game
User prompt
destroy allien particle when allien is destroyed
User prompt
That did not work. Make sure particles are destroyed also when the alien is destroyed by the shield
User prompt
make sure the particles are also removed when alien is desttoyed
User prompt
Improve preformance when the game has too many aliens on screen
User prompt
remove code that increases the shield speed over time
User prompt
speed of enemies will encrease per wave and not by time
User prompt
Each wave should also have a number of enemies in it
User prompt
Enemies should be spawned in waves each wave will have a different speed
Code edit (1 edits merged)
Please save this source code
User prompt
When a life is lost, reduce the speed of aliens in half for two second and then go back to the speed it had before life was lost
User prompt
When a life is lost, reduce the current speed of aliens in half for 2 seconds and then go back to the speed it had two seconds ago
User prompt
After life is lost reduce game speed for 70% of its speed and after 2 seconds go back to original speed
/**** * Classes ****/ var Alien = Container.expand(function () { var self = Container.call(this); var alienGraphics = self.attachAsset('alien', { anchorX: 0.5, anchorY: 0.5, tint: Math.floor(Math.random() * (0xFFFFFF - 0x808080)) + 0x808080 }); self.baseSpeed = 2; self.speedMultiplier = 1; self._move_migrated = function () { var dy = earth.y - self.y; var dx = earth.x - self.x; var angle = Math.atan2(dy, dx); var speed = self.baseSpeed * self.speedMultiplier; self.x += speed * Math.cos(angle); self.y += speed * Math.sin(angle); // Emit engine particles var particleAngle = angle + Math.PI; // Opposite direction of movement if (Math.random() < 0.5) { var particleSpeed = Math.random() * 2 + 2; var particle = ParticlePool.get(self.children[0].tint, particleSpeed, particleAngle); particle.x = self.x + 50 * Math.cos(particleAngle); particle.y = self.y + 50 * Math.sin(particleAngle); game.addChild(particle); } }; }); var Explosion = Container.expand(function (colorTint) { var self = Container.call(this); self.particles = []; for (var i = 0; i < 20; i++) { var particle = self.attachAsset('alien', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.2, scaleY: 0.2, alpha: 0.8, tint: colorTint }); particle.vx = (Math.random() - 0.5) * 10; particle.vy = (Math.random() - 0.5) * 10; self.particles.push(particle); } self._update_migrated = function () { for (var i = self.particles.length - 1; i >= 0; i--) { var p = self.particles[i]; p.x += p.vx; p.y += p.vy; p.alpha -= 0.02; if (p.alpha <= 0) { p.destroy(); self.particles.splice(i, 1); } } }; }); var Particle = Container.expand(function (colorTint, speed, angle) { var self = Container.call(this); var particleGraphics = self.attachAsset('alien', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.3, scaleY: 0.3, alpha: 0.8, tint: colorTint }); self.vx = speed * Math.cos(angle); self.vy = speed * Math.sin(angle); self.lifeSpan = 60; self.reset = function (colorTint, speed, angle) { self.vx = speed * Math.cos(angle); self.vy = speed * Math.sin(angle); self.alpha = 0.8; particleGraphics.tint = colorTint; self.lifeSpan = 60; }; self._update_migrated = function () { self.x += self.vx; self.y += self.vy; self.alpha -= 1 / self.lifeSpan; if (self.alpha <= 0) { self.visible = false; } }; return self; }); // Shield class var Shield = Container.expand(function () { var self = Container.call(this); self.attachAsset('shield', { anchorX: 0.5, anchorY: 0.5 }); self.orbitRadius = 200; self.orbitSpeed = 0.04; self.orbitAngle = 0; self._update_migrated = function () { self.orbitAngle += self.orbitSpeed; self.x = earth.x + self.orbitRadius * Math.cos(self.orbitAngle); self.y = earth.y + self.orbitRadius * Math.sin(self.orbitAngle); var angleToEarth = Math.atan2(earth.y - self.y, earth.x - self.x); self.rotation = angleToEarth + Math.PI / 2; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ // Game variables var lives = 3; var wave = 1; var waveSpeeds = [2, 3, 4, 5, 6]; // Initialize assets used in the game. // Missile class // Alien class // Explosion class // Particle class var ParticlePool = function () { var particles = []; return { get: function get(colorTint, speed, angle) { var particle = particles.find(function (p) { return !p.visible; }); if (!particle) { particle = new Particle(colorTint, speed, angle); particles.push(particle); } else { particle.reset(colorTint, speed, angle); } particle.visible = true; return particle; }, updateAll: function updateAll() { particles.forEach(function (particle) { if (particle.visible) { particle._update_migrated(); } }); } }; }(); var aliens = []; var earth; var scoreTxt; var particles = []; // Array to keep track of particles var spawnAlienInterval = 120; // Frames until a new alien spawns var spawnAlienIntervalDecrement = 0.98; // Multiplier to decrease spawn interval var nextAlienSpawn = spawnAlienInterval; // Initialize Earth function initEarth() { earth = game.addChild(LK.getAsset('earth', { anchorX: 0.5, anchorY: 0.5, x: game.width / 2, y: game.height / 2 })); window.shield = game.addChild(new Shield()); window.shield.x = earth.x; window.shield.y = earth.y - window.shield.orbitRadius; } // Initialize score display function initScore() { scoreTxt = new Text2('', { size: 150, fill: "#ffffff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); livesIcons = []; for (var i = 0; i < lives; i++) { var lifeIcon = LK.getAsset('earth', { anchorX: 1, anchorY: 0, scaleX: 0.5, scaleY: 0.5, x: -i * 60 }); LK.gui.topRight.addChild(lifeIcon); livesIcons.push(lifeIcon); } } // Spawn an alien function spawnAlien() { var alien = new Alien(); alien.baseSpeed = wave; var side = Math.floor(Math.random() * 4); switch (side) { case 0: // top alien.x = Math.random() * game.width; alien.y = -alien.height; break; case 1: // right alien.x = game.width + alien.width; alien.y = Math.random() * game.height; break; case 2: // bottom alien.x = Math.random() * game.width; alien.y = game.height + alien.height; break; case 3: // left alien.x = -alien.width; alien.y = Math.random() * game.height; break; } aliens.push(alien); game.addChild(alien); } // Check for collisions function checkCollisions() { for (var i = 0; i < aliens.length; i++) { if (window.shield.intersects(aliens[i])) { var alienColor = aliens[i].children[0].tint; var explosion = new Explosion(alienColor); explosion.x = aliens[i].x; explosion.y = aliens[i].y; game.addChild(explosion); aliens[i].destroy(); LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore().toString()); aliens.splice(i, 1); } } } // Game over check function checkGameOver() { for (var i = 0; i < aliens.length; i++) { if (aliens[i].intersects(earth)) { var alienColor = aliens[i].children[0].tint; LK.effects.flashScreen(alienColor, 2000); lives--; livesIcons[lives].destroy(); livesIcons.pop(); if (lives <= 0) { LK.showGameOver(); } else { aliens.forEach(function (alien) { alien.speedMultiplier = 0.5; }); LK.setTimeout(function () { aliens.forEach(function (alien) { alien.speedMultiplier = 1; }); }, 2000); aliens[i].destroy(); aliens.splice(i, 1); } break; } } } // Touch event to move shield game.on('down', function (x, y, obj) { window.shield.orbitSpeed *= -1; }); // Game tick event LK.on('tick', function () { // Update explosions and particles game.children.forEach(function (child) { if (child instanceof Explosion) { child._update_migrated(); } }); ParticlePool.updateAll(); // Move aliens for (var j = aliens.length - 1; j >= 0; j--) { aliens[j]._move_migrated(); if (aliens[j].y > game.height + aliens[j].height) { aliens[j].destroy(); aliens.splice(j, 1); } } // Spawn aliens and update spawn interval nextAlienSpawn--; if (nextAlienSpawn <= 0) { if (aliens.length === 0) { wave++; } spawnAlien(); nextAlienSpawn = spawnAlienInterval; spawnAlienInterval *= spawnAlienIntervalDecrement; } // Update shield position window.shield._update_migrated(); // Check for collisions and game over checkCollisions(); checkGameOver(); }); // Initialize game elements initEarth(); initScore();
===================================================================
--- original.js
+++ change.js
@@ -119,9 +119,8 @@
// Game variables
var lives = 3;
var wave = 1;
var waveSpeeds = [2, 3, 4, 5, 6];
-var waveEnemies = [5, 10, 15, 20, 25];
// Initialize assets used in the game.
// Missile class
// Alien class
// Explosion class
@@ -192,37 +191,35 @@
}
}
// Spawn an alien
function spawnAlien() {
- for (var i = 0; i < waveEnemies[wave - 1]; i++) {
- var alien = new Alien();
- alien.baseSpeed = waveSpeeds[wave - 1];
- var side = Math.floor(Math.random() * 4);
- switch (side) {
- case 0:
- // top
- alien.x = Math.random() * game.width;
- alien.y = -alien.height;
- break;
- case 1:
- // right
- alien.x = game.width + alien.width;
- alien.y = Math.random() * game.height;
- break;
- case 2:
- // bottom
- alien.x = Math.random() * game.width;
- alien.y = game.height + alien.height;
- break;
- case 3:
- // left
- alien.x = -alien.width;
- alien.y = Math.random() * game.height;
- break;
- }
- aliens.push(alien);
- game.addChild(alien);
+ var alien = new Alien();
+ alien.baseSpeed = wave;
+ var side = Math.floor(Math.random() * 4);
+ switch (side) {
+ case 0:
+ // top
+ alien.x = Math.random() * game.width;
+ alien.y = -alien.height;
+ break;
+ case 1:
+ // right
+ alien.x = game.width + alien.width;
+ alien.y = Math.random() * game.height;
+ break;
+ case 2:
+ // bottom
+ alien.x = Math.random() * game.width;
+ alien.y = game.height + alien.height;
+ break;
+ case 3:
+ // left
+ alien.x = -alien.width;
+ alien.y = Math.random() * game.height;
+ break;
}
+ aliens.push(alien);
+ game.addChild(alien);
}
// Check for collisions
function checkCollisions() {
for (var i = 0; i < aliens.length; i++) {
@@ -291,20 +288,13 @@
nextAlienSpawn--;
if (nextAlienSpawn <= 0) {
if (aliens.length === 0) {
wave++;
- if (wave > waveSpeeds.length) {
- wave = 1;
- }
}
spawnAlien();
nextAlienSpawn = spawnAlienInterval;
spawnAlienInterval *= spawnAlienIntervalDecrement;
}
- // Increase shield speed every 120 ticks
- if (LK.ticks % 120 === 0) {
- window.shield.orbitSpeed += window.shield.orbitSpeed > 0 ? 0.001 : -0.001;
- }
// Update shield position
window.shield._update_migrated();
// Check for collisions and game over
checkCollisions();