User prompt
Let’s make the main ship be controlled by a stick attached to it
User prompt
Remove remove the joystick and make it touch control
User prompt
Increase joystick sensitivity
User prompt
Move the joystick up by eight pixels
User prompt
Make the joystick larger
User prompt
Move the joystick to the right bottom corner
User prompt
Let’s make the ship use a joystick in the bottom left corner of the screen
User prompt
Change the name to space invaders 2.0
User prompt
Let’s make it so that you can see the visible shield around your ship ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Let’s make temporary upgrades for your ship ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Let’s make the ships more realistic, but still 16 bit
Code edit (1 edits merged)
Please save this source code
User prompt
Space Squadron
Initial prompt
It is a game in witch you play as a space ship and have to shoot down other ships
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
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 EnemyShip = Container.expand(function () {
var self = Container.call(this);
var shipGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.health = 1;
self.shootTimer = 0;
self.shootInterval = 60 + Math.random() * 120; // Random shooting interval
self.update = function () {
self.y += self.speed;
// Enemy shooting logic
self.shootTimer++;
if (self.shootTimer >= self.shootInterval) {
self.shootTimer = 0;
self.shootInterval = 60 + Math.random() * 120; // Reset with new random interval
// Create enemy bullet
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 40;
bullet.lastY = bullet.y;
enemyBullets.push(bullet);
game.addChild(bullet);
}
};
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.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.shootTimer = 0;
self.shootInterval = 15; // Shoot every 15 ticks (4 times per second)
self.update = function () {
// Auto-shooting logic
self.shootTimer++;
if (self.shootTimer >= self.shootInterval) {
self.shootTimer = 0;
// Create player bullet
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 50;
bullet.lastY = bullet.y;
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000011
});
/****
* Game Code
****/
// Game variables
var playerBullets = [];
var enemyBullets = [];
var enemies = [];
var enemySpawnTimer = 0;
var enemySpawnInterval = 120; // Start with 2 seconds between spawns
var dragNode = null;
var difficultyTimer = 0;
// Create player ship
var player = game.addChild(new PlayerShip());
player.x = 1024; // Center horizontally
player.y = 2400; // Near bottom of screen
// Create score display
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.setText(LK.getScore());
// Touch/drag controls
function handleMove(x, y, obj) {
if (dragNode) {
// Keep player within screen bounds
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 = player;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
// Update difficulty over time
difficultyTimer++;
if (difficultyTimer % 600 == 0) {
// Every 10 seconds
enemySpawnInterval = Math.max(30, enemySpawnInterval - 10); // Faster spawning, minimum 0.5 seconds
}
// Spawn enemies
enemySpawnTimer++;
if (enemySpawnTimer >= enemySpawnInterval) {
enemySpawnTimer = 0;
var enemy = new EnemyShip();
enemy.x = 100 + Math.random() * 1848; // Random x position within screen
enemy.y = -50; // Start above screen
enemy.lastY = enemy.y;
enemy.speed = 2 + Math.random() * 3 + LK.getScore() / 50; // Increase speed with score
enemies.push(enemy);
game.addChild(enemy);
}
// Update and check 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 >= -25 && bullet.y < -25) {
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)) {
// Enemy destroyed
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore());
// Visual effect
LK.effects.flashObject(enemy, 0xffffff, 200);
// Clean up
bullet.destroy();
enemy.destroy();
playerBullets.splice(i, 1);
enemies.splice(j, 1);
LK.getSound('enemyDestroy').play();
hitEnemy = true;
break;
}
}
if (!hitEnemy) {
bullet.lastY = bullet.y;
}
}
// Update and check 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 <= 2757 && bullet.y > 2757) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.getSound('playerHit').play();
LK.showGameOver();
return;
}
bullet.lastY = bullet.y;
}
// Update and check enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (enemy.lastY === undefined) enemy.lastY = enemy.y;
// Remove enemies that go off screen
if (enemy.lastY <= 2757 && enemy.y > 2757) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.getSound('playerHit').play();
LK.showGameOver();
return;
}
enemy.lastY = enemy.y;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,224 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+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 EnemyShip = Container.expand(function () {
+ var self = Container.call(this);
+ var shipGraphics = self.attachAsset('enemyShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 3;
+ self.health = 1;
+ self.shootTimer = 0;
+ self.shootInterval = 60 + Math.random() * 120; // Random shooting interval
+ self.update = function () {
+ self.y += self.speed;
+ // Enemy shooting logic
+ self.shootTimer++;
+ if (self.shootTimer >= self.shootInterval) {
+ self.shootTimer = 0;
+ self.shootInterval = 60 + Math.random() * 120; // Reset with new random interval
+ // Create enemy bullet
+ var bullet = new EnemyBullet();
+ bullet.x = self.x;
+ bullet.y = self.y + 40;
+ bullet.lastY = bullet.y;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+ }
+ };
+ 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.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.shootTimer = 0;
+ self.shootInterval = 15; // Shoot every 15 ticks (4 times per second)
+ self.update = function () {
+ // Auto-shooting logic
+ self.shootTimer++;
+ if (self.shootTimer >= self.shootInterval) {
+ self.shootTimer = 0;
+ // Create player bullet
+ var bullet = new PlayerBullet();
+ bullet.x = self.x;
+ bullet.y = self.y - 50;
+ bullet.lastY = bullet.y;
+ playerBullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('shoot').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 playerBullets = [];
+var enemyBullets = [];
+var enemies = [];
+var enemySpawnTimer = 0;
+var enemySpawnInterval = 120; // Start with 2 seconds between spawns
+var dragNode = null;
+var difficultyTimer = 0;
+// Create player ship
+var player = game.addChild(new PlayerShip());
+player.x = 1024; // Center horizontally
+player.y = 2400; // Near bottom of screen
+// Create score display
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+scoreTxt.setText(LK.getScore());
+// Touch/drag controls
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ // Keep player within screen bounds
+ 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 = player;
+ handleMove(x, y, obj);
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+game.update = function () {
+ // Update difficulty over time
+ difficultyTimer++;
+ if (difficultyTimer % 600 == 0) {
+ // Every 10 seconds
+ enemySpawnInterval = Math.max(30, enemySpawnInterval - 10); // Faster spawning, minimum 0.5 seconds
+ }
+ // Spawn enemies
+ enemySpawnTimer++;
+ if (enemySpawnTimer >= enemySpawnInterval) {
+ enemySpawnTimer = 0;
+ var enemy = new EnemyShip();
+ enemy.x = 100 + Math.random() * 1848; // Random x position within screen
+ enemy.y = -50; // Start above screen
+ enemy.lastY = enemy.y;
+ enemy.speed = 2 + Math.random() * 3 + LK.getScore() / 50; // Increase speed with score
+ enemies.push(enemy);
+ game.addChild(enemy);
+ }
+ // Update and check 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 >= -25 && bullet.y < -25) {
+ 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)) {
+ // Enemy destroyed
+ LK.setScore(LK.getScore() + 10);
+ scoreTxt.setText(LK.getScore());
+ // Visual effect
+ LK.effects.flashObject(enemy, 0xffffff, 200);
+ // Clean up
+ bullet.destroy();
+ enemy.destroy();
+ playerBullets.splice(i, 1);
+ enemies.splice(j, 1);
+ LK.getSound('enemyDestroy').play();
+ hitEnemy = true;
+ break;
+ }
+ }
+ if (!hitEnemy) {
+ bullet.lastY = bullet.y;
+ }
+ }
+ // Update and check 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 <= 2757 && bullet.y > 2757) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (bullet.intersects(player)) {
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.getSound('playerHit').play();
+ LK.showGameOver();
+ return;
+ }
+ bullet.lastY = bullet.y;
+ }
+ // Update and check enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ if (enemy.lastY === undefined) enemy.lastY = enemy.y;
+ // Remove enemies that go off screen
+ if (enemy.lastY <= 2757 && enemy.y > 2757) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (enemy.intersects(player)) {
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.getSound('playerHit').play();
+ LK.showGameOver();
+ return;
+ }
+ enemy.lastY = enemy.y;
+ }
+};
\ No newline at end of file