User prompt
Düşmanlar 5 saniyede 3 kere ateş etsin
User prompt
Düşmanlar 5 saniyede 2 kere ateş etsin
User prompt
Düşmanlar 5 saniyede ateş etsin
User prompt
Düşmanlar saniyede 2 kere ateş etsin
User prompt
Karakter sadece aynı hizada sağa sola hareket edebilsin
User prompt
Boss u yendikten sonra oyun bitsin
User prompt
Boss 2. Levelden sonra gelsin
User prompt
2. Boss 5 level sonra gelsin
User prompt
Boss 1. Levelden sonra gelsin
User prompt
Boss daha az ateş etsin
User prompt
2 . Levelden sonra ekranın üst orta kısmında daha büyük düşman olsun ve onun ölmesi için 30 mermi atamak gereksin ayrıca büyük düşman geldiğinde diğer düşmanlar gelmesin ve büyük düşman küçük düşmana göre daha çok ateş etsin
User prompt
Enemy ler daha çok gelsin ama ateş etmeleri az olsun
User prompt
Oyunda sadece enemy ve spaceship olsun
User prompt
Shield olmasın
Code edit (1 edits merged)
Please save this source code
User prompt
Retro Cosmos
Initial prompt
Ateri oyunu
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0 }); /**** * Classes ****/ var BossEnemy = Container.expand(function () { var self = Container.call(this); var bossGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3 }); self.health = 30; self.speedY = 0.5; self.movePattern = 2; // Always use sine wave pattern self.patternOffset = Math.random() * 100; self.shootTimer = 100; // Shoot three times every 5 seconds (60 FPS * 5 / 3 = 100 frames between shots) self.update = function () { // Move down slowly until reaching position if (self.y < 300) { self.y += self.speedY; } // Side-to-side movement self.x = self.startX + Math.sin(LK.ticks * 0.02 + self.patternOffset) * 200; // Shoot less frequently self.shootTimer--; if (self.shootTimer <= 0) { // Create enemy bullets (multiple) var bullet1 = new Bullet(); bullet1.speed = 6; bullet1.x = self.x - 30; bullet1.y = self.y + 50; game.addChild(bullet1); enemyBullets.push(bullet1); var bullet2 = new Bullet(); bullet2.speed = 6; bullet2.x = self.x + 30; bullet2.y = self.y + 50; game.addChild(bullet2); enemyBullets.push(bullet2); var bullet3 = new Bullet(); bullet3.speed = 5; bullet3.x = self.x; bullet3.y = self.y + 50; game.addChild(bullet3); enemyBullets.push(bullet3); self.shootTimer = 100; // Reset to fire three times every 5 seconds } return false; }; return self; }); var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -10; self.update = function () { self.y += self.speed; // Remove bullets that go off screen if (self.y < -50) { return true; // Return true to mark for removal } return false; }; return self; }); var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speedY = 1.5 + Math.random() * 1.5; self.movePattern = Math.floor(Math.random() * 3); // 0: straight, 1: zigzag, 2: sine self.patternOffset = Math.random() * 100; self.shootTimer = 100; // Fire three times every 5 seconds (60 FPS * 5 / 3 = 100 frames between shots) self.update = function () { self.y += self.speedY; // Different movement patterns switch (self.movePattern) { case 1: // Zigzag self.x += Math.sin(LK.ticks * 0.05 + self.patternOffset) * 3; break; case 2: // Sine wave self.x = self.startX + Math.sin(LK.ticks * 0.03 + self.patternOffset) * 150; break; } // Shoot occasionally self.shootTimer--; if (self.shootTimer <= 0) { // Create enemy bullet var bullet = new Bullet(); bullet.speed = 5; // Bullets move down bullet.x = self.x; bullet.y = self.y + 30; game.addChild(bullet); enemyBullets.push(bullet); self.shootTimer = 100; // Reset to fire three times every 5 seconds } // Remove if off bottom of screen if (self.y > 2732 + 100) { return true; // Mark for removal } return false; }; return self; }); var Spaceship = Container.expand(function () { var self = Container.call(this); var spaceshipGraphics = self.attachAsset('spaceship', { anchorX: 0.5, anchorY: 0.5 }); self.shootCooldown = 0; self.shootDelay = 15; self.speed = 5; self.lives = 3; self.shoot = function () { if (self.shootCooldown <= 0) { self.shootCooldown = self.shootDelay; // Create a single bullet var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; game.addChild(bullet); bullets.push(bullet); // Play shoot sound LK.getSound('shoot').play(); return true; } return false; }; self.update = function () { // Update cooldown if (self.shootCooldown > 0) { self.shootCooldown--; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Game state var gameRunning = true; var level = 1; var score = 0; var lives = 3; var enemySpawnRate = 150; // Reduced from 300 to spawn enemies more frequently var enemySpawnCountdown = 150; var bossActive = false; var bossHealth = 30; var boss = null; // Game elements var spaceship; var bullets = []; var enemyBullets = []; var enemies = []; // Create UI elements var scoreTxt = new Text2('Score: 0', { size: 50, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); LK.gui.topRight.addChild(scoreTxt); scoreTxt.x = -250; // Offset from right edge var levelTxt = new Text2('Level: 1', { size: 50, fill: 0xFFFFFF }); levelTxt.anchor.set(0.5, 0); LK.gui.top.addChild(levelTxt); levelTxt.y = 10; var livesTxt = new Text2('Lives: 3', { size: 50, fill: 0xFFFFFF }); livesTxt.anchor.set(0, 0); LK.gui.topLeft.addChild(livesTxt); livesTxt.x = 120; // Offset to avoid menu button livesTxt.y = 10; var highScoreTxt = new Text2('High Score: ' + storage.highScore, { size: 40, fill: 0xFFFFFF }); highScoreTxt.anchor.set(1, 0); LK.gui.topRight.addChild(highScoreTxt); highScoreTxt.y = 60; // Drag handling var isDragging = false; // Initialize game elements function initializeGame() { // Create player spaceship spaceship = new Spaceship(); spaceship.x = 2048 / 2; spaceship.y = 2732 - 200; game.addChild(spaceship); // Reset variables bullets = []; enemyBullets = []; enemies = []; level = 1; score = 0; lives = 3; // Update UI updateUI(); // Start game music LK.playMusic('gameMusic'); } // Update UI elements function updateUI() { scoreTxt.setText('Score: ' + score); levelTxt.setText('Level: ' + level); livesTxt.setText('Lives: ' + lives); highScoreTxt.setText('High Score: ' + storage.highScore); // Update score in LK system LK.setScore(score); } // Create explosion effect function createExplosion(x, y, color) { // Flash object var explosionObj = new Container(); explosionObj.x = x; explosionObj.y = y; var explosionGraphic = explosionObj.attachAsset('asteroid', { anchorX: 0.5, anchorY: 0.5, alpha: 0.7 }); game.addChild(explosionObj); // Animate explosion tween(explosionGraphic, { scaleX: 2, scaleY: 2, alpha: 0 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { explosionObj.destroy(); } }); // Play explosion sound LK.getSound('explosion').play(); } // Handle collisions function checkCollisions() { // Player bullets with enemies for (var i = bullets.length - 1; i >= 0; i--) { var bullet = bullets[i]; // Check collision with boss if active if (bossActive && boss && bullet.intersects(boss)) { // Create small explosion effect createExplosion(bullet.x, bullet.y, 0xe74c3c); // Remove bullet bullet.destroy(); bullets.splice(i, 1); // Reduce boss health bossHealth--; updateBossHealthBar(); // Check if boss is defeated if (bossHealth <= 0) { // Create large explosion createExplosion(boss.x, boss.y, 0xe74c3c); createExplosion(boss.x - 50, boss.y + 30, 0xe74c3c); createExplosion(boss.x + 50, boss.y - 30, 0xe74c3c); // Remove boss boss.destroy(); boss = null; bossActive = false; // Award big score score += 200; updateUI(); // End the game with a win if (score > storage.highScore) { storage.highScore = score; updateUI(); } LK.showYouWin(); } continue; // Skip checking other enemies } // Check collision with regular enemies for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; if (bullet.intersects(enemy)) { // Create explosion createExplosion(enemy.x, enemy.y, 0xe74c3c); // Remove enemy and bullet enemy.destroy(); enemies.splice(j, 1); bullet.destroy(); bullets.splice(i, 1); // Increase score score += 15; updateUI(); break; // Bullet can only hit one enemy } } } // Check player collisions with enemy ships for (var i = enemies.length - 1; i >= 0; i--) { if (spaceship.intersects(enemies[i])) { // Create explosion createExplosion(enemies[i].x, enemies[i].y, 0xe74c3c); // Remove enemy enemies[i].destroy(); enemies.splice(i, 1); // Player loses a life lives--; updateUI(); if (lives <= 0) { gameOver(); } } } // Check player collisions with enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { if (spaceship.intersects(enemyBullets[i])) { // Create small explosion createExplosion(enemyBullets[i].x, enemyBullets[i].y, 0xffffff); // Remove bullet enemyBullets[i].destroy(); enemyBullets.splice(i, 1); // Player loses a life lives--; updateUI(); if (lives <= 0) { gameOver(); } } } } // Check if game level should increase function checkLevelProgression() { if (score >= level * 100) { level++; updateUI(); // Increase difficulty - make spawn rate lower but not as aggressively enemySpawnRate = Math.max(90, enemySpawnRate - 10); // Spawn boss at level 2 and above if (level >= 2 && !bossActive) { spawnBoss(); } // Show level up text var levelUpTxt = new Text2('Level ' + level + '!', { size: 100, fill: 0xFFFF00 }); levelUpTxt.anchor.set(0.5, 0.5); levelUpTxt.x = 2048 / 2; levelUpTxt.y = 2732 / 2; game.addChild(levelUpTxt); // Animate and remove tween(levelUpTxt, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 1500, onFinish: function onFinish() { levelUpTxt.destroy(); } }); } } // Spawn boss function function spawnBoss() { bossActive = true; bossHealth = 30; // Create boss warning text var warningText = new Text2('BOSS INCOMING!', { size: 120, fill: 0xFF0000 }); warningText.anchor.set(0.5, 0.5); warningText.x = 2048 / 2; warningText.y = 2732 / 2; game.addChild(warningText); // Animate and remove warning tween(warningText, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 1500, onFinish: function onFinish() { warningText.destroy(); // Create and add boss boss = new BossEnemy(); boss.x = 2048 / 2; boss.y = -150; boss.startX = boss.x; game.addChild(boss); // Create boss health bar updateBossHealthBar(); } }); } // Update boss health bar function updateBossHealthBar() { // Remove old health bar if exists if (game.bossHealthBar) { game.bossHealthBar.destroy(); } // Create new health bar var healthBar = new Container(); healthBar.x = 2048 / 2 - 300; healthBar.y = 100; // Background var barBg = healthBar.attachAsset('asteroid', { anchorX: 0, anchorY: 0.5, scaleX: 6, scaleY: 0.5 }); barBg.tint = 0x333333; // Health fill var barFill = healthBar.attachAsset('asteroid', { anchorX: 0, anchorY: 0.5, scaleX: bossHealth / 30 * 6, scaleY: 0.4 }); barFill.tint = 0xFF0000; // Add health text var healthText = new Text2('Boss: ' + bossHealth + '/30', { size: 40, fill: 0xFFFFFF }); healthText.anchor.set(0.5, 0.5); healthText.x = 300; healthText.y = 0; healthBar.addChild(healthText); game.addChild(healthBar); game.bossHealthBar = healthBar; } // Game over function function gameOver() { gameRunning = false; // Update high score if (score > storage.highScore) { storage.highScore = score; updateUI(); } // Show game over screen LK.showGameOver(); } // Initialize the game initializeGame(); // Touch and mouse controls game.down = function (x, y, obj) { isDragging = true; // Fire a bullet when tapping if (gameRunning) { spaceship.shoot(); } // Only move spaceship horizontally spaceship.x = x; // Keep Y position fixed spaceship.y = 2732 - 200; // Fixed Y position at the bottom }; game.up = function (x, y, obj) { isDragging = false; }; game.move = function (x, y, obj) { if (isDragging && gameRunning) { // Only move spaceship horizontally (left-right) spaceship.x = x; // Keep Y position fixed at the bottom area spaceship.y = 2732 - 200; // Fixed Y position at the bottom } }; // Game update function game.update = function () { if (!gameRunning) return; // Update spaceship spaceship.update(); // Auto-fire when holding if (isDragging && LK.ticks % 15 === 0) { spaceship.shoot(); } // Update boss if active if (bossActive && boss) { boss.update(); } // Only spawn regular enemies if boss is not active else { // Spawn enemies enemySpawnCountdown--; if (enemySpawnCountdown <= 0) { var enemy = new Enemy(); enemy.x = Math.random() * 2048; enemy.y = -100; enemy.startX = enemy.x; // Save starting X for sine movement game.addChild(enemy); enemies.push(enemy); enemySpawnCountdown = enemySpawnRate; } } // Update bullets for (var i = bullets.length - 1; i >= 0; i--) { if (bullets[i].update()) { bullets[i].destroy(); bullets.splice(i, 1); } } // Update enemy bullets for (var i = enemyBullets.length - 1; i >= 0; i--) { if (enemyBullets[i].update()) { enemyBullets[i].destroy(); enemyBullets.splice(i, 1); } } // Update enemies for (var i = enemies.length - 1; i >= 0; i--) { if (enemies[i].update()) { enemies[i].destroy(); enemies.splice(i, 1); } } // Check collisions checkCollisions(); // Check level progression checkLevelProgression(); };
===================================================================
--- original.js
+++ change.js
@@ -20,9 +20,9 @@
self.health = 30;
self.speedY = 0.5;
self.movePattern = 2; // Always use sine wave pattern
self.patternOffset = Math.random() * 100;
- self.shootTimer = 150; // Shoot twice every 5 seconds (60 FPS * 5 / 2 = 150 frames between shots)
+ self.shootTimer = 100; // Shoot three times every 5 seconds (60 FPS * 5 / 3 = 100 frames between shots)
self.update = function () {
// Move down slowly until reaching position
if (self.y < 300) {
self.y += self.speedY;
@@ -50,9 +50,9 @@
bullet3.x = self.x;
bullet3.y = self.y + 50;
game.addChild(bullet3);
enemyBullets.push(bullet3);
- self.shootTimer = 150; // Reset to fire twice every 5 seconds
+ self.shootTimer = 100; // Reset to fire three times every 5 seconds
}
return false;
};
return self;
@@ -82,9 +82,9 @@
});
self.speedY = 1.5 + Math.random() * 1.5;
self.movePattern = Math.floor(Math.random() * 3); // 0: straight, 1: zigzag, 2: sine
self.patternOffset = Math.random() * 100;
- self.shootTimer = 150; // Fire twice every 5 seconds (60 FPS * 5 / 2 = 150 frames between shots)
+ self.shootTimer = 100; // Fire three times every 5 seconds (60 FPS * 5 / 3 = 100 frames between shots)
self.update = function () {
self.y += self.speedY;
// Different movement patterns
switch (self.movePattern) {
@@ -106,9 +106,9 @@
bullet.x = self.x;
bullet.y = self.y + 30;
game.addChild(bullet);
enemyBullets.push(bullet);
- self.shootTimer = 150; // Reset to fire twice every 5 seconds
+ self.shootTimer = 100; // Reset to fire three times every 5 seconds
}
// Remove if off bottom of screen
if (self.y > 2732 + 100) {
return true; // Mark for removal