User prompt
Next lv için kaç puan gerektiğini göster. Gemimiz otomatik ateş etsin. Assets kısmında diğer 9 boss görseli eksik.
User prompt
Her checpointte 1 can hakkı kazanalım. Diğer bölüm için kaç puan kaldığını göster. Can hakkını sola yaz. Skor u sağa yaz.
User prompt
Gemiyi mous hareketiyle kontrol edelim.
User prompt
Gemi çok yavaş hareket ediyor. Uzay arka planı siyah olsun.
Code edit (1 edits merged)
Please save this source code
User prompt
Space War: Boss Battle Arena
Initial prompt
Uzayda savaş oyunu yap. Bir uzay gemisi uzaylılar ile savaşıcak. Düşman olarak. 1 normal uzaylı gemisi ekle. 10 boss ekle. Bosslar 10,20,30,40,50,60,70,80,90,100 lv de çıksın. Bosslarda yeşil hp barı olsun. Lv,puan sistemi ekle. Checkpoint ekle bosslar ölünce 10,20,30,40,50,60,70,80,90,100 lv de . 20 lv boss u ölünce ikili ateş etme özelliği açılsın. 50 lv boss u ölünce üçlü ateş etme özelliği açılsın. 80 lv boss u ölünce hızlı ateş etme özelliği açılsın.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Boss = Container.expand(function () {
var self = Container.call(this);
var bossNumber = Math.ceil(currentLevel / 10);
var assetName = bossNumber === 1 ? 'boss' : 'boss' + bossNumber;
var graphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.maxHealth = 20 + currentLevel / 10 * 5; // Increasing health with level
self.health = self.maxHealth;
self.lastShot = 0;
self.shootCooldown = 60; // 1 second at 60fps
self.direction = 1;
self.defeated = false;
self.update = function () {
// Boss movement pattern
self.x += self.speed * self.direction;
if (self.x <= 200 || self.x >= 1848) {
self.direction *= -1;
}
// Boss shooting pattern
self.lastShot++;
if (self.lastShot >= self.shootCooldown) {
self.lastShot = 0;
// Shoot multiple bullets in spread pattern
for (var i = -1; i <= 1; i++) {
var bullet = new EnemyBullet();
bullet.x = self.x + i * 40;
bullet.y = self.y + 75;
enemyBullets.push(bullet);
game.addChild(bullet);
}
}
};
return self;
});
var Enemy = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.health = 1;
self.lastShot = 0;
self.shootCooldown = 120; // 2 seconds at 60fps
self.update = function () {
self.y += self.speed;
// Shoot at player occasionally
self.lastShot++;
if (self.lastShot >= self.shootCooldown && Math.random() < 0.02) {
self.lastShot = 0;
var bullet = new EnemyBullet();
bullet.x = self.x;
bullet.y = self.y + 30;
enemyBullets.push(bullet);
game.addChild(bullet);
}
};
return self;
});
var EnemyBullet = Container.expand(function () {
var self = Container.call(this);
var graphics = 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 graphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.health = 3;
self.maxHealth = 3;
self.lastShot = 0;
self.invulnerable = false;
self.invulnerableTimer = 0;
self.shoot = function () {
if (self.lastShot > 0) return;
self.lastShot = getShootCooldown();
LK.getSound('shoot').play();
if (currentLevel >= 80) {
// Rapid fire - single bullet but faster
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
} else if (currentLevel >= 50) {
// Triple fire
for (var i = -1; i <= 1; i++) {
var bullet = new PlayerBullet();
bullet.x = self.x + i * 25;
bullet.y = self.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
}
} else if (currentLevel >= 20) {
// Dual fire
for (var i = -1; i <= 1; i += 2) {
var bullet = new PlayerBullet();
bullet.x = self.x + i * 20;
bullet.y = self.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
}
} else {
// Single fire
var bullet = new PlayerBullet();
bullet.x = self.x;
bullet.y = self.y - 40;
playerBullets.push(bullet);
game.addChild(bullet);
}
};
self.takeDamage = function () {
if (self.invulnerable) return;
self.health--;
self.invulnerable = true;
self.invulnerableTimer = 120; // 2 seconds invulnerability
LK.getSound('playerHit').play();
LK.effects.flashObject(self, 0xff0000, 500);
if (self.health <= 0) {
playerLives--;
storage.playerLives = playerLives;
if (playerLives <= 0) {
LK.showGameOver();
} else {
// Respawn with full health
self.health = self.maxHealth;
self.x = 1024;
self.y = 2400;
}
}
};
self.update = function () {
if (self.lastShot > 0) {
self.lastShot--;
}
if (self.invulnerable) {
self.invulnerableTimer--;
if (self.invulnerableTimer <= 0) {
self.invulnerable = false;
}
}
};
return self;
});
var PlayerBullet = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('playerBullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -12;
self.update = function () {
self.y += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Game state variables
var currentLevel = storage.currentLevel || 1;
var playerLives = storage.playerLives || 3;
var playerBullets = [];
var enemyBullets = [];
var enemies = [];
var currentBoss = null;
var bossHealthBar = null;
var bossHealthBarBg = null;
var isBossLevel = false;
var enemySpawnTimer = 0;
var levelCompleteTimer = 0;
var enemiesKilled = 0;
var enemiesNeededForLevel = 10;
// Create player
var player = game.addChild(new Player());
player.x = 1024;
player.y = 2400;
// Create UI elements
var livesTxt = new Text2('Lives: 3', {
size: 40,
fill: 0xFFFFFF
});
livesTxt.anchor.set(0, 0);
livesTxt.x = 150;
livesTxt.y = 50;
LK.gui.topLeft.addChild(livesTxt);
var levelTxt = new Text2('Level: 1', {
size: 40,
fill: 0xFFFFFF
});
levelTxt.anchor.set(0.5, 0);
levelTxt.x = 0;
levelTxt.y = 50;
LK.gui.top.addChild(levelTxt);
var scoreTxt = new Text2('Score: 0', {
size: 40,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(1, 0);
scoreTxt.x = -20;
scoreTxt.y = 50;
LK.gui.topRight.addChild(scoreTxt);
var pointsNeededTxt = new Text2('Next Level: 10', {
size: 35,
fill: 0xFFFF00
});
pointsNeededTxt.anchor.set(0.5, 0);
pointsNeededTxt.x = 0;
pointsNeededTxt.y = 90;
LK.gui.top.addChild(pointsNeededTxt);
var weaponTxt = new Text2('Weapon: Single', {
size: 35,
fill: 0xFFFF00
});
weaponTxt.anchor.set(0.5, 0);
weaponTxt.x = 0;
weaponTxt.y = 150;
LK.gui.top.addChild(weaponTxt);
// Helper functions
function getShootCooldown() {
if (currentLevel >= 80) return 8; // Rapid fire
if (currentLevel >= 50) return 15; // Triple fire
if (currentLevel >= 20) return 12; // Dual fire
return 15; // Single fire
}
function updateWeaponDisplay() {
if (currentLevel >= 80) {
weaponTxt.setText('Weapon: Rapid Fire');
} else if (currentLevel >= 50) {
weaponTxt.setText('Weapon: Triple Fire');
} else if (currentLevel >= 20) {
weaponTxt.setText('Weapon: Dual Fire');
} else {
weaponTxt.setText('Weapon: Single Fire');
}
}
function updatePointsNeededDisplay() {
if (isBossLevel) {
pointsNeededTxt.setText('BOSS LEVEL');
} else {
var pointsNeeded = enemiesNeededForLevel - enemiesKilled;
pointsNeededTxt.setText('Next Level: ' + pointsNeeded);
}
}
function isBossLevelCheck(level) {
return level % 10 === 0;
}
function spawnBoss() {
if (currentBoss) return;
currentBoss = new Boss();
currentBoss.x = 1024;
currentBoss.y = 400;
game.addChild(currentBoss);
// Create boss health bar
bossHealthBarBg = game.addChild(LK.getAsset('healthBarBg', {
anchorX: 0.5,
anchorY: 0.5
}));
bossHealthBarBg.x = 1024;
bossHealthBarBg.y = 200;
bossHealthBar = game.addChild(LK.getAsset('healthBar', {
anchorX: 0.5,
anchorY: 0.5
}));
bossHealthBar.x = 1024;
bossHealthBar.y = 200;
}
function spawnEnemy() {
if (isBossLevel) return;
var enemy = new Enemy();
enemy.x = Math.random() * 1648 + 200;
enemy.y = -50;
enemies.push(enemy);
game.addChild(enemy);
}
function nextLevel() {
currentLevel++;
storage.currentLevel = currentLevel;
levelTxt.setText('Level: ' + currentLevel);
isBossLevel = isBossLevelCheck(currentLevel);
enemiesKilled = 0;
levelCompleteTimer = 0;
updateWeaponDisplay();
updatePointsNeededDisplay();
// Award life at checkpoints (every 10 levels)
if (currentLevel % 10 === 0) {
playerLives++;
storage.playerLives = playerLives;
LK.effects.flashScreen(0x00ff00, 500); // Green flash for life gained
}
if (isBossLevel) {
spawnBoss();
}
}
// Input handling
var dragActive = false;
game.down = function (x, y, obj) {
dragActive = true;
var targetX = Math.max(40, Math.min(2008, x));
var targetY = Math.max(200, Math.min(2600, y));
player.x = targetX;
player.y = targetY;
player.shoot();
};
game.move = function (x, y, obj) {
// Direct mouse movement - ship follows mouse cursor immediately
var targetX = Math.max(40, Math.min(2008, x));
var targetY = Math.max(200, Math.min(2600, y));
player.x = targetX;
player.y = targetY;
};
game.up = function (x, y, obj) {
dragActive = false;
};
// Initialize level
updateWeaponDisplay();
updatePointsNeededDisplay();
levelTxt.setText('Level: ' + currentLevel);
isBossLevel = isBossLevelCheck(currentLevel);
if (isBossLevel) {
spawnBoss();
}
// Play background music
LK.playMusic('bgmusic');
// Main game loop
game.update = function () {
// Update player
player.update();
// Update UI
scoreTxt.setText('Score: ' + LK.getScore());
livesTxt.setText('Lives: ' + playerLives);
updatePointsNeededDisplay();
// Auto-shoot continuously
player.shoot();
// Spawn enemies for non-boss levels
if (!isBossLevel) {
enemySpawnTimer++;
if (enemySpawnTimer >= 90) {
// Spawn every 1.5 seconds
enemySpawnTimer = 0;
spawnEnemy();
}
}
// 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.lastY >= -10 && bullet.y < -10) {
bullet.destroy();
playerBullets.splice(i, 1);
continue;
}
// Check collision with enemies
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
if (bullet.intersects(enemy)) {
LK.getSound('enemyHit').play();
LK.setScore(LK.getScore() + 10);
bullet.destroy();
playerBullets.splice(i, 1);
enemy.destroy();
enemies.splice(j, 1);
enemiesKilled++;
break;
}
}
// Check collision with boss
if (currentBoss && bullet.intersects(currentBoss)) {
LK.getSound('bossHit').play();
LK.setScore(LK.getScore() + 50);
bullet.destroy();
playerBullets.splice(i, 1);
currentBoss.health--;
// Update boss health bar
if (bossHealthBar) {
var healthPercent = currentBoss.health / currentBoss.maxHealth;
bossHealthBar.scaleX = healthPercent;
}
if (currentBoss.health <= 0) {
currentBoss.defeated = true;
currentBoss.destroy();
currentBoss = null;
if (bossHealthBar) {
bossHealthBar.destroy();
bossHealthBar = null;
}
if (bossHealthBarBg) {
bossHealthBarBg.destroy();
bossHealthBarBg = null;
}
LK.setScore(LK.getScore() + 500);
if (currentLevel >= 100) {
LK.showYouWin();
} else {
levelCompleteTimer = 180; // 3 seconds delay before next level
}
}
break;
}
if (bullet.parent) {
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.lastY <= 2742 && bullet.y > 2742) {
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
// Check collision with player
if (bullet.intersects(player)) {
player.takeDamage();
bullet.destroy();
enemyBullets.splice(i, 1);
continue;
}
if (bullet.parent) {
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.lastY <= 2742 && enemy.y > 2742) {
enemy.destroy();
enemies.splice(i, 1);
continue;
}
// Check collision with player
if (enemy.intersects(player)) {
player.takeDamage();
enemy.destroy();
enemies.splice(i, 1);
continue;
}
if (enemy.parent) {
enemy.lastY = enemy.y;
}
}
// Update boss
if (currentBoss && currentBoss.parent) {
currentBoss.update();
// Check collision with player
if (currentBoss.intersects(player)) {
player.takeDamage();
}
}
// Level progression
if (!isBossLevel && enemiesKilled >= enemiesNeededForLevel) {
levelCompleteTimer++;
if (levelCompleteTimer >= 180) {
// 3 seconds delay
nextLevel();
}
} else if (isBossLevel && currentBoss && currentBoss.defeated) {
if (levelCompleteTimer > 0) {
levelCompleteTimer--;
if (levelCompleteTimer <= 0) {
nextLevel();
}
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -8,9 +8,11 @@
* Classes
****/
var Boss = Container.expand(function () {
var self = Container.call(this);
- var graphics = self.attachAsset('boss', {
+ var bossNumber = Math.ceil(currentLevel / 10);
+ var assetName = bossNumber === 1 ? 'boss' : 'boss' + bossNumber;
+ var graphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
@@ -261,10 +263,14 @@
weaponTxt.setText('Weapon: Single Fire');
}
}
function updatePointsNeededDisplay() {
- var pointsNeeded = enemiesNeededForLevel - enemiesKilled;
- pointsNeededTxt.setText('Next Level: ' + pointsNeeded);
+ if (isBossLevel) {
+ pointsNeededTxt.setText('BOSS LEVEL');
+ } else {
+ var pointsNeeded = enemiesNeededForLevel - enemiesKilled;
+ pointsNeededTxt.setText('Next Level: ' + pointsNeeded);
+ }
}
function isBossLevelCheck(level) {
return level % 10 === 0;
}
@@ -352,12 +358,10 @@
// Update UI
scoreTxt.setText('Score: ' + LK.getScore());
livesTxt.setText('Lives: ' + playerLives);
updatePointsNeededDisplay();
- // Auto-shoot when dragging
- if (dragActive) {
- player.shoot();
- }
+ // Auto-shoot continuously
+ player.shoot();
// Spawn enemies for non-boss levels
if (!isBossLevel) {
enemySpawnTimer++;
if (enemySpawnTimer >= 90) {