User prompt
Let my plane move back and forth and I'll fire.
User prompt
Let the enemy bullets pass through the air
User prompt
UFOs explode when they die ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
When enemy bullets do not hit me, they will be deleted from the screen.
User prompt
I'll shoot
User prompt
Let them shoot as I destroy
User prompt
If the enemy bullets do not hit me, let it be destroyed.
User prompt
Let the enemy move to the right and left above
Code edit (1 edits merged)
Please save this source code
User prompt
Sky Invasion Defense
Initial prompt
Let the spaceship and the UAVs coming out of it appear above and the war machine fire at the bottom.
/****
* 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 = 6;
self.targetX = 0;
self.targetY = 0;
self.setTarget = function (x, y) {
self.targetX = x;
self.targetY = y;
};
self.update = function () {
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
};
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 PlayerTank = Container.expand(function () {
var self = Container.call(this);
var tankGraphics = self.attachAsset('playerTank', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.fireRate = 15;
self.fireTimer = 0;
self.update = function () {
if (self.fireTimer > 0) {
self.fireTimer--;
}
};
self.canFire = function () {
return self.fireTimer <= 0;
};
self.fire = function () {
if (self.canFire()) {
self.fireTimer = self.fireRate;
return true;
}
return false;
};
return self;
});
var Spaceship = Container.expand(function () {
var self = Container.call(this);
var spaceshipGraphics = self.attachAsset('spaceship', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.direction = 1;
self.deployTimer = 0;
self.deployRate = 180;
self.movePattern = Math.random() < 0.5 ? 'horizontal' : 'diagonal';
self.update = function () {
if (self.movePattern === 'horizontal') {
self.x += self.speed * self.direction;
if (self.x > 1900 || self.x < 148) {
self.direction *= -1;
}
} else {
self.x += self.speed * self.direction;
self.y += self.speed * 0.5;
if (self.x > 1900 || self.x < 148) {
self.direction *= -1;
}
}
self.deployTimer++;
if (self.deployTimer >= self.deployRate) {
self.deployTimer = 0;
return true;
}
return false;
};
return self;
});
var UAV = Container.expand(function () {
var self = Container.call(this);
var uavGraphics = self.attachAsset('uav', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.targetX = 0;
self.targetY = 0;
self.setTarget = function (x, y) {
self.targetX = x;
self.targetY = y;
};
self.update = function () {
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000033
});
/****
* Game Code
****/
var player = new PlayerTank();
player.x = 1024;
player.y = 2600;
game.addChild(player);
var playerBullets = [];
var spaceships = [];
var uavs = [];
var enemyBullets = [];
var spawnTimer = 0;
var spawnRate = 120;
var difficultyTimer = 0;
var enemyFireTimer = 0;
var enemyFireRate = 90;
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var dragActive = false;
function updateScore() {
scoreTxt.setText('Score: ' + LK.getScore());
}
function spawnSpaceship() {
var spaceship = new Spaceship();
spaceship.x = Math.random() * 1800 + 124;
spaceship.y = -50;
spaceships.push(spaceship);
game.addChild(spaceship);
}
function deployUAV(fromX, fromY) {
var uav = new UAV();
uav.x = fromX;
uav.y = fromY;
uav.setTarget(player.x, player.y);
uavs.push(uav);
game.addChild(uav);
LK.getSound('uavDeploy').play();
}
function fireEnemyBullet(fromX, fromY) {
var bullet = new EnemyBullet();
bullet.x = fromX;
bullet.y = fromY;
bullet.setTarget(player.x, player.y);
enemyBullets.push(bullet);
game.addChild(bullet);
}
game.down = function (x, y, obj) {
dragActive = true;
player.x = x;
if (player.x < 60) player.x = 60;
if (player.x > 1988) player.x = 1988;
// Fire bullet when touching screen
if (player.fire()) {
var bullet = new PlayerBullet();
bullet.x = player.x;
bullet.y = player.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('playerShoot').play();
}
};
game.move = function (x, y, obj) {
if (dragActive) {
player.x = x;
if (player.x < 60) player.x = 60;
if (player.x > 1988) player.x = 1988;
}
};
game.up = function (x, y, obj) {
dragActive = false;
};
game.update = function () {
// Spawn spaceships
spawnTimer++;
if (spawnTimer >= spawnRate) {
spawnTimer = 0;
spawnSpaceship();
}
// Increase difficulty over time
difficultyTimer++;
if (difficultyTimer >= 1800) {
// Every 30 seconds
difficultyTimer = 0;
if (spawnRate > 60) {
spawnRate -= 10;
}
if (enemyFireRate > 45) {
enemyFireRate -= 5;
}
}
// Player auto-fire
if (player.fire()) {
var bullet = new PlayerBullet();
bullet.x = player.x;
bullet.y = player.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('playerShoot').play();
}
// Enemy firing
enemyFireTimer++;
if (enemyFireTimer >= enemyFireRate) {
enemyFireTimer = 0;
if (spaceships.length > 0) {
var randomSpaceship = spaceships[Math.floor(Math.random() * spaceships.length)];
fireEnemyBullet(randomSpaceship.x, randomSpaceship.y);
}
}
// Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.lastY === undefined) bullet.lastY = bullet.y;
if (bullet.lastY >= -20 && bullet.y < -20) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
bullet.lastY = bullet.y;
}
// Update spaceships
for (var j = spaceships.length - 1; j >= 0; j--) {
var spaceship = spaceships[j];
if (spaceship.lastY === undefined) spaceship.lastY = spaceship.y;
var shouldDeploy = spaceship.update();
if (shouldDeploy) {
deployUAV(spaceship.x, spaceship.y);
}
if (spaceship.lastY < 2732 && spaceship.y >= 2732) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
spaceship.lastY = spaceship.y;
}
// Update UAVs
for (var k = uavs.length - 1; k >= 0; k--) {
var uav = uavs[k];
if (uav.lastY === undefined) uav.lastY = uav.y;
if (uav.lastY < 2732 && uav.y >= 2732) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
uav.lastY = uav.y;
}
// Update enemy bullets
for (var l = enemyBullets.length - 1; l >= 0; l--) {
var enemyBullet = enemyBullets[l];
if (enemyBullet.lastY === undefined) enemyBullet.lastY = enemyBullet.y;
if (enemyBullet.lastX === undefined) enemyBullet.lastX = enemyBullet.x;
// Destroy bullet if it goes off-screen (bottom, left, or right)
if (enemyBullet.lastY < 2732 && enemyBullet.y >= 2732) {
enemyBullet.destroy();
enemyBullets.splice(l, 1);
continue;
}
// Destroy bullet if it goes off-screen (left side)
if (enemyBullet.lastX >= 0 && enemyBullet.x < 0) {
enemyBullet.destroy();
enemyBullets.splice(l, 1);
continue;
}
// Destroy bullet if it goes off-screen (right side)
if (enemyBullet.lastX <= 2048 && enemyBullet.x > 2048) {
enemyBullet.destroy();
enemyBullets.splice(l, 1);
continue;
}
enemyBullet.lastY = enemyBullet.y;
enemyBullet.lastX = enemyBullet.x;
}
// Collision detection - Player bullets vs Spaceships
for (var m = playerBullets.length - 1; m >= 0; m--) {
var pBullet = playerBullets[m];
for (var n = spaceships.length - 1; n >= 0; n--) {
var ship = spaceships[n];
if (pBullet.intersects(ship)) {
// Fire multiple bullets when spaceship is destroyed
for (var fireCount = 0; fireCount < 3; fireCount++) {
fireEnemyBullet(ship.x + (fireCount - 1) * 20, ship.y);
}
LK.setScore(LK.getScore() + 100);
updateScore();
LK.getSound('enemyDestroy').play();
LK.effects.flashObject(ship, 0xffff00, 200);
pBullet.destroy();
playerBullets.splice(m, 1);
ship.destroy();
spaceships.splice(n, 1);
break;
}
}
}
// Collision detection - Player bullets vs UAVs
for (var o = playerBullets.length - 1; o >= 0; o--) {
var pBullet2 = playerBullets[o];
for (var p = uavs.length - 1; p >= 0; p--) {
var uav2 = uavs[p];
if (pBullet2.intersects(uav2)) {
// Fire a bullet when UAV is destroyed
fireEnemyBullet(uav2.x, uav2.y);
LK.setScore(LK.getScore() + 50);
updateScore();
LK.getSound('enemyDestroy').play();
LK.effects.flashObject(uav2, 0xffff00, 200);
pBullet2.destroy();
playerBullets.splice(o, 1);
uav2.destroy();
uavs.splice(p, 1);
break;
}
}
}
// Collision detection - Enemy bullets vs Player
for (var q = enemyBullets.length - 1; q >= 0; q--) {
var eBullet = enemyBullets[q];
if (eBullet.intersects(player)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
// Collision detection - UAVs vs Player
for (var r = uavs.length - 1; r >= 0; r--) {
var uav3 = uavs[r];
if (uav3.intersects(player)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
// Collision detection - Spaceships vs Player
for (var s = spaceships.length - 1; s >= 0; s--) {
var ship2 = spaceships[s];
if (ship2.intersects(player)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
return;
}
}
};
LK.playMusic('battleMusic'); ===================================================================
--- original.js
+++ change.js
@@ -187,8 +187,17 @@
dragActive = true;
player.x = x;
if (player.x < 60) player.x = 60;
if (player.x > 1988) player.x = 1988;
+ // Fire bullet when touching screen
+ if (player.fire()) {
+ var bullet = new PlayerBullet();
+ bullet.x = player.x;
+ bullet.y = player.y - 40;
+ playerBullets.push(bullet);
+ game.addChild(bullet);
+ LK.getSound('playerShoot').play();
+ }
};
game.move = function (x, y, obj) {
if (dragActive) {
player.x = x;