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 Boss = Container.expand(function () {
var self = Container.call(this);
var bossGraphics = self.attachAsset('enemyJet', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 2
});
bossGraphics.rotation = Math.PI;
self.speed = 1;
self.health = 10;
self.lastShot = 0;
self.shootInterval = 60;
self.update = function () {
self.y += self.speed;
// Boss shooting logic - only missiles
self.lastShot++;
if (self.lastShot >= self.shootInterval && self.y > 100 && self.y < 2500) {
self.lastShot = 0;
var newMissile = new EnemyMissile();
newMissile.x = self.x;
newMissile.y = self.y + 70;
enemyMissiles.push(newMissile);
game.addChild(newMissile);
}
};
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 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 - only bullets
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 EnemyMissile = Container.expand(function () {
var self = Container.call(this);
var missileGraphics = self.attachAsset('enemyMissile', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.homingStrength = 0.04;
self.update = function () {
// Homing behavior targeting player
if (player && !player.destroyed) {
var dx = player.x - self.x;
var dy = player.y - self.y;
self.x += dx * self.homingStrength;
self.y += dy * self.homingStrength;
}
self.y += self.speed;
};
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 = -5;
self.target = null;
self.homingStrength = 0.06;
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 bosses = [];
var playerBullets = [];
var enemyBullets = [];
var enemyMissiles = [];
var missiles = [];
var enemySpawnTimer = 0;
var bossSpawnTimer = 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;
var dodgeTxt = new Text2('Dodge: Ready', {
size: 60,
fill: 0x00ff88
});
dodgeTxt.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(dodgeTxt);
dodgeTxt.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 spawnBoss() {
var boss = new Boss();
boss.x = Math.random() * 1600 + 224;
boss.y = -200;
boss.speed = 1 + waveLevel * 0.2;
boss.shootInterval = Math.max(40, 80 - waveLevel * 3);
bosses.push(boss);
game.addChild(boss);
}
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;
var isDodging = false;
var dodgeTime = 500; // 0.5 seconds dodge duration
var dodgeStartTime = 0;
var dodgeCooldown = 1500; // 1.5 seconds cooldown
var lastDodgeTime = 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 {
// Single tap - check for dodge
if (!isDodging && currentTime - lastDodgeTime >= dodgeCooldown) {
// Activate dodge
isDodging = true;
dodgeStartTime = currentTime;
lastDodgeTime = currentTime;
dodgeTxt.setText('Dodge: Active');
dodgeTxt.fill = 0xffff00;
LK.effects.flashObject(player, 0x00ffff, dodgeTime);
player.alpha = 0.5; // Make player semi-transparent during dodge
}
lastTapTime = currentTime;
dragNode = player;
handleMove(x, y, obj);
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.update = function () {
var currentTime = Date.now();
// Handle missile reload
if (isReloading) {
if (currentTime - reloadStartTime >= reloadTime) {
isReloading = false;
missileCount = 1;
missileTxt.setText('Missiles: ' + missileCount);
LK.effects.flashScreen(0x00ff00, 300);
}
}
// Handle dodge system
if (isDodging) {
if (currentTime - dodgeStartTime >= dodgeTime) {
isDodging = false;
player.alpha = 1.0; // Restore full opacity
dodgeTxt.setText('Dodge: Cooldown');
dodgeTxt.fill = 0xff4444;
}
} else if (currentTime - lastDodgeTime >= dodgeCooldown) {
dodgeTxt.setText('Dodge: Ready');
dodgeTxt.fill = 0x00ff88;
}
// 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++;
}
}
// Spawn bosses when 25 enemies killed
if (enemiesKilled >= 25 && bosses.length === 0) {
spawnBoss();
}
// 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;
}
}
// Check collision with bosses
if (!hitEnemy) {
for (var j = bosses.length - 1; j >= 0; j--) {
var boss = bosses[j];
if (bullet.intersects(boss)) {
// Boss hit
boss.health--;
LK.setScore(LK.getScore() + 50);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('enemyHit').play();
LK.effects.flashObject(boss, 0xff0000, 200);
bullet.destroy();
playerBullets.splice(i, 1);
hitEnemy = true;
if (boss.health <= 0) {
// Boss defeated
LK.setScore(LK.getScore() + 1000);
scoreTxt.setText('Score: ' + LK.getScore());
enemiesKilled += 5;
if (enemiesKilled % 10 === 0) {
missileCount++;
missileTxt.setText('Missiles: ' + missileCount);
LK.effects.flashScreen(0x00ff00, 500);
}
boss.destroy();
bosses.splice(j, 1);
}
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 bosses
for (var i = bosses.length - 1; i >= 0; i--) {
var boss = bosses[i];
if (boss.lastY === undefined) boss.lastY = boss.y;
// Remove bosses that go off screen
if (boss.y > 2800) {
boss.destroy();
bosses.splice(i, 1);
continue;
}
// Check collision with player
if (boss.intersects(player)) {
player.health -= 2; // Boss collision does more damage
healthTxt.setText('Health: ' + player.health);
LK.getSound('explosion').play();
LK.effects.flashObject(player, 0xff0000, 500);
boss.destroy();
bosses.splice(i, 1);
if (player.health <= 0) {
LK.showGameOver();
return;
}
continue;
}
boss.lastY = boss.y;
}
// Update enemy missiles
for (var i = enemyMissiles.length - 1; i >= 0; i--) {
var missile = enemyMissiles[i];
if (missile.lastY === undefined) missile.lastY = missile.y;
// Remove missiles that go off screen
if (missile.y > 2800) {
missile.destroy();
enemyMissiles.splice(i, 1);
continue;
}
// Check collision with player
if (missile.intersects(player) && !isDodging) {
player.health -= 2; // Enemy missiles do more damage
healthTxt.setText('Health: ' + player.health);
LK.getSound('explosion').play();
LK.effects.flashObject(player, 0xff0000, 800);
missile.destroy();
enemyMissiles.splice(i, 1);
if (player.health <= 0) {
LK.showGameOver();
return;
}
continue;
} else if (missile.intersects(player) && isDodging) {
// Missile passes through during dodge - destroy missile but no damage
missile.destroy();
enemyMissiles.splice(i, 1);
continue;
}
missile.lastY = missile.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;
}
}
// Check collision with bosses
if (!hitEnemy) {
for (var j = bosses.length - 1; j >= 0; j--) {
var boss = bosses[j];
if (missile.intersects(boss)) {
// Boss hit by missile
boss.health -= 3; // Missiles do more damage to bosses
LK.setScore(LK.getScore() + 150);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('enemyHit').play();
LK.effects.flashObject(boss, 0xff0000, 300);
missile.destroy();
missiles.splice(i, 1);
hitEnemy = true;
if (boss.health <= 0) {
// Boss defeated
LK.setScore(LK.getScore() + 1000);
scoreTxt.setText('Score: ' + LK.getScore());
enemiesKilled += 5;
if (enemiesKilled % 10 === 0) {
missileCount++;
missileTxt.setText('Missiles: ' + missileCount);
LK.effects.flashScreen(0x00ff00, 500);
}
boss.destroy();
bosses.splice(j, 1);
}
break;
}
}
}
if (!hitEnemy) {
missile.lastY = missile.y;
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -324,13 +324,10 @@
if (LK.ticks % 600 === 0) {
waveLevel++;
}
}
- // Spawn bosses
- bossSpawnTimer++;
- var bossSpawnRate = 900; // Spawn boss every 15 seconds
- if (bossSpawnTimer >= bossSpawnRate) {
- bossSpawnTimer = 0;
+ // Spawn bosses when 25 enemies killed
+ if (enemiesKilled >= 25 && bosses.length === 0) {
spawnBoss();
}
// Update player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
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