User prompt
When the player drops a special bomb, it will directly find and destroy the nearest plane.
User prompt
Let the player drop special powerful bombs when he hits 5 fighter jets.
User prompt
when the game starts, the enemy planes will come vertically.
User prompt
when the game starts, the number of enemy planes will increase consecutively.
User prompt
enemy planes speed up every 30 seconds.
User prompt
put a time bar above the game screen.
User prompt
enemy planes speed up every minute.
User prompt
put an explosion effect when planes are destroyed ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
the player's airplane has a life bar and three hits ends the game.
Code edit (1 edits merged)
Please save this source code
User prompt
Sky Dogfight
Initial prompt
make a game where airplanes fight each other.
/****
* 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 EnemyPlane = Container.expand(function () {
var self = Container.call(this);
var planeGraphics = self.attachAsset('enemyPlane', {
anchorX: 0.5,
anchorY: 0.5
});
planeGraphics.rotation = Math.PI;
self.speed = 2;
self.direction = 1;
self.lastShot = 0;
self.shotInterval = 120; // 2 seconds at 60fps
self.health = 1;
self.update = function () {
// Move down slowly
self.y += self.speed;
// Side to side movement
self.x += self.direction * 1.5;
if (self.x <= 100 || self.x >= 1948) {
self.direction *= -1;
}
// Shooting logic
self.lastShot++;
if (self.lastShot >= self.shotInterval) {
self.shoot();
self.lastShot = 0;
}
};
self.shoot = function () {
if (self.parent) {
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 40;
bullet.lastY = bullet.y;
enemyBullets.push(bullet);
game.addChild(bullet);
LK.getSound('enemyShoot').play();
}
};
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 PlayerPlane = Container.expand(function () {
var self = Container.call(this);
var planeGraphics = self.attachAsset('playerPlane', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 3;
self.lastShot = 0;
self.shotCooldown = 10; // shots per second limit
self.shoot = function () {
if (self.lastShot <= 0) {
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();
self.lastShot = self.shotCooldown;
}
};
self.update = function () {
if (self.lastShot > 0) {
self.lastShot--;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game variables
var playerPlane;
var enemyPlanes = [];
var playerBullets = [];
var enemyBullets = [];
var enemySpawnTimer = 0;
var enemySpawnInterval = 180; // 3 seconds at 60fps
var difficultyTimer = 0;
var dragNode = null;
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Create player plane
playerPlane = game.addChild(new PlayerPlane());
playerPlane.x = 1024;
playerPlane.y = 2400;
// Game event handlers
function handleMove(x, y, obj) {
if (dragNode) {
// Keep player plane within screen bounds
dragNode.x = Math.max(60, Math.min(1988, x));
dragNode.y = Math.max(40, Math.min(2692, y));
}
}
game.move = handleMove;
game.down = function (x, y, obj) {
// Start dragging player plane
dragNode = playerPlane;
handleMove(x, y, obj);
// Shoot bullet
playerPlane.shoot();
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game update loop
game.update = function () {
// Update timers
enemySpawnTimer++;
difficultyTimer++;
// Increase difficulty over time
if (difficultyTimer % 1800 == 0) {
// Every 30 seconds
enemySpawnInterval = Math.max(60, enemySpawnInterval - 20);
}
// Spawn enemy planes
if (enemySpawnTimer >= enemySpawnInterval) {
var enemy = new EnemyPlane();
enemy.x = Math.random() * 1800 + 124;
enemy.y = -100;
enemy.lastY = enemy.y;
enemy.lastIntersecting = false;
enemyPlanes.push(enemy);
game.addChild(enemy);
enemySpawnTimer = 0;
}
// Update 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 >= -50 && bullet.y < -50) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check collision with enemy planes
var hitEnemy = false;
for (var j = enemyPlanes.length - 1; j >= 0; j--) {
var enemy = enemyPlanes[j];
if (bullet.intersects(enemy)) {
// Hit enemy
LK.setScore(LK.getScore() + 10);
scoreTxt.setText('Score: ' + LK.getScore());
// Destroy enemy
LK.effects.flashObject(enemy, 0xff0000, 300);
LK.getSound('explosion').play();
enemy.destroy();
enemyPlanes.splice(j, 1);
// Destroy bullet
bullet.destroy();
playerBullets.splice(i, 1);
hitEnemy = true;
break;
}
}
if (!hitEnemy) {
bullet.lastY = bullet.y;
}
}
// Update 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 <= 2782 && bullet.y > 2782) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(playerPlane)) {
// Player hit
LK.effects.flashScreen(0xff0000, 1000);
LK.getSound('explosion').play();
LK.showGameOver();
return;
}
bullet.lastY = bullet.y;
}
// Update enemy planes
for (var i = enemyPlanes.length - 1; i >= 0; i--) {
var enemy = enemyPlanes[i];
if (enemy.lastY === undefined) enemy.lastY = enemy.y;
// Remove enemies that go off screen
if (enemy.lastY <= 2782 && enemy.y > 2782) {
enemy.destroy();
enemyPlanes.splice(i, 1);
continue;
}
// Check collision with player
if (enemy.intersects(playerPlane)) {
// Player hit by enemy plane
LK.effects.flashScreen(0xff0000, 1000);
LK.getSound('explosion').play();
LK.showGameOver();
return;
}
enemy.lastY = enemy.y;
}
// Victory condition - survive for high score
if (LK.getScore() >= 500) {
LK.showYouWin();
}
};
// Start background music
LK.playMusic('bgmusic'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,252 @@
-/****
+/****
+* 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 EnemyPlane = Container.expand(function () {
+ var self = Container.call(this);
+ var planeGraphics = self.attachAsset('enemyPlane', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ planeGraphics.rotation = Math.PI;
+ self.speed = 2;
+ self.direction = 1;
+ self.lastShot = 0;
+ self.shotInterval = 120; // 2 seconds at 60fps
+ self.health = 1;
+ self.update = function () {
+ // Move down slowly
+ self.y += self.speed;
+ // Side to side movement
+ self.x += self.direction * 1.5;
+ if (self.x <= 100 || self.x >= 1948) {
+ self.direction *= -1;
+ }
+ // Shooting logic
+ self.lastShot++;
+ if (self.lastShot >= self.shotInterval) {
+ self.shoot();
+ self.lastShot = 0;
+ }
+ };
+ self.shoot = function () {
+ if (self.parent) {
+ var bullet = new EnemyBullet();
+ bullet.x = self.x;
+ bullet.y = self.y + 40;
+ bullet.lastY = bullet.y;
+ enemyBullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('enemyShoot').play();
+ }
+ };
+ 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 PlayerPlane = Container.expand(function () {
+ var self = Container.call(this);
+ var planeGraphics = self.attachAsset('playerPlane', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.health = 3;
+ self.lastShot = 0;
+ self.shotCooldown = 10; // shots per second limit
+ self.shoot = function () {
+ if (self.lastShot <= 0) {
+ 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();
+ self.lastShot = self.shotCooldown;
+ }
+ };
+ self.update = function () {
+ if (self.lastShot > 0) {
+ self.lastShot--;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var playerPlane;
+var enemyPlanes = [];
+var playerBullets = [];
+var enemyBullets = [];
+var enemySpawnTimer = 0;
+var enemySpawnInterval = 180; // 3 seconds at 60fps
+var difficultyTimer = 0;
+var dragNode = null;
+// Create score display
+var scoreTxt = new Text2('Score: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Create player plane
+playerPlane = game.addChild(new PlayerPlane());
+playerPlane.x = 1024;
+playerPlane.y = 2400;
+// Game event handlers
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ // Keep player plane within screen bounds
+ dragNode.x = Math.max(60, Math.min(1988, x));
+ dragNode.y = Math.max(40, Math.min(2692, y));
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ // Start dragging player plane
+ dragNode = playerPlane;
+ handleMove(x, y, obj);
+ // Shoot bullet
+ playerPlane.shoot();
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Main game update loop
+game.update = function () {
+ // Update timers
+ enemySpawnTimer++;
+ difficultyTimer++;
+ // Increase difficulty over time
+ if (difficultyTimer % 1800 == 0) {
+ // Every 30 seconds
+ enemySpawnInterval = Math.max(60, enemySpawnInterval - 20);
+ }
+ // Spawn enemy planes
+ if (enemySpawnTimer >= enemySpawnInterval) {
+ var enemy = new EnemyPlane();
+ enemy.x = Math.random() * 1800 + 124;
+ enemy.y = -100;
+ enemy.lastY = enemy.y;
+ enemy.lastIntersecting = false;
+ enemyPlanes.push(enemy);
+ game.addChild(enemy);
+ enemySpawnTimer = 0;
+ }
+ // Update 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 >= -50 && bullet.y < -50) {
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with enemy planes
+ var hitEnemy = false;
+ for (var j = enemyPlanes.length - 1; j >= 0; j--) {
+ var enemy = enemyPlanes[j];
+ if (bullet.intersects(enemy)) {
+ // Hit enemy
+ LK.setScore(LK.getScore() + 10);
+ scoreTxt.setText('Score: ' + LK.getScore());
+ // Destroy enemy
+ LK.effects.flashObject(enemy, 0xff0000, 300);
+ LK.getSound('explosion').play();
+ enemy.destroy();
+ enemyPlanes.splice(j, 1);
+ // Destroy bullet
+ bullet.destroy();
+ playerBullets.splice(i, 1);
+ hitEnemy = true;
+ break;
+ }
+ }
+ if (!hitEnemy) {
+ bullet.lastY = bullet.y;
+ }
+ }
+ // Update 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 <= 2782 && bullet.y > 2782) {
+ bullet.destroy();
+ enemyBullets.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (bullet.intersects(playerPlane)) {
+ // Player hit
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.getSound('explosion').play();
+ LK.showGameOver();
+ return;
+ }
+ bullet.lastY = bullet.y;
+ }
+ // Update enemy planes
+ for (var i = enemyPlanes.length - 1; i >= 0; i--) {
+ var enemy = enemyPlanes[i];
+ if (enemy.lastY === undefined) enemy.lastY = enemy.y;
+ // Remove enemies that go off screen
+ if (enemy.lastY <= 2782 && enemy.y > 2782) {
+ enemy.destroy();
+ enemyPlanes.splice(i, 1);
+ continue;
+ }
+ // Check collision with player
+ if (enemy.intersects(playerPlane)) {
+ // Player hit by enemy plane
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.getSound('explosion').play();
+ LK.showGameOver();
+ return;
+ }
+ enemy.lastY = enemy.y;
+ }
+ // Victory condition - survive for high score
+ if (LK.getScore() >= 500) {
+ LK.showYouWin();
+ }
+};
+// Start background music
+LK.playMusic('bgmusic');
\ No newline at end of file