/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.shootTimer = 0;
self.shootDelay = 120 + Math.random() * 120; // Random shoot delay
self.update = function () {
self.y += self.speed;
// Enemy shooting logic
self.shootTimer++;
if (self.shootTimer >= self.shootDelay && self.y > 100 && self.y < 2500) {
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 30;
enemyBullets.push(bullet);
game.addChild(bullet);
self.shootTimer = 0;
self.shootDelay = 60 + Math.random() * 180;
}
};
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 Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.shootTimer = 0;
self.shootDelay = 15; // Auto-fire rate
self.update = function () {
// Auto-fire bullets
self.shootTimer++;
if (self.shootTimer >= self.shootDelay) {
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
self.shootTimer = 0;
}
};
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;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000033
});
/****
* Game Code
****/
// Game variables
var player;
var enemies = [];
var playerBullets = [];
var enemyBullets = [];
var enemySpawnTimer = 0;
var enemySpawnDelay = 60;
var waveNumber = 1;
var difficultyTimer = 0;
var dragNode = null;
// Initialize score display
var scoreTxt = new Text2('0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Initialize wave display
var waveTxt = new Text2('Wave 1', {
size: 40,
fill: 0xFFFF00
});
waveTxt.anchor.set(1, 0);
waveTxt.x = -20;
waveTxt.y = 20;
LK.gui.topRight.addChild(waveTxt);
// Create player
player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 - 150;
// Game input handling
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = Math.max(40, Math.min(2048 - 40, x));
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
dragNode = player;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game update loop
game.update = function () {
// Update difficulty over time
difficultyTimer++;
if (difficultyTimer >= 1800) {
// Every 30 seconds at 60fps
waveNumber++;
waveTxt.setText('Wave ' + waveNumber);
enemySpawnDelay = Math.max(20, enemySpawnDelay - 5);
difficultyTimer = 0;
}
// Spawn enemies
enemySpawnTimer++;
if (enemySpawnTimer >= enemySpawnDelay) {
var enemy = new Enemy();
enemy.x = 100 + Math.random() * (2048 - 200);
enemy.y = -50;
enemy.speed = 1 + waveNumber * 0.3 + Math.random() * 2;
enemies.push(enemy);
game.addChild(enemy);
enemySpawnTimer = 0;
}
// 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 >= -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)) {
// Destroy both bullet and enemy
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore().toString());
LK.getSound('enemyHit').play();
bullet.destroy();
playerBullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
hitEnemy = true;
break;
}
}
if (hitEnemy) continue;
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 <= 2762 && bullet.y > 2762) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
LK.getSound('playerHit').play();
LK.effects.flashScreen(0xff0000, 1000);
// Save high score
var currentScore = LK.getScore();
var highScore = storage.highScore || 0;
if (currentScore > highScore) {
storage.highScore = currentScore;
}
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 <= 2762 && enemy.y > 2762) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
LK.getSound('playerHit').play();
LK.effects.flashScreen(0xff0000, 1000);
// Save high score
var currentScore = LK.getScore();
var highScore = storage.highScore || 0;
if (currentScore > highScore) {
storage.highScore = currentScore;
}
LK.showGameOver();
return;
}
enemy.lastY = enemy.y;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,239 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var Enemy = Container.expand(function () {
+ var self = Container.call(this);
+ var enemyGraphics = self.attachAsset('enemyShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 2;
+ self.shootTimer = 0;
+ self.shootDelay = 120 + Math.random() * 120; // Random shoot delay
+ self.update = function () {
+ self.y += self.speed;
+ // Enemy shooting logic
+ self.shootTimer++;
+ if (self.shootTimer >= self.shootDelay && self.y > 100 && self.y < 2500) {
+ var bullet = new EnemyBullet();
+ bullet.x = self.x;
+ bullet.y = self.y + 30;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+ self.shootTimer = 0;
+ self.shootDelay = 60 + Math.random() * 180;
+ }
+ };
+ 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 Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('playerShip', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.shootTimer = 0;
+ self.shootDelay = 15; // Auto-fire rate
+ self.update = function () {
+ // Auto-fire bullets
+ self.shootTimer++;
+ if (self.shootTimer >= self.shootDelay) {
+ var bullet = new PlayerBullet();
+ bullet.x = self.x;
+ bullet.y = self.y - 40;
+ playerBullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('shoot').play();
+ self.shootTimer = 0;
+ }
+ };
+ 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;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x000033
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var player;
+var enemies = [];
+var playerBullets = [];
+var enemyBullets = [];
+var enemySpawnTimer = 0;
+var enemySpawnDelay = 60;
+var waveNumber = 1;
+var difficultyTimer = 0;
+var dragNode = null;
+// Initialize score display
+var scoreTxt = new Text2('0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Initialize wave display
+var waveTxt = new Text2('Wave 1', {
+ size: 40,
+ fill: 0xFFFF00
+});
+waveTxt.anchor.set(1, 0);
+waveTxt.x = -20;
+waveTxt.y = 20;
+LK.gui.topRight.addChild(waveTxt);
+// Create player
+player = game.addChild(new Player());
+player.x = 2048 / 2;
+player.y = 2732 - 150;
+// Game input handling
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ dragNode.x = Math.max(40, Math.min(2048 - 40, x));
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ dragNode = player;
+ handleMove(x, y, obj);
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Main game update loop
+game.update = function () {
+ // Update difficulty over time
+ difficultyTimer++;
+ if (difficultyTimer >= 1800) {
+ // Every 30 seconds at 60fps
+ waveNumber++;
+ waveTxt.setText('Wave ' + waveNumber);
+ enemySpawnDelay = Math.max(20, enemySpawnDelay - 5);
+ difficultyTimer = 0;
+ }
+ // Spawn enemies
+ enemySpawnTimer++;
+ if (enemySpawnTimer >= enemySpawnDelay) {
+ var enemy = new Enemy();
+ enemy.x = 100 + Math.random() * (2048 - 200);
+ enemy.y = -50;
+ enemy.speed = 1 + waveNumber * 0.3 + Math.random() * 2;
+ enemies.push(enemy);
+ game.addChild(enemy);
+ enemySpawnTimer = 0;
+ }
+ // 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 >= -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)) {
+ // Destroy both bullet and enemy
+ LK.setScore(LK.getScore() + 10);
+ scoreTxt.setText(LK.getScore().toString());
+ LK.getSound('enemyHit').play();
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ enemy.destroy();
+ enemies.splice(j, 1);
+ hitEnemy = true;
+ break;
+ }
+ }
+ if (hitEnemy) continue;
+ 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 <= 2762 && bullet.y > 2762) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (bullet.intersects(player)) {
+ LK.getSound('playerHit').play();
+ LK.effects.flashScreen(0xff0000, 1000);
+ // Save high score
+ var currentScore = LK.getScore();
+ var highScore = storage.highScore || 0;
+ if (currentScore > highScore) {
+ storage.highScore = currentScore;
+ }
+ 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 <= 2762 && enemy.y > 2762) {
+ enemy.destroy();
+ enemies.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (enemy.intersects(player)) {
+ LK.getSound('playerHit').play();
+ LK.effects.flashScreen(0xff0000, 1000);
+ // Save high score
+ var currentScore = LK.getScore();
+ var highScore = storage.highScore || 0;
+ if (currentScore > highScore) {
+ storage.highScore = currentScore;
+ }
+ LK.showGameOver();
+ return;
+ }
+ enemy.lastY = enemy.y;
+ }
+};
\ No newline at end of file
a spaceship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a blue shield. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Bomb shaped spaceship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a spaceship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
spaceship. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a spaceship carrier from upside perspective. In-Game asset. 2d. High contrast. No shadows
pixelart heart. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
3 dot lines , aqua colour. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
a 2D small space warship. In-Game asset. 2d. High contrast. No shadows
space theme background with stars and planets that are too far away,realistic. In-Game asset. 2d. High contrast. No shadows