User prompt
Now make a shop button with items different ships and Upgrades ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
I CANT SHOOT
User prompt
Now the player can't shoot and there's no shop
User prompt
The enemies should be able to move left and right and make a shop with good ui and items
Code edit (1 edits merged)
Please save this source code
User prompt
Arcade Space Shooter
Initial prompt
Make a Spaceshooter game like one of those in a arcade
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.shootChance = 0.02;
self.health = 1;
self.update = function () {
self.y += self.speed;
};
self.takeDamage = function () {
self.health--;
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6;
self.update = function () {
self.y += self.speed;
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
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.speed = 15;
self.health = 1;
self.canShoot = true;
self.shootCooldown = 10;
self.update = function () {
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
self.shoot = function () {
if (self.canShoot && self.shootCooldown <= 0) {
self.shootCooldown = 10;
return true;
}
return false;
};
self.takeDamage = function () {
self.health--;
LK.effects.flashObject(self, 0xff0000, 200);
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000033
});
/****
* Game Code
****/
var player = null;
var playerBullets = [];
var enemies = [];
var enemyBullets = [];
var score = 0;
var wave = 1;
var waveTimer = 0;
var enemySpawnTimer = 0;
var enemySpawnRate = 120;
var difficultyMultiplier = 1;
var gameActive = true;
var dragNode = null;
// Create score display
var scoreText = new Text2('Score: 0', {
size: 80,
fill: '#ffffff'
});
scoreText.anchor.set(0, 0);
LK.gui.top.addChild(scoreText);
// Initialize player
player = game.addChild(new PlayerShip());
player.x = 2048 / 2;
player.y = 2500;
// Music
LK.playMusic('bgMusic', {
loop: true
});
// Game update loop
game.update = function () {
if (!gameActive) return;
// Update player
player.update();
// Spawn enemies in waves
waveTimer++;
enemySpawnTimer++;
if (enemySpawnTimer >= enemySpawnRate) {
var newEnemy = new Enemy();
newEnemy.x = Math.random() * 1800 + 124;
newEnemy.y = -50;
newEnemy.speed = 1.5 + wave * 0.3;
enemies.push(newEnemy);
game.addChild(newEnemy);
enemySpawnTimer = 0;
}
// Increase wave every 20 seconds
if (waveTimer >= 1200) {
wave++;
enemySpawnRate = Math.max(60, 120 - wave * 5);
waveTimer = 0;
}
// Update and manage player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
bullet.update();
// Remove bullet if off screen
if (bullet.y < -50) {
bullet.destroy();
playerBullets.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)) {
enemy.takeDamage();
bullet.destroy();
playerBullets.splice(i, 1);
if (enemy.health <= 0) {
LK.setScore(LK.getScore() + 10);
scoreText.setText('Score: ' + LK.getScore());
LK.getSound('enemyDestroyed').play();
enemy.destroy();
enemies.splice(j, 1);
}
break;
}
}
}
// Update and manage enemies
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
enemy.update();
// Remove enemy if off screen
if (enemy.y > 2800) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Enemy shoots
if (Math.random() < enemy.shootChance) {
var newEnemyBullet = new EnemyBullet();
newEnemyBullet.x = enemy.x;
newEnemyBullet.y = enemy.y;
enemyBullets.push(newEnemyBullet);
game.addChild(newEnemyBullet);
}
// Check enemy-player collision
if (enemy.intersects(player)) {
player.takeDamage();
LK.getSound('playerHit').play();
if (player.health <= 0) {
gameActive = false;
LK.effects.flashScreen(0xff0000, 500);
LK.showGameOver();
}
}
}
// Update and manage enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
bullet.update();
// Remove bullet if off screen
if (bullet.y > 2800) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check enemy bullet-player collision
if (bullet.intersects(player)) {
player.takeDamage();
bullet.destroy();
enemyBullets.splice(i, 1);
LK.getSound('playerHit').play();
if (player.health <= 0) {
gameActive = false;
LK.effects.flashScreen(0xff0000, 500);
LK.showGameOver();
}
}
}
};
// Handle player movement and shooting
function handleMove(x, y, obj) {
if (gameActive && dragNode) {
dragNode.x = Math.max(50, Math.min(1998, x));
dragNode.y = Math.max(2400, Math.min(2650, y));
}
// Auto shoot
if (gameActive && player.shoot()) {
var newBullet = new PlayerBullet();
newBullet.x = player.x;
newBullet.y = player.y - 40;
playerBullets.push(newBullet);
game.addChild(newBullet);
LK.getSound('playerShoot').play();
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
if (gameActive) {
dragNode = player;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
dragNode = null;
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,245 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ self.attachAsset('enemy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.shootChance = 0.02;
+ self.health = 1;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ self.takeDamage = function () {
+ self.health--;
+ };
+ return self;
+});
+var EnemyBullet = Container.expand(function () {
+ var self = Container.call(this);
+ self.attachAsset('enemyBullet', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 6;
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+var PlayerBullet = Container.expand(function () {
+ var self = Container.call(this);
+ 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.speed = 15;
+ self.health = 1;
+ self.canShoot = true;
+ self.shootCooldown = 10;
+ self.update = function () {
+ if (self.shootCooldown > 0) {
+ self.shootCooldown--;
+ }
+ };
+ self.shoot = function () {
+ if (self.canShoot && self.shootCooldown <= 0) {
+ self.shootCooldown = 10;
+ return true;
+ }
+ return false;
+ };
+ self.takeDamage = function () {
+ self.health--;
+ LK.effects.flashObject(self, 0xff0000, 200);
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x000033
+});
+
+/****
+* Game Code
+****/
+var player = null;
+var playerBullets = [];
+var enemies = [];
+var enemyBullets = [];
+var score = 0;
+var wave = 1;
+var waveTimer = 0;
+var enemySpawnTimer = 0;
+var enemySpawnRate = 120;
+var difficultyMultiplier = 1;
+var gameActive = true;
+var dragNode = null;
+// Create score display
+var scoreText = new Text2('Score: 0', {
+ size: 80,
+ fill: '#ffffff'
+});
+scoreText.anchor.set(0, 0);
+LK.gui.top.addChild(scoreText);
+// Initialize player
+player = game.addChild(new PlayerShip());
+player.x = 2048 / 2;
+player.y = 2500;
+// Music
+LK.playMusic('bgMusic', {
+ loop: true
+});
+// Game update loop
+game.update = function () {
+ if (!gameActive) return;
+ // Update player
+ player.update();
+ // Spawn enemies in waves
+ waveTimer++;
+ enemySpawnTimer++;
+ if (enemySpawnTimer >= enemySpawnRate) {
+ var newEnemy = new Enemy();
+ newEnemy.x = Math.random() * 1800 + 124;
+ newEnemy.y = -50;
+ newEnemy.speed = 1.5 + wave * 0.3;
+ enemies.push(newEnemy);
+ game.addChild(newEnemy);
+ enemySpawnTimer = 0;
+ }
+ // Increase wave every 20 seconds
+ if (waveTimer >= 1200) {
+ wave++;
+ enemySpawnRate = Math.max(60, 120 - wave * 5);
+ waveTimer = 0;
+ }
+ // Update and manage player bullets
+ for (var i = playerBullets.length - 1; i >= 0; i--) {
+ var bullet = playerBullets[i];
+ bullet.update();
+ // Remove bullet if off screen
+ if (bullet.y < -50) {
+ bullet.destroy();
+ playerBullets.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)) {
+ enemy.takeDamage();
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ if (enemy.health <= 0) {
+ LK.setScore(LK.getScore() + 10);
+ scoreText.setText('Score: ' + LK.getScore());
+ LK.getSound('enemyDestroyed').play();
+ enemy.destroy();
+ enemies.splice(j, 1);
+ }
+ break;
+ }
+ }
+ }
+ // Update and manage enemies
+ for (var i = enemies.length - 1; i >= 0; i--) {
+ var enemy = enemies[i];
+ enemy.update();
+ // Remove enemy if off screen
+ if (enemy.y > 2800) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ continue;
+ }
+ // Enemy shoots
+ if (Math.random() < enemy.shootChance) {
+ var newEnemyBullet = new EnemyBullet();
+ newEnemyBullet.x = enemy.x;
+ newEnemyBullet.y = enemy.y;
+ enemyBullets.push(newEnemyBullet);
+ game.addChild(newEnemyBullet);
+ }
+ // Check enemy-player collision
+ if (enemy.intersects(player)) {
+ player.takeDamage();
+ LK.getSound('playerHit').play();
+ if (player.health <= 0) {
+ gameActive = false;
+ LK.effects.flashScreen(0xff0000, 500);
+ LK.showGameOver();
+ }
+ }
+ }
+ // Update and manage enemy bullets
+ for (var i = enemyBullets.length - 1; i >= 0; i--) {
+ var bullet = enemyBullets[i];
+ bullet.update();
+ // Remove bullet if off screen
+ if (bullet.y > 2800) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ // Check enemy bullet-player collision
+ if (bullet.intersects(player)) {
+ player.takeDamage();
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ LK.getSound('playerHit').play();
+ if (player.health <= 0) {
+ gameActive = false;
+ LK.effects.flashScreen(0xff0000, 500);
+ LK.showGameOver();
+ }
+ }
+ }
+};
+// Handle player movement and shooting
+function handleMove(x, y, obj) {
+ if (gameActive && dragNode) {
+ dragNode.x = Math.max(50, Math.min(1998, x));
+ dragNode.y = Math.max(2400, Math.min(2650, y));
+ }
+ // Auto shoot
+ if (gameActive && player.shoot()) {
+ var newBullet = new PlayerBullet();
+ newBullet.x = player.x;
+ newBullet.y = player.y - 40;
+ playerBullets.push(newBullet);
+ game.addChild(newBullet);
+ LK.getSound('playerShoot').play();
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ if (gameActive) {
+ dragNode = player;
+ handleMove(x, y, obj);
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
\ No newline at end of file