User prompt
F 18 hornet som vän ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Jas Gripen 31 vän
User prompt
Kan du Ada SU 57 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Radera boss
User prompt
Boss på scor 10 000
User prompt
Visa spelarens hp
User prompt
Natt och dag ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Olika väder ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Gör så att man kan pasa spelet
User prompt
Gör tu 95 vapen bomber
User prompt
Kan du göra så att bomberna ser anolunda utt
User prompt
Tabort öar
User prompt
Tu 95 ska bara försöka trefa öarna med bomber
User prompt
Gör små öar
User prompt
Det ska finas små öra som bomberna sperengs när dom landar på ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Kan du göra så att tu 95 kan bomba marken
User prompt
För moln
User prompt
Tu 95 kan inte attakera spelaren
User prompt
Kan du göra så att fienden kan attackera spelaren
User prompt
Tu 95 ska vara med
User prompt
Su 27 och mig 29 ska Kina attakera
Code edit (1 edits merged)
Please save this source code
User prompt
JAS Gripen: Swedish Air Defense
Initial prompt
Fienden ska vara ryska flygplan och spelaren ska ha JAS Gripen
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bomb = Container.expand(function () {
var self = Container.call(this);
var bombGraphics = self.attachAsset('bomb', {
anchorX: 0.5,
anchorY: 0.5
});
bombGraphics.tint = 0x444444; // Dark tint for bombs
self.speed = 6;
self.active = true;
self.update = function () {
if (!self.active) return;
self.y += self.speed;
};
return self;
});
var Cloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
cloudGraphics.alpha = 0.6;
self.speed = Math.random() * 1 + 0.5; // Random speed between 0.5-1.5
self.scaleX = self.scaleY = Math.random() * 0.8 + 0.6; // Random scale 0.6-1.4
self.update = function () {
self.y += self.speed;
};
return self;
});
var EnemyAircraft = Container.expand(function (type) {
var self = Container.call(this);
var assetName = type || 'mig29';
var aircraftGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.type = assetName;
self.speed = 3;
self.active = true;
// Set point values based on aircraft type
if (self.type === 'mig29') {
self.points = 100;
self.speed = 3;
} else if (self.type === 'su27') {
self.points = 150;
self.speed = 2.5;
} else if (self.type === 'tu95') {
self.points = 200;
self.speed = 2;
}
self.update = function () {
if (!self.active) return;
self.y += self.speed;
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('missile', {
anchorX: 0.5,
anchorY: 0.5
});
bulletGraphics.tint = 0xFF4444; // Red tint for enemy bullets
self.speed = 8;
self.active = true;
self.update = function () {
if (!self.active) return;
self.y += self.speed;
};
return self;
});
var Explosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5
});
self.lifetime = 20; // frames
self.update = function () {
self.lifetime--;
self.alpha = self.lifetime / 20;
self.scaleX = self.scaleY = (20 - self.lifetime) / 10;
};
return self;
});
var GroundExplosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('groundExplosion', {
anchorX: 0.5,
anchorY: 0.5
});
explosionGraphics.alpha = 1;
explosionGraphics.scaleX = 0.2;
explosionGraphics.scaleY = 0.2;
self.active = true;
// Start animation immediately
tween(explosionGraphics, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
self.active = false;
}
});
return self;
});
var Island = Container.expand(function () {
var self = Container.call(this);
var islandGraphics = self.attachAsset('island', {
anchorX: 0.5,
anchorY: 0.5
});
islandGraphics.alpha = 0.8;
self.speed = 1; // Slow movement for background effect
self.scaleX = self.scaleY = Math.random() * 0.6 + 0.8; // Random scale 0.8-1.4
self.update = function () {
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 = -12;
self.active = true;
self.update = function () {
if (!self.active) return;
self.y += self.speed;
};
return self;
});
var PlayerGripen = Container.expand(function () {
var self = Container.call(this);
var gripenGraphics = self.attachAsset('gripen', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.active = true;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
// Sound effects
// Missiles
// Enemy aircraft types
// Player aircraft - JAS Gripen (distinctive delta wing design)
// Game variables
var player;
var missiles = [];
var enemies = [];
var enemyBullets = [];
var bombs = [];
var explosions = [];
var waveNumber = 1;
var enemiesSpawned = 0;
var enemiesInWave = 5;
var spawnTimer = 0;
var missileTimer = 0;
var enemyFireTimer = 0;
var waveTimer = 0;
var clouds = [];
var cloudSpawnTimer = 0;
var islands = [];
var islandSpawnTimer = 0;
var groundExplosions = [];
// UI elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 120;
scoreTxt.y = 50;
LK.gui.topLeft.addChild(scoreTxt);
var waveTxt = new Text2('Wave: 1', {
size: 50,
fill: 0xFFFFFF
});
waveTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(waveTxt);
// Initialize player
player = new PlayerGripen();
player.x = 1024; // Center horizontally
player.y = 2500; // Near bottom of screen
game.addChild(player);
// Touch/mouse controls for player movement
var isDragging = false;
game.down = function (x, y, obj) {
isDragging = true;
player.x = x;
};
game.move = function (x, y, obj) {
if (isDragging && player.active) {
player.x = Math.max(60, Math.min(1988, x)); // Keep player on screen
}
};
game.up = function (x, y, obj) {
isDragging = false;
};
// Spawn enemy function
function spawnEnemy() {
var enemyTypes = ['mig29', 'su27', 'tu95']; // Russian aircraft including Tu-95 bomber
var randomType = enemyTypes[Math.floor(Math.random() * enemyTypes.length)];
var enemy = new EnemyAircraft(randomType);
enemy.x = Math.random() * 1800 + 124; // Random X position across screen
enemy.y = -100; // Start above screen
// Adjust speed based on wave
enemy.speed += (waveNumber - 1) * 0.5;
enemies.push(enemy);
game.addChild(enemy);
enemiesSpawned++;
}
// Fire missile function
function fireMissile() {
if (!player.active) return;
var missile = new Missile();
missile.x = player.x;
missile.y = player.y - 70;
missiles.push(missile);
game.addChild(missile);
LK.getSound('missile_fire').play();
}
// Create explosion function
function createExplosion(x, y) {
var explosion = new Explosion();
explosion.x = x;
explosion.y = y;
explosions.push(explosion);
game.addChild(explosion);
LK.getSound('explosion').play();
}
// Create ground explosion function
function createGroundExplosion(x, y) {
var groundExplosion = new GroundExplosion();
groundExplosion.x = x;
groundExplosion.y = y;
groundExplosions.push(groundExplosion);
game.addChild(groundExplosion);
LK.getSound('explosion').play();
}
// Update score display
function updateScore() {
scoreTxt.setText('Score: ' + LK.getScore());
}
// Update wave display
function updateWave() {
waveTxt.setText('Wave: ' + waveNumber);
}
// Main game update loop
game.update = function () {
if (!player.active) return;
// Fire missiles automatically
missileTimer++;
if (missileTimer >= 20) {
// Fire every 20 ticks (3 times per second)
fireMissile();
missileTimer = 0;
}
// Spawn enemies
spawnTimer++;
var spawnRate = Math.max(60 - waveNumber * 5, 30); // Faster spawning each wave
if (spawnTimer >= spawnRate && enemiesSpawned < enemiesInWave) {
spawnEnemy();
spawnTimer = 0;
}
// Check for missile-enemy collisions
for (var m = missiles.length - 1; m >= 0; m--) {
var missile = missiles[m];
if (!missile.active) continue;
// Remove missiles that go off screen
if (missile.y < -50) {
missile.destroy();
missiles.splice(m, 1);
continue;
}
// Check collision with enemies
for (var e = enemies.length - 1; e >= 0; e--) {
var enemy = enemies[e];
if (!enemy.active) continue;
if (missile.intersects(enemy)) {
// Create explosion
createExplosion(enemy.x, enemy.y);
// Award points
LK.setScore(LK.getScore() + enemy.points);
updateScore();
// Remove missile and enemy
missile.active = false;
enemy.active = false;
missile.destroy();
enemy.destroy();
missiles.splice(m, 1);
enemies.splice(e, 1);
LK.getSound('enemy_destroyed').play();
break;
}
}
}
// Update and check enemy collisions with player
for (var e = enemies.length - 1; e >= 0; e--) {
var enemy = enemies[e];
if (!enemy.active) continue;
// Remove enemies that go off screen
if (enemy.y > 2800) {
enemy.destroy();
enemies.splice(e, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
// Game over
createExplosion(player.x, player.y);
player.active = false;
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
return;
}
}
// Enemy firing system
enemyFireTimer++;
if (enemyFireTimer >= 90) {
// Fire every 1.5 seconds
if (enemies.length > 0) {
var randomEnemy = enemies[Math.floor(Math.random() * enemies.length)];
if (randomEnemy.active && randomEnemy.y > 200 && randomEnemy.y < 2000) {
if (randomEnemy.type === 'tu95') {
// Tu-95 tries to bomb islands
var targetIsland = null;
var minDistance = Infinity;
// Find closest island within bombing range
for (var ti = 0; ti < islands.length; ti++) {
var island = islands[ti];
var distance = Math.abs(randomEnemy.x - island.x);
if (distance < 300 && island.y > randomEnemy.y && distance < minDistance) {
minDistance = distance;
targetIsland = island;
}
}
// If island found, bomb towards it
if (targetIsland) {
var bomb = new Bomb();
bomb.x = randomEnemy.x + (targetIsland.x - randomEnemy.x) * 0.3; // Aim towards island
bomb.y = randomEnemy.y + 50;
bombs.push(bomb);
game.addChild(bomb);
}
} else {
// Other aircraft fire bullets
var bullet = new EnemyBullet();
bullet.x = randomEnemy.x;
bullet.y = randomEnemy.y + 50;
enemyBullets.push(bullet);
game.addChild(bullet);
}
}
}
enemyFireTimer = 0;
}
// Update and check enemy bullets
for (var eb = enemyBullets.length - 1; eb >= 0; eb--) {
var bullet = enemyBullets[eb];
if (!bullet.active) continue;
// Remove bullets that go off screen
if (bullet.y > 2800) {
bullet.destroy();
enemyBullets.splice(eb, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
// Game over
createExplosion(player.x, player.y);
player.active = false;
bullet.destroy();
enemyBullets.splice(eb, 1);
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
return;
}
}
// Update and check bombs
for (var b = bombs.length - 1; b >= 0; b--) {
var bomb = bombs[b];
if (!bomb.active) continue;
// Check collision with islands
var bombHitIsland = false;
for (var bi = islands.length - 1; bi >= 0; bi--) {
var island = islands[bi];
if (bomb.intersects(island)) {
// Bomb hits island
createExplosion(bomb.x, bomb.y);
createGroundExplosion(bomb.x, bomb.y);
bomb.destroy();
bombs.splice(b, 1);
island.destroy();
islands.splice(bi, 1);
bombHitIsland = true;
break;
}
}
if (bombHitIsland) continue;
// Remove bombs that go off screen
if (bomb.y > 2800) {
// Bomb hits ground - create explosion
createExplosion(bomb.x, bomb.y);
createGroundExplosion(bomb.x, bomb.y);
bomb.destroy();
bombs.splice(b, 1);
continue;
}
// Check collision with player
if (bomb.intersects(player)) {
// Game over
createExplosion(player.x, player.y);
player.active = false;
bomb.destroy();
bombs.splice(b, 1);
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
return;
}
}
// Update explosions
for (var ex = explosions.length - 1; ex >= 0; ex--) {
var explosion = explosions[ex];
if (explosion.lifetime <= 0) {
explosion.destroy();
explosions.splice(ex, 1);
}
}
// Check if wave is complete
if (enemiesSpawned >= enemiesInWave && enemies.length === 0) {
waveNumber++;
enemiesSpawned = 0;
enemiesInWave += 2; // More enemies each wave
updateWave();
// Brief pause between waves
waveTimer = 120; // 2 second pause
}
// Handle wave timer
if (waveTimer > 0) {
waveTimer--;
}
// Spawn islands for background atmosphere
islandSpawnTimer++;
if (islandSpawnTimer >= 300) {
// Spawn island every 5 seconds
var island = new Island();
island.x = Math.random() * 2048; // Random X position across screen
island.y = -100; // Start above screen
islands.push(island);
game.addChild(island);
islandSpawnTimer = 0;
}
// Update and remove off-screen islands
for (var i = islands.length - 1; i >= 0; i--) {
var island = islands[i];
if (island.y > 2800) {
// Remove when off screen
island.destroy();
islands.splice(i, 1);
}
}
// Spawn clouds for background atmosphere
cloudSpawnTimer++;
if (cloudSpawnTimer >= 180) {
// Spawn cloud every 3 seconds
var cloud = new Cloud();
cloud.x = Math.random() * 2048; // Random X position across screen
cloud.y = -100; // Start above screen
clouds.push(cloud);
game.addChild(cloud);
cloudSpawnTimer = 0;
}
// Update and remove off-screen clouds
for (var c = clouds.length - 1; c >= 0; c--) {
var cloud = clouds[c];
if (cloud.y > 2800) {
// Remove when off screen
cloud.destroy();
clouds.splice(c, 1);
}
}
// Update and remove finished ground explosions
for (var ge = groundExplosions.length - 1; ge >= 0; ge--) {
var groundExplosion = groundExplosions[ge];
if (!groundExplosion.active) {
groundExplosion.destroy();
groundExplosions.splice(ge, 1);
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -347,14 +347,28 @@
if (enemies.length > 0) {
var randomEnemy = enemies[Math.floor(Math.random() * enemies.length)];
if (randomEnemy.active && randomEnemy.y > 200 && randomEnemy.y < 2000) {
if (randomEnemy.type === 'tu95') {
- // Tu-95 drops bombs
- var bomb = new Bomb();
- bomb.x = randomEnemy.x;
- bomb.y = randomEnemy.y + 50;
- bombs.push(bomb);
- game.addChild(bomb);
+ // Tu-95 tries to bomb islands
+ var targetIsland = null;
+ var minDistance = Infinity;
+ // Find closest island within bombing range
+ for (var ti = 0; ti < islands.length; ti++) {
+ var island = islands[ti];
+ var distance = Math.abs(randomEnemy.x - island.x);
+ if (distance < 300 && island.y > randomEnemy.y && distance < minDistance) {
+ minDistance = distance;
+ targetIsland = island;
+ }
+ }
+ // If island found, bomb towards it
+ if (targetIsland) {
+ var bomb = new Bomb();
+ bomb.x = randomEnemy.x + (targetIsland.x - randomEnemy.x) * 0.3; // Aim towards island
+ bomb.y = randomEnemy.y + 50;
+ bombs.push(bomb);
+ game.addChild(bomb);
+ }
} else {
// Other aircraft fire bullets
var bullet = new EnemyBullet();
bullet.x = randomEnemy.x;
@@ -392,8 +406,25 @@
// Update and check bombs
for (var b = bombs.length - 1; b >= 0; b--) {
var bomb = bombs[b];
if (!bomb.active) continue;
+ // Check collision with islands
+ var bombHitIsland = false;
+ for (var bi = islands.length - 1; bi >= 0; bi--) {
+ var island = islands[bi];
+ if (bomb.intersects(island)) {
+ // Bomb hits island
+ createExplosion(bomb.x, bomb.y);
+ createGroundExplosion(bomb.x, bomb.y);
+ bomb.destroy();
+ bombs.splice(b, 1);
+ island.destroy();
+ islands.splice(bi, 1);
+ bombHitIsland = true;
+ break;
+ }
+ }
+ if (bombHitIsland) continue;
// Remove bombs that go off screen
if (bomb.y > 2800) {
// Bomb hits ground - create explosion
createExplosion(bomb.x, bomb.y);
Jasgripe 39 riktad upp. In-Game asset. 2d. High contrast. No shadows
Jas Gripen 39 riktad upp. In-Game asset. 2d. High contrast. No shadows
Mig 29. In-Game asset. 2d. High contrast. No shadows
Su 27 uppifrån. In-Game asset. 2d. High contrast. No shadows
Explosion. In-Game asset. 2d. High contrast. No shadows
Tu 95 uppifrån. In-Game asset. 2d. High contrast. No shadows
Moln. In-Game asset. 2d. High contrast. No shadows
Bomb. In-Game asset. 2d. High contrast. No shadows
Regn drope. In-Game asset. 2d. High contrast. No shadows
SU 57. In-Game asset. 2d. High contrast. No shadows