User prompt
has que los jefes no se salgan de la pantalla
User prompt
si hay un erro en la progamacion corrigelo
Code edit (1 edits merged)
Please save this source code
User prompt
Cosmic Destroyer
Initial prompt
mi idea es un juego de naves don de tienes que matar ene migos mientra tu nave vuela en el espacio ademas cada cierto tiempo salen jefes que derro tarlos tu nave se mejora
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var BossShip = Container.expand(function () {
var self = Container.call(this);
var bossGraphics = self.attachAsset('bossShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 20;
self.maxHealth = 20;
self.speed = 2;
self.shootCooldown = 0;
self.shootRate = 30;
self.moveDirection = 1;
self.moveTimer = 0;
self.moveInterval = 120;
self.bossNumber = 1;
self.update = function () {
self.y += self.speed;
self.moveTimer++;
if (self.moveTimer > self.moveInterval) {
self.moveDirection *= -1;
self.moveTimer = 0;
}
self.x += self.moveDirection * 3;
self.x = Math.max(50, Math.min(1998, self.x));
self.shootCooldown--;
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.damage = 1;
self.update = function () {
self.y += self.speed;
};
return self;
});
var EnemyShip = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 1;
self.maxHealth = 1;
self.speed = 3;
self.shootCooldown = 0;
self.shootRate = 60;
self.waveNumber = 1;
self.update = function () {
self.y += self.speed;
self.shootCooldown--;
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -15;
self.damage = 1;
self.update = function () {
self.y += self.speed;
};
return self;
});
var PlayerShip = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 10;
self.maxHealth = 10;
self.speed = 6;
self.shootCooldown = 0;
self.shootRate = 15;
self.firepower = 1;
self.armor = 1;
self.upgradePoints = 0;
self.down = function (x, y, obj) {
//Placeholder for future touch interactions
};
self.up = function (x, y, obj) {
//Placeholder for future touch interactions
};
self.move = function (x, y, obj) {
//Handled by game.move
};
self.update = function () {
self.shootCooldown--;
};
return self;
});
var UpgradePickup = Container.expand(function () {
var self = Container.call(this);
var pickupGraphics = self.attachAsset('upgradePickup', {
anchorX: 0.5,
anchorY: 0.5
});
self.upgradeType = 'firepower';
self.floatSpeed = 2;
self.floatDirection = -1;
self.originalY = 0;
self.update = function () {
self.y += self.floatSpeed * self.floatDirection;
if (self.y < self.originalY - 40 || self.y > self.originalY + 40) {
self.floatDirection *= -1;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x001a4d
});
/****
* Game Code
****/
//Game state variables
var playerShip = null;
var enemyBullets = [];
var playerBullets = [];
var enemies = [];
var bosses = [];
var upgradePickups = [];
var waveNumber = 1;
var bossNumber = 1;
var waveEnemyCount = 0;
var waveEnemiesDefeated = 0;
var isBossWave = false;
var gameState = 'playing';
var moveDirection = 0;
var touchX = 1024;
//UI Elements
var healthText = new Text2('Health: 10/10', {
size: 80,
fill: '#ffffff'
});
healthText.anchor.set(0, 0);
LK.gui.topRight.addChild(healthText);
var upgradeText = new Text2('Upgrades: 0', {
size: 80,
fill: '#ffff00'
});
upgradeText.anchor.set(0, 0);
LK.gui.top.addChild(upgradeText);
var waveText = new Text2('Wave: 1', {
size: 80,
fill: '#00ff00'
});
waveText.anchor.set(1, 0);
LK.gui.topRight.addChild(waveText);
//Initialize player ship
playerShip = game.addChild(new PlayerShip());
playerShip.x = 1024;
playerShip.y = 2400;
//Start music
LK.playMusic('spaceMusic', {
loop: true
});
//Function to calculate enemy wave count
function calculateWaveSize() {
return 3 + Math.floor(waveNumber / 2);
}
//Function to spawn enemy wave
function spawnEnemyWave() {
waveEnemyCount = calculateWaveSize();
waveEnemiesDefeated = 0;
isBossWave = false;
for (var i = 0; i < waveEnemyCount; i++) {
var enemy = game.addChild(new EnemyShip());
enemy.x = 200 + i % 3 * 400;
enemy.y = -100 - Math.floor(i / 3) * 150;
enemy.speed = 2 + waveNumber * 0.3;
enemy.shootRate = Math.max(40, 60 - waveNumber * 5);
enemy.waveNumber = waveNumber;
enemy.lastBulletIntersecting = false;
enemies.push(enemy);
}
}
//Function to spawn boss wave
function spawnBoss() {
isBossWave = true;
waveEnemiesDefeated = 0;
var boss = game.addChild(new BossShip());
boss.x = 1024;
boss.y = -100;
boss.health = 15 + bossNumber * 5;
boss.maxHealth = boss.health;
boss.shootRate = Math.max(20, 40 - bossNumber * 3);
boss.bossNumber = bossNumber;
boss.lastBulletIntersecting = false;
bosses.push(boss);
}
//Initialize first wave
spawnEnemyWave();
//Handle game movement
game.move = function (x, y, obj) {
touchX = x;
playerShip.x = Math.max(30, Math.min(2018, x));
};
//Main game update loop
game.update = function () {
if (gameState !== 'playing') return;
//Update player ship
playerShip.update();
playerShip.shootCooldown--;
//Player shooting
if (playerShip.shootCooldown <= 0) {
for (var i = 0; i < playerShip.firepower; i++) {
var offset = (playerShip.firepower - 1) * -15 + i * 30;
var bullet = game.addChild(new PlayerBullet());
bullet.x = playerShip.x + offset;
bullet.y = playerShip.y - 40;
bullet.damage = playerShip.firepower;
playerBullets.push(bullet);
LK.getSound('playerShoot').play();
}
playerShip.shootCooldown = playerShip.shootRate;
}
//Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
bullet.update();
if (bullet.y < -50) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
}
//Update enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (!enemy) continue;
enemy.update();
//Enemy shooting
enemy.shootCooldown--;
if (enemy.shootCooldown <= 0) {
var eBullet = game.addChild(new EnemyBullet());
eBullet.x = enemy.x;
eBullet.y = enemy.y + 30;
enemyBullets.push(eBullet);
LK.getSound('enemyShoot').play();
enemy.shootCooldown = enemy.shootRate;
}
//Check enemy off-screen
if (enemy.y > 2800) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
//Check bullet collisions with enemies
if (!enemy.lastBulletIntersecting) enemy.lastBulletIntersecting = false;
for (var j = playerBullets.length - 1; j >= 0; j--) {
var bullet = playerBullets[j];
if (bullet && enemy && bullet.intersects(enemy) && !enemy.lastBulletIntersecting) {
enemy.health -= bullet.damage;
enemy.lastBulletIntersecting = true;
bullet.destroy();
playerBullets.splice(j, 1);
if (enemy.health <= 0) {
LK.getSound('explosion').play();
LK.effects.flashObject(enemy, 0xff0000, 200);
LK.setScore(LK.getScore() + 100);
waveEnemiesDefeated++;
//Drop upgrade pickup chance
if (Math.random() < 0.3) {
var pickup = game.addChild(new UpgradePickup());
pickup.x = enemy.x;
pickup.y = enemy.y;
pickup.originalY = enemy.y;
pickup.upgradeType = ['firepower', 'armor', 'speed'][Math.floor(Math.random() * 3)];
upgradePickups.push(pickup);
}
enemy.destroy();
enemies.splice(i, 1);
}
break;
}
}
}
//Update bosses
for (var i = bosses.length - 1; i >= 0; i--) {
var boss = bosses[i];
if (!boss) continue;
boss.update();
//Boss shooting (multiple bullets)
boss.shootCooldown--;
if (boss.shootCooldown <= 0) {
for (var b = 0; b < 3; b++) {
var eBullet = game.addChild(new EnemyBullet());
eBullet.x = boss.x + (b - 1) * 30;
eBullet.y = boss.y + 60;
enemyBullets.push(eBullet);
}
LK.getSound('enemyShoot').play();
boss.shootCooldown = boss.shootRate;
}
//Check bullet collisions with boss
if (!boss.lastBulletIntersecting) boss.lastBulletIntersecting = false;
for (var j = playerBullets.length - 1; j >= 0; j--) {
var bullet = playerBullets[j];
if (bullet && boss && bullet.intersects(boss) && !boss.lastBulletIntersecting) {
boss.health -= bullet.damage;
boss.lastBulletIntersecting = true;
bullet.destroy();
playerBullets.splice(j, 1);
LK.effects.flashObject(boss, 0xff00ff, 150);
if (boss.health <= 0) {
LK.getSound('explosion').play();
LK.effects.flashScreen(0xffff00, 500);
LK.setScore(LK.getScore() + 1000);
//Grant boss defeat upgrade
playerShip.upgradePoints += 3;
playerShip.firepower += 1;
playerShip.armor += 1;
boss.destroy();
bosses.splice(i, 1);
bossNumber++;
//Spawn next wave after delay
LK.setTimeout(function () {
spawnEnemyWave();
}, 1000);
}
break;
}
}
}
//Update enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
bullet.update();
if (bullet.y > 2800) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
//Check collision with player
if (!bullet.lastPlayerIntersecting) bullet.lastPlayerIntersecting = false;
if (bullet.intersects(playerShip) && !bullet.lastPlayerIntersecting) {
bullet.lastPlayerIntersecting = true;
playerShip.health -= Math.max(1, bullet.damage - (playerShip.armor - 1));
bullet.destroy();
enemyBullets.splice(i, 1);
LK.effects.flashObject(playerShip, 0xff0000, 200);
if (playerShip.health <= 0) {
gameState = 'gameover';
LK.showGameOver();
}
continue;
}
}
//Update upgrade pickups
for (var i = upgradePickups.length - 1; i >= 0; i--) {
var pickup = upgradePickups[i];
pickup.update();
//Check collision with player
if (!pickup.lastPlayerIntersecting) pickup.lastPlayerIntersecting = false;
if (pickup.intersects(playerShip) && !pickup.lastPlayerIntersecting) {
pickup.lastPlayerIntersecting = true;
LK.getSound('upgrade').play();
if (pickup.upgradeType === 'firepower') {
playerShip.firepower++;
} else if (pickup.upgradeType === 'armor') {
playerShip.armor++;
playerShip.health = playerShip.maxHealth;
} else if (pickup.upgradeType === 'speed') {
playerShip.shootRate = Math.max(5, playerShip.shootRate - 2);
}
playerShip.upgradePoints++;
LK.effects.flashObject(playerShip, 0x00ff00, 300);
pickup.destroy();
upgradePickups.splice(i, 1);
continue;
}
//Remove off-screen pickups
if (pickup.y > 2800) {
pickup.destroy();
upgradePickups.splice(i, 1);
}
}
//Check if wave is complete and spawn boss
if (enemies.length === 0 && !isBossWave && bosses.length === 0 && waveEnemiesDefeated === waveEnemyCount && waveEnemyCount > 0) {
LK.setTimeout(function () {
if (enemies.length === 0 && bosses.length === 0) {
waveNumber++;
spawnBoss();
}
}, 1500);
}
//Update UI
healthText.setText('Health: ' + Math.max(0, playerShip.health) + '/' + playerShip.maxHealth);
upgradeText.setText('Upgrades: ' + playerShip.upgradePoints);
waveText.setText('Wave: ' + waveNumber + ' | Boss: ' + bossNumber);
}; ===================================================================
--- original.js
+++ change.js
@@ -193,8 +193,9 @@
enemy.y = -100 - Math.floor(i / 3) * 150;
enemy.speed = 2 + waveNumber * 0.3;
enemy.shootRate = Math.max(40, 60 - waveNumber * 5);
enemy.waveNumber = waveNumber;
+ enemy.lastBulletIntersecting = false;
enemies.push(enemy);
}
}
//Function to spawn boss wave
@@ -207,8 +208,9 @@
boss.health = 15 + bossNumber * 5;
boss.maxHealth = boss.health;
boss.shootRate = Math.max(20, 40 - bossNumber * 3);
boss.bossNumber = bossNumber;
+ boss.lastBulletIntersecting = false;
bosses.push(boss);
}
//Initialize first wave
spawnEnemyWave();
@@ -267,12 +269,14 @@
enemies.splice(i, 1);
continue;
}
//Check bullet collisions with enemies
+ if (!enemy.lastBulletIntersecting) enemy.lastBulletIntersecting = false;
for (var j = playerBullets.length - 1; j >= 0; j--) {
var bullet = playerBullets[j];
- if (bullet && enemy && bullet.intersects(enemy)) {
+ if (bullet && enemy && bullet.intersects(enemy) && !enemy.lastBulletIntersecting) {
enemy.health -= bullet.damage;
+ enemy.lastBulletIntersecting = true;
bullet.destroy();
playerBullets.splice(j, 1);
if (enemy.health <= 0) {
LK.getSound('explosion').play();
@@ -312,12 +316,14 @@
LK.getSound('enemyShoot').play();
boss.shootCooldown = boss.shootRate;
}
//Check bullet collisions with boss
+ if (!boss.lastBulletIntersecting) boss.lastBulletIntersecting = false;
for (var j = playerBullets.length - 1; j >= 0; j--) {
var bullet = playerBullets[j];
- if (bullet && boss && bullet.intersects(boss)) {
+ if (bullet && boss && bullet.intersects(boss) && !boss.lastBulletIntersecting) {
boss.health -= bullet.damage;
+ boss.lastBulletIntersecting = true;
bullet.destroy();
playerBullets.splice(j, 1);
LK.effects.flashObject(boss, 0xff00ff, 150);
if (boss.health <= 0) {
@@ -349,9 +355,11 @@
enemyBullets.splice(i, 1);
continue;
}
//Check collision with player
- if (bullet.intersects(playerShip)) {
+ if (!bullet.lastPlayerIntersecting) bullet.lastPlayerIntersecting = false;
+ if (bullet.intersects(playerShip) && !bullet.lastPlayerIntersecting) {
+ bullet.lastPlayerIntersecting = true;
playerShip.health -= Math.max(1, bullet.damage - (playerShip.armor - 1));
bullet.destroy();
enemyBullets.splice(i, 1);
LK.effects.flashObject(playerShip, 0xff0000, 200);
@@ -366,9 +374,11 @@
for (var i = upgradePickups.length - 1; i >= 0; i--) {
var pickup = upgradePickups[i];
pickup.update();
//Check collision with player
- if (pickup.intersects(playerShip)) {
+ if (!pickup.lastPlayerIntersecting) pickup.lastPlayerIntersecting = false;
+ if (pickup.intersects(playerShip) && !pickup.lastPlayerIntersecting) {
+ pickup.lastPlayerIntersecting = true;
LK.getSound('upgrade').play();
if (pickup.upgradeType === 'firepower') {
playerShip.firepower++;
} else if (pickup.upgradeType === 'armor') {
@@ -389,11 +399,12 @@
upgradePickups.splice(i, 1);
}
}
//Check if wave is complete and spawn boss
- if (enemies.length === 0 && !isBossWave && bosses.length === 0 && waveEnemiesDefeated > 0) {
+ if (enemies.length === 0 && !isBossWave && bosses.length === 0 && waveEnemiesDefeated === waveEnemyCount && waveEnemyCount > 0) {
LK.setTimeout(function () {
- if (enemies.length === 0) {
+ if (enemies.length === 0 && bosses.length === 0) {
+ waveNumber++;
spawnBoss();
}
}, 1500);
}