Code edit (13 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
Starship Commander
User prompt
and you look like a spaceship
Initial prompt
a game with enemies, in space. you must shoot them. they have 3 health points. you deal 1 hp of damage and if they touch you, you lose and must restart
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Asteroid = Container.expand(function () {
var self = Container.call(this);
var asteroidGraphics = self.attachAsset('asteroid', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3 + Math.random() * 4;
self.rotationSpeed = (Math.random() - 0.5) * 0.1;
self.update = function () {
self.y += self.speed;
asteroidGraphics.rotation += self.rotationSpeed;
};
return self;
});
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.update = function () {
self.y += self.speed;
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2 + Math.random() * 3;
self.shootTimer = Math.floor(Math.random() * 120) + 60;
self.health = 1;
self.update = function () {
self.y += self.speed;
self.shootTimer--;
if (self.shootTimer <= 0 && self.y < 2500) {
self.shoot();
self.shootTimer = 60 + Math.floor(Math.random() * 60);
}
};
self.shoot = function () {
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 40;
enemyBullets.push(bullet);
game.addChild(bullet);
};
self.takeDamage = function () {
self.health--;
if (self.health <= 0) {
self.destroy();
LK.setScore(LK.getScore() + 10);
LK.getSound('enemyDestroy').play();
}
};
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.update = function () {
self.y += self.speed;
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerUpGraphics = self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.pulseTimer = 0;
self.update = function () {
self.y += self.speed;
self.pulseTimer += 0.1;
powerUpGraphics.scaleX = 1 + Math.sin(self.pulseTimer) * 0.3;
powerUpGraphics.scaleY = 1 + Math.sin(self.pulseTimer) * 0.3;
};
return self;
});
var Spaceship = Container.expand(function () {
var self = Container.call(this);
var spaceshipGraphics = self.attachAsset('spaceship', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 3;
self.fireRate = 15;
self.fireTimer = 0;
self.powerUpTimer = 0;
self.hasPowerUp = false;
self.update = function () {
if (self.fireTimer > 0) {
self.fireTimer--;
}
if (self.powerUpTimer > 0) {
self.powerUpTimer--;
spaceshipGraphics.tint = 0x00FFFF;
} else {
self.hasPowerUp = false;
spaceshipGraphics.tint = 0xFFFFFF;
}
};
self.shoot = function () {
if (self.fireTimer <= 0) {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y - 50;
bullets.push(bullet);
game.addChild(bullet);
self.fireTimer = self.hasPowerUp ? 5 : self.fireRate;
LK.getSound('shoot').play();
}
};
self.takeDamage = function () {
self.health--;
LK.effects.flashObject(self, 0xFF0000, 500);
if (self.health <= 0) {
LK.getSound('explosion').play();
LK.showGameOver();
}
};
self.applyPowerUp = function () {
self.hasPowerUp = true;
self.powerUpTimer = 300; // 5 seconds at 60fps
LK.getSound('powerUpCollect').play();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000011
});
/****
* Game Code
****/
// Game variables
var spaceship;
var enemies = [];
var asteroids = [];
var bullets = [];
var enemyBullets = [];
var powerUps = [];
var dragNode = null;
var spawnTimer = 0;
var waveTimer = 0;
var difficultyLevel = 1;
var lastSpaceshipX = 0;
var lastSpaceshipY = 0;
// UI Elements
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0, 0);
scoreText.x = 120;
scoreText.y = 50;
LK.gui.topLeft.addChild(scoreText);
var healthText = new Text2('Health: 3', {
size: 60,
fill: 0x00FF00
});
healthText.anchor.set(1, 0);
LK.gui.topRight.addChild(healthText);
// Initialize spaceship
spaceship = game.addChild(new Spaceship());
spaceship.x = 1024;
spaceship.y = 2400;
lastSpaceshipX = spaceship.x;
lastSpaceshipY = spaceship.y;
// Touch controls
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = Math.max(40, Math.min(2008, x));
dragNode.y = Math.max(100, Math.min(2632, y));
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
dragNode = spaceship;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Spawn functions
function spawnEnemy() {
var enemy = new Enemy();
enemy.x = Math.random() * 1800 + 124;
enemy.y = -80;
enemies.push(enemy);
game.addChild(enemy);
}
function spawnAsteroid() {
var asteroid = new Asteroid();
asteroid.x = Math.random() * 1800 + 124;
asteroid.y = -120;
asteroids.push(asteroid);
game.addChild(asteroid);
}
function spawnPowerUp() {
var powerUp = new PowerUp();
powerUp.x = Math.random() * 1800 + 124;
powerUp.y = -40;
powerUps.push(powerUp);
game.addChild(powerUp);
}
// Game update loop
game.update = function () {
// Update UI
scoreText.setText('Score: ' + LK.getScore());
healthText.setText('Health: ' + spaceship.health);
// Auto-shoot
spaceship.shoot();
// Spawn management
spawnTimer++;
waveTimer++;
if (waveTimer >= 1800) {
// Every 30 seconds increase difficulty
difficultyLevel++;
waveTimer = 0;
}
var spawnRate = Math.max(30, 90 - difficultyLevel * 5);
if (spawnTimer >= spawnRate) {
if (Math.random() < 0.7) {
spawnEnemy();
}
if (Math.random() < 0.4) {
spawnAsteroid();
}
if (Math.random() < 0.05) {
spawnPowerUp();
}
spawnTimer = 0;
}
// Check spaceship movement for collision detection
var spaceshipMoved = spaceship.x !== lastSpaceshipX || spaceship.y !== lastSpaceshipY;
lastSpaceshipX = spaceship.x;
lastSpaceshipY = spaceship.y;
// Update and check bullets
for (var i = bullets.length - 1; i >= 0; i--) {
var bullet = bullets[i];
if (bullet.y < -20) {
bullet.destroy();
bullets.splice(i, 1);
continue;
}
// Check bullet-enemy collisions
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
bullet.destroy();
bullets.splice(i, 1);
enemy.takeDamage();
if (enemy.health <= 0) {
enemies.splice(j, 1);
}
break;
}
}
}
// Update and check enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.y > 2752) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check enemy bullet-spaceship collision
if (bullet.intersects(spaceship)) {
bullet.destroy();
enemyBullets.splice(i, 1);
spaceship.takeDamage();
}
}
// Update and check enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (enemy.y > 2800) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Check enemy-spaceship collision
if (enemy.intersects(spaceship)) {
enemy.destroy();
enemies.splice(i, 1);
spaceship.takeDamage();
}
}
// Update and check asteroids
for (var i = asteroids.length - 1; i >= 0; i--) {
var asteroid = asteroids[i];
if (asteroid.y > 2800) {
asteroid.destroy();
asteroids.splice(i, 1);
continue;
}
// Check asteroid-spaceship collision
if (asteroid.intersects(spaceship)) {
asteroid.destroy();
asteroids.splice(i, 1);
spaceship.takeDamage();
}
// Check bullet-asteroid collisions
for (var j = bullets.length - 1; j >= 0; j--) {
var bullet = bullets[j];
if (bullet.intersects(asteroid)) {
bullet.destroy();
bullets.splice(j, 1);
asteroid.destroy();
asteroids.splice(i, 1);
LK.setScore(LK.getScore() + 5);
break;
}
}
}
// Update and check power-ups
for (var i = powerUps.length - 1; i >= 0; i--) {
var powerUp = powerUps[i];
if (powerUp.y > 2800) {
powerUp.destroy();
powerUps.splice(i, 1);
continue;
}
// Check power-up collection
if (powerUp.intersects(spaceship)) {
powerUp.destroy();
powerUps.splice(i, 1);
spaceship.applyPowerUp();
LK.setScore(LK.getScore() + 25);
}
}
};
// Start background music
LK.playMusic('spaceMusic'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,357 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Asteroid = Container.expand(function () {
+ var self = Container.call(this);
+ var asteroidGraphics = self.attachAsset('asteroid', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 3 + Math.random() * 4;
+ self.rotationSpeed = (Math.random() - 0.5) * 0.1;
+ self.update = function () {
+ self.y += self.speed;
+ asteroidGraphics.rotation += self.rotationSpeed;
+ };
+ return self;
+});
+var Bullet = Container.expand(function () {
+ var self = Container.call(this);
+ var bulletGraphics = self.attachAsset('bullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -12;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2 + Math.random() * 3;
+ self.shootTimer = Math.floor(Math.random() * 120) + 60;
+ self.health = 1;
+ self.update = function () {
+ self.y += self.speed;
+ self.shootTimer--;
+ if (self.shootTimer <= 0 && self.y < 2500) {
+ self.shoot();
+ self.shootTimer = 60 + Math.floor(Math.random() * 60);
+ }
+ };
+ self.shoot = function () {
+ var bullet = new EnemyBullet();
+ bullet.x = self.x;
+ bullet.y = self.y + 40;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+ };
+ self.takeDamage = function () {
+ self.health--;
+ if (self.health <= 0) {
+ self.destroy();
+ LK.setScore(LK.getScore() + 10);
+ LK.getSound('enemyDestroy').play();
+ }
+ };
+ 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.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var powerUpGraphics = self.attachAsset('powerUp', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 3;
+ self.pulseTimer = 0;
+ self.update = function () {
+ self.y += self.speed;
+ self.pulseTimer += 0.1;
+ powerUpGraphics.scaleX = 1 + Math.sin(self.pulseTimer) * 0.3;
+ powerUpGraphics.scaleY = 1 + Math.sin(self.pulseTimer) * 0.3;
+ };
+ return self;
+});
+var Spaceship = Container.expand(function () {
+ var self = Container.call(this);
+ var spaceshipGraphics = self.attachAsset('spaceship', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 3;
+ self.fireRate = 15;
+ self.fireTimer = 0;
+ self.powerUpTimer = 0;
+ self.hasPowerUp = false;
+ self.update = function () {
+ if (self.fireTimer > 0) {
+ self.fireTimer--;
+ }
+ if (self.powerUpTimer > 0) {
+ self.powerUpTimer--;
+ spaceshipGraphics.tint = 0x00FFFF;
+ } else {
+ self.hasPowerUp = false;
+ spaceshipGraphics.tint = 0xFFFFFF;
+ }
+ };
+ self.shoot = function () {
+ if (self.fireTimer <= 0) {
+ var bullet = new Bullet();
+ bullet.x = self.x;
+ bullet.y = self.y - 50;
+ bullets.push(bullet);
+ game.addChild(bullet);
+ self.fireTimer = self.hasPowerUp ? 5 : self.fireRate;
+ LK.getSound('shoot').play();
+ }
+ };
+ self.takeDamage = function () {
+ self.health--;
+ LK.effects.flashObject(self, 0xFF0000, 500);
+ if (self.health <= 0) {
+ LK.getSound('explosion').play();
+ LK.showGameOver();
+ }
+ };
+ self.applyPowerUp = function () {
+ self.hasPowerUp = true;
+ self.powerUpTimer = 300; // 5 seconds at 60fps
+ LK.getSound('powerUpCollect').play();
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x000011
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var spaceship;
+var enemies = [];
+var asteroids = [];
+var bullets = [];
+var enemyBullets = [];
+var powerUps = [];
+var dragNode = null;
+var spawnTimer = 0;
+var waveTimer = 0;
+var difficultyLevel = 1;
+var lastSpaceshipX = 0;
+var lastSpaceshipY = 0;
+// UI Elements
+var scoreText = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0, 0);
+scoreText.x = 120;
+scoreText.y = 50;
+LK.gui.topLeft.addChild(scoreText);
+var healthText = new Text2('Health: 3', {
+ size: 60,
+ fill: 0x00FF00
+});
+healthText.anchor.set(1, 0);
+LK.gui.topRight.addChild(healthText);
+// Initialize spaceship
+spaceship = game.addChild(new Spaceship());
+spaceship.x = 1024;
+spaceship.y = 2400;
+lastSpaceshipX = spaceship.x;
+lastSpaceshipY = spaceship.y;
+// Touch controls
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ dragNode.x = Math.max(40, Math.min(2008, x));
+ dragNode.y = Math.max(100, Math.min(2632, y));
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ dragNode = spaceship;
+ handleMove(x, y, obj);
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Spawn functions
+function spawnEnemy() {
+ var enemy = new Enemy();
+ enemy.x = Math.random() * 1800 + 124;
+ enemy.y = -80;
+ enemies.push(enemy);
+ game.addChild(enemy);
+}
+function spawnAsteroid() {
+ var asteroid = new Asteroid();
+ asteroid.x = Math.random() * 1800 + 124;
+ asteroid.y = -120;
+ asteroids.push(asteroid);
+ game.addChild(asteroid);
+}
+function spawnPowerUp() {
+ var powerUp = new PowerUp();
+ powerUp.x = Math.random() * 1800 + 124;
+ powerUp.y = -40;
+ powerUps.push(powerUp);
+ game.addChild(powerUp);
+}
+// Game update loop
+game.update = function () {
+ // Update UI
+ scoreText.setText('Score: ' + LK.getScore());
+ healthText.setText('Health: ' + spaceship.health);
+ // Auto-shoot
+ spaceship.shoot();
+ // Spawn management
+ spawnTimer++;
+ waveTimer++;
+ if (waveTimer >= 1800) {
+ // Every 30 seconds increase difficulty
+ difficultyLevel++;
+ waveTimer = 0;
+ }
+ var spawnRate = Math.max(30, 90 - difficultyLevel * 5);
+ if (spawnTimer >= spawnRate) {
+ if (Math.random() < 0.7) {
+ spawnEnemy();
+ }
+ if (Math.random() < 0.4) {
+ spawnAsteroid();
+ }
+ if (Math.random() < 0.05) {
+ spawnPowerUp();
+ }
+ spawnTimer = 0;
+ }
+ // Check spaceship movement for collision detection
+ var spaceshipMoved = spaceship.x !== lastSpaceshipX || spaceship.y !== lastSpaceshipY;
+ lastSpaceshipX = spaceship.x;
+ lastSpaceshipY = spaceship.y;
+ // Update and check bullets
+ for (var i = bullets.length - 1; i >= 0; i--) {
+ var bullet = bullets[i];
+ if (bullet.y < -20) {
+ bullet.destroy();
+ bullets.splice(i, 1);
+ continue;
+ }
+ // Check bullet-enemy collisions
+ for (var j = enemies.length - 1; j >= 0; j--) {
+ var enemy = enemies[j];
+ if (bullet.intersects(enemy)) {
+ bullet.destroy();
+ bullets.splice(i, 1);
+ enemy.takeDamage();
+ if (enemy.health <= 0) {
+ enemies.splice(j, 1);
+ }
+ break;
+ }
+ }
+ }
+ // Update and check enemy bullets
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ var bullet = enemyBullets[i];
+ if (bullet.y > 2752) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ // Check enemy bullet-spaceship collision
+ if (bullet.intersects(spaceship)) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ spaceship.takeDamage();
+ }
+ }
+ // Update and check enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ if (enemy.y > 2800) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ continue;
+ }
+ // Check enemy-spaceship collision
+ if (enemy.intersects(spaceship)) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ spaceship.takeDamage();
+ }
+ }
+ // Update and check asteroids
+ for (var i = asteroids.length - 1; i >= 0; i--) {
+ var asteroid = asteroids[i];
+ if (asteroid.y > 2800) {
+ asteroid.destroy();
+ asteroids.splice(i, 1);
+ continue;
+ }
+ // Check asteroid-spaceship collision
+ if (asteroid.intersects(spaceship)) {
+ asteroid.destroy();
+ asteroids.splice(i, 1);
+ spaceship.takeDamage();
+ }
+ // Check bullet-asteroid collisions
+ for (var j = bullets.length - 1; j >= 0; j--) {
+ var bullet = bullets[j];
+ if (bullet.intersects(asteroid)) {
+ bullet.destroy();
+ bullets.splice(j, 1);
+ asteroid.destroy();
+ asteroids.splice(i, 1);
+ LK.setScore(LK.getScore() + 5);
+ break;
+ }
+ }
+ }
+ // Update and check power-ups
+ for (var i = powerUps.length - 1; i >= 0; i--) {
+ var powerUp = powerUps[i];
+ if (powerUp.y > 2800) {
+ powerUp.destroy();
+ powerUps.splice(i, 1);
+ continue;
+ }
+ // Check power-up collection
+ if (powerUp.intersects(spaceship)) {
+ powerUp.destroy();
+ powerUps.splice(i, 1);
+ spaceship.applyPowerUp();
+ LK.setScore(LK.getScore() + 25);
+ }
+ }
+};
+// Start background music
+LK.playMusic('spaceMusic');
\ No newline at end of file