User prompt
make 5 lives for you spaceship person
User prompt
make so not just all enemies are bombing and center everything
User prompt
generate a game sound and make the enemies are different colors of blue, red, green, and yellow and home screen for adjusting the Game Settings by the player speed-adjusts the speed of 1x to 12x by shooting, and the enemies-adjusts the bombing rate and speed of 1x to 12x ↪💡 Consider importing and using the following plugins: @upit/storage.v1
Code edit (1 edits merged)
Please save this source code
User prompt
SPACE GALAGA
Initial prompt
Generate a game called SPACE GALAGA a game of Galaga
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Enemy = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.formationX = 0; self.formationY = 0; self.isDiving = false; self.diveSpeed = 4; self.moveSpeed = 2; self.shootTimer = 0; self.shootDelay = Math.random() * 120 + 60; self.update = function () { if (self.isDiving) { self.y += self.diveSpeed; self.x += Math.sin(self.y * 0.02) * 3; } else { // Formation movement var targetX = self.formationX + Math.sin(LK.ticks * 0.02) * 50; var targetY = self.formationY + Math.sin(LK.ticks * 0.01) * 20; self.x += (targetX - self.x) * 0.1; self.y += (targetY - self.y) * 0.1; } // Shooting logic self.shootTimer++; if (self.shootTimer >= self.shootDelay) { self.shootTimer = 0; self.shootDelay = Math.random() * 180 + 90; var bullet = new EnemyBullet(); bullet.x = self.x; bullet.y = self.y + 30; bullet.lastY = bullet.y; enemyBullets.push(bullet); game.addChild(bullet); } // Random dive attack if (!self.isDiving && Math.random() < 0.001) { self.isDiving = true; self.shootDelay = 30; // Shoot more frequently when diving } }; return self; }); var EnemyBullet = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('enemyBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 8; self.update = function () { self.y += self.speed; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('playerShip', { anchorX: 0.5, anchorY: 0.5 }); self.shootTimer = 0; self.shootDelay = 15; self.isDead = false; self.update = function () { if (self.isDead) return; self.shootTimer++; if (self.shootTimer >= self.shootDelay && isShooting) { self.shootTimer = 0; var bullet = new PlayerBullet(); bullet.x = self.x; bullet.y = self.y - 30; bullet.lastY = bullet.y; playerBullets.push(bullet); game.addChild(bullet); LK.getSound('shoot').play(); } }; return self; }); var PlayerBullet = Container.expand(function () { var self = Container.call(this); var graphics = self.attachAsset('playerBullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -12; self.update = function () { self.y += self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000011 }); /**** * Game Code ****/ var player; var enemies = []; var playerBullets = []; var enemyBullets = []; var dragNode = null; var isShooting = false; var waveTimer = 0; var waveDelay = 300; var currentWave = 1; var gameSpeed = 1; // Create score display var scoreTxt = new Text2('0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Create wave indicator var waveTxt = new Text2('WAVE 1', { size: 60, fill: 0x00FFFF }); waveTxt.anchor.set(0, 0); waveTxt.x = 50; waveTxt.y = 50; LK.gui.topLeft.addChild(waveTxt); // Initialize player player = new Player(); player.x = 1024; player.y = 2500; game.addChild(player); function spawnEnemyWave() { var enemiesPerRow = 8; var rows = 4; var startX = 200; var startY = 200; var spacingX = 200; var spacingY = 120; for (var row = 0; row < rows; row++) { for (var col = 0; col < enemiesPerRow; col++) { var enemy = new Enemy(); enemy.x = startX + col * spacingX; enemy.y = startY + row * spacingY; enemy.formationX = enemy.x; enemy.formationY = enemy.y; enemies.push(enemy); game.addChild(enemy); } } } function handleMove(x, y, obj) { if (dragNode && !player.isDead) { dragNode.x = Math.max(40, Math.min(2008, x)); } } game.move = handleMove; game.down = function (x, y, obj) { if (!player.isDead) { dragNode = player; isShooting = true; handleMove(x, y, obj); } }; game.up = function (x, y, obj) { dragNode = null; isShooting = false; }; // Spawn initial wave spawnEnemyWave(); game.update = function () { if (player.isDead) return; // Update wave timer waveTimer++; // Check if all enemies are destroyed if (enemies.length === 0) { if (waveTimer >= waveDelay) { currentWave++; gameSpeed += 0.2; waveTimer = 0; waveTxt.setText('WAVE ' + currentWave); spawnEnemyWave(); } } // Handle player bullets for (var i = playerBullets.length - 1; i >= 0; i--) { var bullet = playerBullets[i]; if (bullet.lastY === undefined) bullet.lastY = bullet.y; // Remove bullets that go off screen if (bullet.lastY >= -30 && bullet.y < -30) { bullet.destroy(); playerBullets.splice(i, 1); continue; } // Check collision with enemies var hitEnemy = false; for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { // Award more points for diving enemies var points = enemy.isDiving ? 200 : 100; LK.setScore(LK.getScore() + points); scoreTxt.setText(LK.getScore()); LK.getSound('enemyHit').play(); LK.effects.flashObject(enemy, 0xffffff, 200); enemy.destroy(); enemies.splice(j, 1); bullet.destroy(); playerBullets.splice(i, 1); hitEnemy = true; break; } } if (!hitEnemy) { bullet.lastY = bullet.y; } } // Handle enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { var bullet = enemyBullets[i]; if (bullet.lastY === undefined) bullet.lastY = bullet.y; // Remove bullets that go off screen if (bullet.lastY <= 2762 && bullet.y > 2762) { bullet.destroy(); enemyBullets.splice(i, 1); continue; } // Check collision with player if (bullet.intersects(player) && !player.isDead) { player.isDead = true; LK.getSound('playerHit').play(); LK.effects.flashScreen(0xff0000, 1000); tween(player, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { LK.showGameOver(); } }); bullet.destroy(); enemyBullets.splice(i, 1); continue; } bullet.lastY = bullet.y; } // Remove enemies that fly off screen during dive attacks for (var i = enemies.length - 1; i >= 0; i--) { var enemy = enemies[i]; if (enemy.isDiving && enemy.y > 2800) { enemy.destroy(); enemies.splice(i, 1); } } // Check if player collides with any enemy if (!player.isDead) { for (var i = 0; i < enemies.length; i++) { var enemy = enemies[i]; if (player.intersects(enemy)) { player.isDead = true; LK.getSound('playerHit').play(); LK.effects.flashScreen(0xff0000, 1000); tween(player, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { LK.showGameOver(); } }); break; } } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,286 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.formationX = 0;
+ self.formationY = 0;
+ self.isDiving = false;
+ self.diveSpeed = 4;
+ self.moveSpeed = 2;
+ self.shootTimer = 0;
+ self.shootDelay = Math.random() * 120 + 60;
+ self.update = function () {
+ if (self.isDiving) {
+ self.y += self.diveSpeed;
+ self.x += Math.sin(self.y * 0.02) * 3;
+ } else {
+ // Formation movement
+ var targetX = self.formationX + Math.sin(LK.ticks * 0.02) * 50;
+ var targetY = self.formationY + Math.sin(LK.ticks * 0.01) * 20;
+ self.x += (targetX - self.x) * 0.1;
+ self.y += (targetY - self.y) * 0.1;
+ }
+ // Shooting logic
+ self.shootTimer++;
+ if (self.shootTimer >= self.shootDelay) {
+ self.shootTimer = 0;
+ self.shootDelay = Math.random() * 180 + 90;
+ var bullet = new EnemyBullet();
+ bullet.x = self.x;
+ bullet.y = self.y + 30;
+ bullet.lastY = bullet.y;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+ }
+ // Random dive attack
+ if (!self.isDiving && Math.random() < 0.001) {
+ self.isDiving = true;
+ self.shootDelay = 30; // Shoot more frequently when diving
+ }
+ };
+ return self;
+});
+var EnemyBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('enemyBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 8;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('playerShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.shootTimer = 0;
+ self.shootDelay = 15;
+ self.isDead = false;
+ self.update = function () {
+ if (self.isDead) return;
+ self.shootTimer++;
+ if (self.shootTimer >= self.shootDelay && isShooting) {
+ self.shootTimer = 0;
+ var bullet = new PlayerBullet();
+ bullet.x = self.x;
+ bullet.y = self.y - 30;
+ bullet.lastY = bullet.y;
+ playerBullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('shoot').play();
+ }
+ };
+ return self;
+});
+var PlayerBullet = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('playerBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -12;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x000011
+});
+
+/****
+* Game Code
+****/
+var player;
+var enemies = [];
+var playerBullets = [];
+var enemyBullets = [];
+var dragNode = null;
+var isShooting = false;
+var waveTimer = 0;
+var waveDelay = 300;
+var currentWave = 1;
+var gameSpeed = 1;
+// Create score display
+var scoreTxt = new Text2('0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Create wave indicator
+var waveTxt = new Text2('WAVE 1', {
+ size: 60,
+ fill: 0x00FFFF
+});
+waveTxt.anchor.set(0, 0);
+waveTxt.x = 50;
+waveTxt.y = 50;
+LK.gui.topLeft.addChild(waveTxt);
+// Initialize player
+player = new Player();
+player.x = 1024;
+player.y = 2500;
+game.addChild(player);
+function spawnEnemyWave() {
+ var enemiesPerRow = 8;
+ var rows = 4;
+ var startX = 200;
+ var startY = 200;
+ var spacingX = 200;
+ var spacingY = 120;
+ for (var row = 0; row < rows; row++) {
+ for (var col = 0; col < enemiesPerRow; col++) {
+ var enemy = new Enemy();
+ enemy.x = startX + col * spacingX;
+ enemy.y = startY + row * spacingY;
+ enemy.formationX = enemy.x;
+ enemy.formationY = enemy.y;
+ enemies.push(enemy);
+ game.addChild(enemy);
+ }
+ }
+}
+function handleMove(x, y, obj) {
+ if (dragNode && !player.isDead) {
+ dragNode.x = Math.max(40, Math.min(2008, x));
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ if (!player.isDead) {
+ dragNode = player;
+ isShooting = true;
+ handleMove(x, y, obj);
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+ isShooting = false;
+};
+// Spawn initial wave
+spawnEnemyWave();
+game.update = function () {
+ if (player.isDead) return;
+ // Update wave timer
+ waveTimer++;
+ // Check if all enemies are destroyed
+ if (enemies.length === 0) {
+ if (waveTimer >= waveDelay) {
+ currentWave++;
+ gameSpeed += 0.2;
+ waveTimer = 0;
+ waveTxt.setText('WAVE ' + currentWave);
+ spawnEnemyWave();
+ }
+ }
+ // Handle player bullets
+ for (var i = playerBullets.length - 1; i >= 0; i--) {
+ var bullet = playerBullets[i];
+ if (bullet.lastY === undefined) bullet.lastY = bullet.y;
+ // Remove bullets that go off screen
+ if (bullet.lastY >= -30 && bullet.y < -30) {
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with enemies
+ var hitEnemy = false;
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ var enemy = enemies[j];
+ if (bullet.intersects(enemy)) {
+ // Award more points for diving enemies
+ var points = enemy.isDiving ? 200 : 100;
+ LK.setScore(LK.getScore() + points);
+ scoreTxt.setText(LK.getScore());
+ LK.getSound('enemyHit').play();
+ LK.effects.flashObject(enemy, 0xffffff, 200);
+ enemy.destroy();
+ enemies.splice(j, 1);
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ hitEnemy = true;
+ break;
+ }
+ }
+ if (!hitEnemy) {
+ bullet.lastY = bullet.y;
+ }
+ }
+ // Handle enemy bullets
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ var bullet = enemyBullets[i];
+ if (bullet.lastY === undefined) bullet.lastY = bullet.y;
+ // Remove bullets that go off screen
+ if (bullet.lastY <= 2762 && bullet.y > 2762) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (bullet.intersects(player) && !player.isDead) {
+ player.isDead = true;
+ LK.getSound('playerHit').play();
+ LK.effects.flashScreen(0xff0000, 1000);
+ tween(player, {
+ alpha: 0
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ LK.showGameOver();
+ }
+ });
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ bullet.lastY = bullet.y;
+ }
+ // Remove enemies that fly off screen during dive attacks
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ if (enemy.isDiving && enemy.y > 2800) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ }
+ }
+ // Check if player collides with any enemy
+ if (!player.isDead) {
+ for (var i = 0; i < enemies.length; i++) {
+ var enemy = enemies[i];
+ if (player.intersects(enemy)) {
+ player.isDead = true;
+ LK.getSound('playerHit').play();
+ LK.effects.flashScreen(0xff0000, 1000);
+ tween(player, {
+ alpha: 0
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ LK.showGameOver();
+ }
+ });
+ break;
+ }
+ }
+ }
+};
\ No newline at end of file