User prompt
reducir la cantidada de disparos de los enemigos
User prompt
reduce un 50% la cantidad de disparos de los enemigos, son demasiados los disparon que hacen los enemigos
User prompt
ahora deseo que los numeros de disparos de lso enemigos se reduzcan un 50%
Code edit (1 edits merged)
Please save this source code
User prompt
Musical Space Invaders
Initial prompt
quiero crear un juego al estilo space invaders con tematicas de naves espaciales musicales
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.health = 1; self.shootTimer = 0; self.shootInterval = (180 + Math.random() * 120) * 0.5; self.moveSpeed = 2; self.note = 0; // Musical note value self.update = function () { self.shootTimer++; if (self.shootTimer >= self.shootInterval) { self.shoot(); self.shootTimer = 0; self.shootInterval = (180 + Math.random() * 120) * 0.5; } }; self.shoot = function () { var bullet = new EnemyBullet(); bullet.x = self.x; bullet.y = self.y + 20; enemyBullets.push(bullet); game.addChild(bullet); }; self.takeDamage = function (damage) { self.health -= damage * rhythmMultiplier; if (self.health <= 0) { self.destroy(); return true; } return false; }; 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 = 4; self.update = function () { self.y += self.speed; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 1.0 }); self.speed = 8; self.lives = 3; self.canShoot = true; self.shootCooldown = 0; self.update = function () { if (self.shootCooldown > 0) { self.shootCooldown--; if (self.shootCooldown <= 0) { self.canShoot = true; } } // Keep player within screen bounds if (self.x < 60) self.x = 60; if (self.x > 2048 - 60) self.x = 2048 - 60; }; self.shoot = function () { if (!self.canShoot) return false; self.canShoot = false; self.shootCooldown = 15; var bullet = new PlayerBullet(); bullet.x = self.x; bullet.y = self.y - 40; playerBullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); // Check if shooting in rhythm var timeSinceLastBeat = LK.ticks * 16.67 % beatInterval; var rhythmWindow = beatInterval * 0.15; if (timeSinceLastBeat < rhythmWindow || timeSinceLastBeat > beatInterval - rhythmWindow) { rhythmMultiplier = Math.min(rhythmMultiplier + 0.1, 2.0); LK.getSound('rhythmBonus').play(); } else { rhythmMultiplier = Math.max(rhythmMultiplier - 0.05, 1.0); } return true; }; 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 = -12; self.damage = 1; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000011 }); /**** * Game Code ****/ var player = game.addChild(new Player()); player.x = 1024; player.y = 2600; var playerBullets = []; var enemyBullets = []; var enemies = []; var currentWave = 1; var enemiesKilled = 0; var totalEnemiesInWave = 0; var waveStarted = false; var waveDelay = 0; var rhythmMultiplier = 1.0; var beatInterval = 500; // milliseconds var lastBeatTime = 0; var enemyFormationX = 0; var enemyFormationDirection = 1; var enemyDropDistance = 60; var shouldDropEnemies = false; // UI Elements var scoreTxt = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); scoreTxt.x = 20; scoreTxt.y = 20; LK.gui.topLeft.addChild(scoreTxt); var livesTxt = new Text2('Lives: 3', { size: 60, fill: 0xFFFFFF }); livesTxt.anchor.set(1, 0); livesTxt.x = -20; livesTxt.y = 20; LK.gui.topRight.addChild(livesTxt); var waveTxt = new Text2('Wave: 1', { size: 60, fill: 0xFFFFFF }); waveTxt.anchor.set(0.5, 0); waveTxt.x = 0; waveTxt.y = 20; LK.gui.top.addChild(waveTxt); var rhythmTxt = new Text2('Rhythm: 1.0x', { size: 50, fill: 0xFFFF00 }); rhythmTxt.anchor.set(0.5, 0); rhythmTxt.x = 0; rhythmTxt.y = 100; LK.gui.top.addChild(rhythmTxt); function createWave(waveNumber) { enemies = []; enemiesKilled = 0; var rows = 3 + Math.floor(waveNumber / 3); var cols = 8 + Math.floor(waveNumber / 2); totalEnemiesInWave = rows * cols; var startX = (2048 - cols * 100) / 2; var startY = 200; for (var row = 0; row < rows; row++) { for (var col = 0; col < cols; col++) { var enemy = new Enemy(); enemy.x = startX + col * 100; enemy.y = startY + row * 80; enemy.note = (row * cols + col) % 12; // Assign musical notes enemies.push(enemy); game.addChild(enemy); } } enemyFormationX = 0; enemyFormationDirection = 1; waveStarted = true; // Increase tempo with each wave beatInterval = Math.max(300, 500 - waveNumber * 20); } function updateEnemyFormation() { if (enemies.length === 0) return; var moveDistance = 2 + Math.floor(currentWave / 3); var shouldMove = LK.ticks % Math.max(1, 30 - currentWave * 2) === 0; if (shouldMove) { if (shouldDropEnemies) { // Drop enemies down for (var i = 0; i < enemies.length; i++) { enemies[i].y += enemyDropDistance; } shouldDropEnemies = false; } else { // Move enemies horizontally var hitEdge = false; for (var i = 0; i < enemies.length; i++) { enemies[i].x += moveDistance * enemyFormationDirection; if (enemies[i].x <= 50 || enemies[i].x >= 1998) { hitEdge = true; } } if (hitEdge) { enemyFormationDirection *= -1; shouldDropEnemies = true; } } } } function checkCollisions() { // Player bullets vs enemies for (var i = playerBullets.length - 1; i >= 0; i--) { var bullet = playerBullets[i]; var bulletHit = false; for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { if (enemy.takeDamage(bullet.damage)) { enemies.splice(j, 1); enemiesKilled++; var baseScore = 100 * Math.floor(rhythmMultiplier); LK.setScore(LK.getScore() + baseScore); LK.getSound('enemyHit').play(); LK.effects.flashObject(enemy, 0xffffff, 200); } bullet.destroy(); playerBullets.splice(i, 1); bulletHit = true; break; } } if (!bulletHit && bullet.y < -20) { bullet.destroy(); playerBullets.splice(i, 1); } } // Enemy bullets vs player for (var i = enemyBullets.length - 1; i >= 0; i--) { var bullet = enemyBullets[i]; if (bullet.intersects(player)) { player.lives--; bullet.destroy(); enemyBullets.splice(i, 1); LK.getSound('playerHit').play(); LK.effects.flashObject(player, 0xff0000, 500); if (player.lives <= 0) { LK.showGameOver(); return; } } else if (bullet.y > 2732) { bullet.destroy(); enemyBullets.splice(i, 1); } } // Check if enemies reached player for (var i = 0; i < enemies.length; i++) { if (enemies[i].y > 2500) { LK.showGameOver(); return; } } } function updateUI() { scoreTxt.setText('Score: ' + LK.getScore()); livesTxt.setText('Lives: ' + player.lives); waveTxt.setText('Wave: ' + currentWave); rhythmTxt.setText('Rhythm: ' + rhythmMultiplier.toFixed(1) + 'x'); // Color rhythm multiplier text based on value if (rhythmMultiplier > 1.5) { rhythmTxt.tint = 0x00ff00; } else if (rhythmMultiplier > 1.2) { rhythmTxt.tint = 0xffff00; } else { rhythmTxt.tint = 0xffffff; } } // Touch controls var dragStartX = 0; var isDragging = false; var lastTouchTime = 0; game.down = function (x, y, obj) { dragStartX = x; isDragging = true; var currentTime = Date.now(); if (currentTime - lastTouchTime < 300) { // Double tap to shoot player.shoot(); } lastTouchTime = currentTime; }; game.move = function (x, y, obj) { if (isDragging) { var deltaX = x - dragStartX; player.x += deltaX * 0.5; dragStartX = x; } }; game.up = function (x, y, obj) { isDragging = false; player.shoot(); }; // Start background music LK.playMusic('bgmusic'); // Initialize first wave createWave(currentWave); game.update = function () { updateEnemyFormation(); checkCollisions(); updateUI(); // Gradually decay rhythm multiplier rhythmMultiplier = Math.max(rhythmMultiplier - 0.001, 1.0); // Check if wave is complete if (enemies.length === 0 && waveStarted) { waveStarted = false; waveDelay = 120; // 2 second delay currentWave++; if (currentWave > 10) { LK.showYouWin(); return; } } // Start next wave after delay if (!waveStarted && waveDelay > 0) { waveDelay--; if (waveDelay <= 0) { createWave(currentWave); } } };
===================================================================
--- original.js
+++ change.js
@@ -13,17 +13,17 @@
anchorY: 0.5
});
self.health = 1;
self.shootTimer = 0;
- self.shootInterval = (180 + Math.random() * 120) * 0.25;
+ self.shootInterval = (180 + Math.random() * 120) * 0.5;
self.moveSpeed = 2;
self.note = 0; // Musical note value
self.update = function () {
self.shootTimer++;
if (self.shootTimer >= self.shootInterval) {
self.shoot();
self.shootTimer = 0;
- self.shootInterval = (180 + Math.random() * 120) * 0.25;
+ self.shootInterval = (180 + Math.random() * 120) * 0.5;
}
};
self.shoot = function () {
var bullet = new EnemyBullet();
nave espacial extraterrestre. In-Game asset. 2d. High contrast. No shadows
un bala lazer de nergia. In-Game asset. 2d. High contrast. No shadows
monster space ship. In-Game asset. 2d. High contrast. No shadows
una espada roja con destellos. In-Game asset. 2d. High contrast. No shadows
espada azul con destellos. In-Game asset. 2d. High contrast. No shadows
un rayo lazer con destellos de fuego alrededor. In-Game asset. 2d. High contrast. No shadows
rayo láser azul con fuego azul alrededor. In-Game asset. 2d. High contrast. No shadows
una esfera blanca con destellos con alas de angel a los lados. In-Game asset. 2d. High contrast. No shadows
una imagen que diga "start" en letras grandes con una fuente alusiva a lso que se usan en video juegos de color metal brillante. In-Game asset. 2d. High contrast. No shadows