User prompt
3 uncu bır dusman ekle bu gemılerın 4 katı kadar olsun ve ekranda o varken baska dusman gemısını gelmesın mermılerını her tarafa atabılsın sadece onu degıl ve bıze bomba atsın bombaya patlama efektı koy canıda dıger gemılerden 10 kat fazla olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
dusmanların mermısı gozukmuyor onu duzelt bıde canımız 50 nın altına dusunce can kurelerı gelsın onlara ates edınce canımız artsın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
dusmanlar tek mermıde olmesınler bı kac mermı ve onlara ates edınce hasar yeme efektı cıksın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
ıkıncı dusman gemısı dıgerınden farklı olarak beşli mermi atsın ve daha hızlı olsun ıkı katı kadar
User prompt
pekala oyuna puan ekle mermılerın yanından gecmek ve dusman oldurmek puan artırsın 100 puan oluncada ekranın ortasına bır top gelsın o topa ates edıncede 10 sanıyelıgıne atıslarımız uclu uclu cıksın ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
mermıler ve dusmanlar cok yavas hızlandır
User prompt
can barımız olsun dusmanlar cok yavas hızlandır az sag sol yapıyorlar bıraz daha uzun sag sol yapsınlar ve
User prompt
dusmanlar ekranın en ustunde sag sol yapmasınlar ekranın bıraz ortasında olsunlar ve bızde bızım gemıyı sadece sag sol degıl ılerı gerı her yere goturebılelım
User prompt
dusman gemıler bıraz daha yavas olsun ve dırek bıze gelmekten ıse bıraz sag sol yapıp ates edıp oyle gelsınler mermılerde bıraz buyuk olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
Code edit (1 edits merged)
Please save this source code
User prompt
Galaxy Attack: Space Shooter
Initial prompt
bana galaxy attack shooting game oynunun aynısını yap
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Enemy = Container.expand(function (enemyType) {
var self = Container.call(this);
self.enemyType = enemyType || 1;
var assetName = self.enemyType === 1 ? 'enemy1' : 'enemy2';
var enemyGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = self.enemyType === 1 ? 4 : 5;
self.moveSpeed = 1.5;
self.direction = 1;
self.points = self.enemyType === 1 ? 10 : 20;
self.shootTimer = Math.random() * 120 + 60;
self.diving = false;
self.diveSpeed = 0;
self.zigzagTimer = 0;
self.zigzagDirection = 1;
self.shootsBeforeDive = 0;
self.maxShootsBeforeDive = 2 + Math.floor(Math.random() * 3);
self.hasReachedMiddle = false;
self.update = function () {
if (self.diving) {
self.y += self.diveSpeed;
self.diveSpeed += 0.4;
} else {
// Move down until reaching middle of screen
if (!self.hasReachedMiddle) {
self.y += self.speed;
if (self.y >= 2732 / 3) {
self.hasReachedMiddle = true;
}
} else {
// Zigzag movement once in middle
self.zigzagTimer++;
if (self.zigzagTimer > 120) {
self.zigzagDirection *= -1;
self.zigzagTimer = 0;
}
self.x += self.zigzagDirection * self.moveSpeed;
self.y += self.speed * 0.2;
}
}
self.shootTimer--;
if (self.shootTimer <= 0 && !self.diving && self.hasReachedMiddle) {
self.shootTimer = Math.random() * 100 + 80;
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 40;
enemyBullets.push(bullet);
game.addChild(bullet);
self.shootsBeforeDive++;
}
if (self.shootsBeforeDive >= self.maxShootsBeforeDive && Math.random() < 0.003 && !self.diving && self.hasReachedMiddle) {
self.diving = true;
self.diveSpeed = 2;
}
};
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 Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('playerShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.shootCooldown = 0;
self.lives = 3;
self.maxHealth = 100;
self.health = self.maxHealth;
self.update = function () {
if (self.shootCooldown > 0) {
self.shootCooldown--;
}
};
self.shoot = function () {
if (self.shootCooldown <= 0) {
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 50;
playerBullets.push(bullet);
game.addChild(bullet);
LK.getSound('shoot').play();
self.shootCooldown = 10;
}
};
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 = -18;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000033
});
/****
* Game Code
****/
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 - 150;
var playerBullets = [];
var enemyBullets = [];
var enemies = [];
var wave = 1;
var enemiesPerWave = 8;
var waveSpawnTimer = 0;
var enemiesSpawned = 0;
var gameStarted = false;
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 150;
scoreTxt.y = 50;
LK.gui.addChild(scoreTxt);
var waveTxt = new Text2('Wave: 1', {
size: 60,
fill: 0xFFFFFF
});
waveTxt.anchor.set(1, 0);
waveTxt.x = -150;
waveTxt.y = 50;
LK.gui.topRight.addChild(waveTxt);
var healthTxt = new Text2('Health: 100', {
size: 60,
fill: 0x00ff00
});
healthTxt.anchor.set(0.5, 0);
healthTxt.x = 0;
healthTxt.y = 50;
LK.gui.top.addChild(healthTxt);
var dragTarget = null;
function spawnEnemyWave() {
if (enemiesSpawned < enemiesPerWave) {
if (waveSpawnTimer <= 0) {
var enemyType = Math.random() < 0.7 ? 1 : 2;
var enemy = new Enemy(enemyType);
enemy.x = 200 + enemiesSpawned * 200;
enemy.y = -100;
enemies.push(enemy);
game.addChild(enemy);
enemiesSpawned++;
waveSpawnTimer = 30;
} else {
waveSpawnTimer--;
}
}
}
function checkCollisions() {
// Player bullets vs enemies
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
LK.setScore(LK.getScore() + enemy.points);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('enemyHit').play();
bullet.destroy();
playerBullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
break;
}
}
}
// Enemy bullets vs player
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.intersects(player)) {
player.health -= 20;
healthTxt.setText('Health: ' + player.health);
if (player.health <= 0) {
healthTxt.tint = 0xff0000;
} else if (player.health <= 30) {
healthTxt.tint = 0xff6600;
} else {
healthTxt.tint = 0x00ff00;
}
LK.effects.flashScreen(0xff0000, 500);
bullet.destroy();
enemyBullets.splice(i, 1);
LK.getSound('explosion').play();
if (player.health <= 0) {
LK.showGameOver();
return;
}
}
}
// Enemies vs player
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (enemy.intersects(player)) {
player.health -= 30;
healthTxt.setText('Health: ' + player.health);
if (player.health <= 0) {
healthTxt.tint = 0xff0000;
} else if (player.health <= 30) {
healthTxt.tint = 0xff6600;
} else {
healthTxt.tint = 0x00ff00;
}
LK.effects.flashScreen(0xff0000, 500);
enemy.destroy();
enemies.splice(i, 1);
LK.getSound('explosion').play();
if (player.health <= 0) {
LK.showGameOver();
return;
}
}
}
}
function updateBullets() {
// Clean up player bullets
for (var i = playerBullets.length - 1; i >= 0; i--) {
var bullet = playerBullets[i];
if (bullet.y < -50) {
bullet.destroy();
playerBullets.splice(i, 1);
}
}
// Clean up enemy bullets
for (var i = enemyBullets.length - 1; i >= 0; i--) {
var bullet = enemyBullets[i];
if (bullet.y > 2732 + 50) {
bullet.destroy();
enemyBullets.splice(i, 1);
}
}
}
function updateEnemies() {
// Clean up enemies that went off screen
for (var i = enemies.length - 1; i >= 0; i--) {
var enemy = enemies[i];
if (enemy.y > 2732 + 100) {
enemy.destroy();
enemies.splice(i, 1);
}
// Reverse direction if hitting screen edges
if (enemy.x <= 50 || enemy.x >= 1998) {
enemy.direction *= -1;
}
}
}
function checkWaveComplete() {
if (enemies.length === 0 && enemiesSpawned >= enemiesPerWave) {
wave++;
enemiesPerWave += 2;
enemiesSpawned = 0;
waveSpawnTimer = 0;
waveTxt.setText('Wave: ' + wave);
// Bonus points for completing wave
LK.setScore(LK.getScore() + wave * 50);
scoreTxt.setText('Score: ' + LK.getScore());
}
}
game.down = function (x, y, obj) {
dragTarget = player;
player.x = x;
player.y = Math.max(100, Math.min(2632, y));
player.shoot();
};
game.move = function (x, y, obj) {
if (dragTarget) {
dragTarget.x = Math.max(40, Math.min(2008, x));
dragTarget.y = Math.max(100, Math.min(2632, y));
}
};
game.up = function (x, y, obj) {
dragTarget = null;
};
game.update = function () {
if (!gameStarted) {
gameStarted = true;
}
spawnEnemyWave();
updateBullets();
updateEnemies();
checkCollisions();
checkWaveComplete();
// Auto-shoot for continuous fire
if (LK.ticks % 8 === 0) {
player.shoot();
}
}; ===================================================================
--- original.js
+++ change.js
@@ -13,10 +13,10 @@
var enemyGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
- self.speed = self.enemyType === 1 ? 2.5 : 3;
- self.moveSpeed = 0.8;
+ self.speed = self.enemyType === 1 ? 4 : 5;
+ self.moveSpeed = 1.5;
self.direction = 1;
self.points = self.enemyType === 1 ? 10 : 20;
self.shootTimer = Math.random() * 120 + 60;
self.diving = false;
@@ -28,9 +28,9 @@
self.hasReachedMiddle = false;
self.update = function () {
if (self.diving) {
self.y += self.diveSpeed;
- self.diveSpeed += 0.2;
+ self.diveSpeed += 0.4;
} else {
// Move down until reaching middle of screen
if (!self.hasReachedMiddle) {
self.y += self.speed;
@@ -70,9 +70,9 @@
var bulletGraphics = self.attachAsset('enemyBullet', {
anchorX: 0.5,
anchorY: 0.5
});
- self.speed = 5;
+ self.speed = 8;
self.update = function () {
self.y += self.speed;
};
return self;
@@ -110,9 +110,9 @@
var bulletGraphics = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
- self.speed = -12;
+ self.speed = -18;
self.update = function () {
self.y += self.speed;
};
return self;