User prompt
Skoten ska bara koma från planet
User prompt
Spelaren ska bara kunna vara på buren av skärmen
User prompt
Blå bakgrund med moln
User prompt
Skur hela tiden
User prompt
Kan du göra så att det fins fienden och en spelare
User prompt
Radera spelet
User prompt
När man dubbelklickar så skuts misilen
User prompt
Gör så att nosen spånar på 25 dödade fiender
User prompt
Gör så att bara bossen har misilern
User prompt
Gör så att man kan duka misilerna
User prompt
Sakta ner misiler
User prompt
Kan du göra så att visa fienden har missiler
User prompt
Kan du göra så att man kan sluta misilerna
User prompt
Kan du göra så att efter man har fått dödat 10 fienden så kan får man en missil och vidare
Code edit (1 edits merged)
Please save this source code
User prompt
Air Combat Squadron
Initial prompt
Kan du göra ett spel där man är ett militär plan och ska ta synder fiende miltär flyg plan
/****
* 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 EnemyJet = Container.expand(function () {
var self = Container.call(this);
var jetGraphics = self.attachAsset('enemyJet', {
anchorX: 0.5,
anchorY: 0.5
});
jetGraphics.rotation = Math.PI;
self.speed = 3;
self.health = 1;
self.lastShot = 0;
self.shootInterval = 90;
self.update = function () {
self.y += self.speed;
// Enemy shooting logic
self.lastShot++;
if (self.lastShot >= self.shootInterval && self.y > 100 && self.y < 2500) {
self.lastShot = 0;
var newBullet = new EnemyBullet();
newBullet.x = self.x;
newBullet.y = self.y + 40;
enemyBullets.push(newBullet);
game.addChild(newBullet);
}
};
return self;
});
var Missile = Container.expand(function () {
var self = Container.call(this);
var missileGraphics = self.attachAsset('missile', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -8;
self.target = null;
self.homingStrength = 0.1;
self.update = function () {
// Find closest enemy if no target or target is destroyed
if (!self.target || self.target.destroyed) {
var closestDistance = Infinity;
self.target = null;
for (var i = 0; i < enemies.length; i++) {
var enemy = enemies[i];
var distance = Math.sqrt(Math.pow(enemy.x - self.x, 2) + Math.pow(enemy.y - self.y, 2));
if (distance < closestDistance) {
closestDistance = distance;
self.target = enemy;
}
}
}
// Homing behavior
if (self.target && !self.target.destroyed) {
var dx = self.target.x - self.x;
var dy = self.target.y - self.y;
self.x += dx * self.homingStrength;
self.y += dy * self.homingStrength;
}
self.y += 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 PlayerJet = Container.expand(function () {
var self = Container.call(this);
var jetGraphics = self.attachAsset('playerJet', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 3;
self.lastShot = 0;
self.shootInterval = 15;
self.update = function () {
// Auto shooting
self.lastShot++;
if (self.lastShot >= self.shootInterval) {
self.lastShot = 0;
var newBullet = new PlayerBullet();
newBullet.x = self.x;
newBullet.y = self.y - 50;
playerBullets.push(newBullet);
game.addChild(newBullet);
LK.getSound('shoot').play();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a237e
});
/****
* Game Code
****/
var player = game.addChild(new PlayerJet());
player.x = 1024;
player.y = 2400;
var enemies = [];
var playerBullets = [];
var enemyBullets = [];
var missiles = [];
var enemySpawnTimer = 0;
var waveLevel = 1;
var dragNode = null;
var enemiesKilled = 0;
var missileCount = 0;
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var healthTxt = new Text2('Health: 3', {
size: 60,
fill: 0xFF4444
});
healthTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(healthTxt);
var missileTxt = new Text2('Missiles: 0', {
size: 60,
fill: 0xFF9500
});
missileTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(missileTxt);
missileTxt.x = 120;
function spawnEnemy() {
var enemy = new EnemyJet();
enemy.x = Math.random() * 1800 + 124;
enemy.y = -100;
enemy.speed = 2 + Math.random() * 3 + waveLevel * 0.5;
enemy.shootInterval = Math.max(60, 120 - waveLevel * 5);
enemies.push(enemy);
game.addChild(enemy);
}
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = Math.max(60, Math.min(1988, x));
dragNode.y = Math.max(100, Math.min(2632, y));
}
}
var lastTapTime = 0;
var tapThreshold = 300;
var isReloading = false;
var reloadTime = 2000; // 2 seconds reload time
var reloadStartTime = 0;
game.move = handleMove;
game.down = function (x, y, obj) {
var currentTime = Date.now();
if (currentTime - lastTapTime < tapThreshold) {
// Double tap detected
if (missileCount > 0 && !isReloading) {
// Fire missile
var newMissile = new Missile();
newMissile.x = player.x;
newMissile.y = player.y - 50;
missiles.push(newMissile);
game.addChild(newMissile);
missileCount--;
missileTxt.setText('Missiles: ' + missileCount);
LK.getSound('missileShoot').play();
} else if (missileCount === 0 && !isReloading) {
// Start reload
isReloading = true;
reloadStartTime = currentTime;
missileTxt.setText('Missiles: Reloading...');
LK.effects.flashScreen(0x0088ff, 300);
}
lastTapTime = 0;
} else {
lastTapTime = currentTime;
dragNode = player;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
// Handle missile reload
if (isReloading) {
var currentTime = Date.now();
if (currentTime - reloadStartTime >= reloadTime) {
isReloading = false;
missileCount = 1;
missileTxt.setText('Missiles: ' + missileCount);
LK.effects.flashScreen(0x00ff00, 300);
}
}
// Spawn enemies
enemySpawnTimer++;
var spawnRate = Math.max(30, 90 - waveLevel * 5);
if (enemySpawnTimer >= spawnRate) {
enemySpawnTimer = 0;
spawnEnemy();
// Increase difficulty every 10 enemies spawned
if (LK.ticks % 600 === 0) {
waveLevel++;
}
}
// 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.y < -50) {
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 hit
LK.setScore(LK.getScore() + 100);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('enemyHit').play();
// Track enemy kills for missile unlock
enemiesKilled++;
if (enemiesKilled % 10 === 0) {
missileCount++;
missileTxt.setText('Missiles: ' + missileCount);
LK.effects.flashScreen(0x00ff00, 500);
}
// Remove enemy and bullet
enemy.destroy();
enemies.splice(j, 1);
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.y > 2800) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
player.health--;
healthTxt.setText('Health: ' + player.health);
LK.getSound('explosion').play();
LK.effects.flashObject(player, 0xff0000, 500);
bullet.destroy();
enemyBullets.splice(i, 1);
if (player.health <= 0) {
LK.showGameOver();
return;
}
continue;
}
bullet.lastY = bullet.y;
}
// Update 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.y > 2800) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
player.health--;
healthTxt.setText('Health: ' + player.health);
LK.getSound('explosion').play();
LK.effects.flashObject(player, 0xff0000, 500);
enemy.destroy();
enemies.splice(i, 1);
if (player.health <= 0) {
LK.showGameOver();
return;
}
continue;
}
enemy.lastY = enemy.y;
}
// Update missiles
for (var i = missiles.length - 1; i >= 0; i--) {
var missile = missiles[i];
if (missile.lastY === undefined) missile.lastY = missile.y;
// Remove missiles that go off screen
if (missile.y < -50) {
missile.destroy();
missiles.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 (missile.intersects(enemy)) {
// Enemy hit by missile
LK.setScore(LK.getScore() + 200);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('enemyHit').play();
// Track enemy kills for missile unlock
enemiesKilled++;
if (enemiesKilled % 10 === 0) {
missileCount++;
missileTxt.setText('Missiles: ' + missileCount);
LK.effects.flashScreen(0x00ff00, 500);
}
// Remove enemy and missile
enemy.destroy();
enemies.splice(j, 1);
missile.destroy();
missiles.splice(i, 1);
hitEnemy = true;
break;
}
}
if (!hitEnemy) {
missile.lastY = missile.y;
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -172,21 +172,33 @@
}
}
var lastTapTime = 0;
var tapThreshold = 300;
+var isReloading = false;
+var reloadTime = 2000; // 2 seconds reload time
+var reloadStartTime = 0;
game.move = handleMove;
game.down = function (x, y, obj) {
var currentTime = Date.now();
- if (currentTime - lastTapTime < tapThreshold && missileCount > 0) {
- // Double tap detected - fire missile
- var newMissile = new Missile();
- newMissile.x = player.x;
- newMissile.y = player.y - 50;
- missiles.push(newMissile);
- game.addChild(newMissile);
- missileCount--;
- missileTxt.setText('Missiles: ' + missileCount);
- LK.getSound('missileShoot').play();
+ if (currentTime - lastTapTime < tapThreshold) {
+ // Double tap detected
+ if (missileCount > 0 && !isReloading) {
+ // Fire missile
+ var newMissile = new Missile();
+ newMissile.x = player.x;
+ newMissile.y = player.y - 50;
+ missiles.push(newMissile);
+ game.addChild(newMissile);
+ missileCount--;
+ missileTxt.setText('Missiles: ' + missileCount);
+ LK.getSound('missileShoot').play();
+ } else if (missileCount === 0 && !isReloading) {
+ // Start reload
+ isReloading = true;
+ reloadStartTime = currentTime;
+ missileTxt.setText('Missiles: Reloading...');
+ LK.effects.flashScreen(0x0088ff, 300);
+ }
lastTapTime = 0;
} else {
lastTapTime = currentTime;
dragNode = player;
@@ -196,8 +208,18 @@
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
+ // Handle missile reload
+ if (isReloading) {
+ var currentTime = Date.now();
+ if (currentTime - reloadStartTime >= reloadTime) {
+ isReloading = false;
+ missileCount = 1;
+ missileTxt.setText('Missiles: ' + missileCount);
+ LK.effects.flashScreen(0x00ff00, 300);
+ }
+ }
// Spawn enemies
enemySpawnTimer++;
var spawnRate = Math.max(30, 90 - waveLevel * 5);
if (enemySpawnTimer >= spawnRate) {
Moln. In-Game asset. 2d. High contrast. No shadows
Moln. In-Game asset. 2d. High contrast. No shadows
Misil rikdad upp. In-Game asset. 2d. High contrast. No shadows
F-22 upp ifrån. In-Game asset. 2d. High contrast. No shadows
SR-71 uppifrån. In-Game asset. 2d. High contrast. No shadows
B-2 uppifrån. In-Game asset. 2d. High contrast. No shadows
Explosion. In-Game asset. 2d. High contrast. No shadows
A-10 uppifrån. In-Game asset. 2d. High contrast. No shadows