User prompt
level sayısını göster 100
User prompt
ekranda göster
Code edit (1 edits merged)
Please save this source code
User prompt
game.js sil
User prompt
(l14) Sil
User prompt
L14 sil
User prompt
her seviyede 5 dalga düşman olsun ve sayıları değişken olsun
User prompt
defans oyunu yap
User prompt
My weapon should be able to reach every part of the screen, be easy to control, have tracers and fire bullets.
User prompt
silahımız ekranın tamamına ulaşabilsin ve kontrolü kolay olsun
User prompt
yıldızlar ve uzay boşluğu arka planda olsun
User prompt
arkaplanı manzara resmi koy
User prompt
müzik ekle
User prompt
düşman çoğaldıkça mermi yoğunluğu artsın
User prompt
düşman hızı yavaş ve her aşamada aynı olsun
User prompt
silahtan çıkan mermiler çoklu olsun ve alana yayılsın
User prompt
düşman hızı yavaş olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Horde Defense: Sonsuz Dalga
Initial prompt
hordo defense tarzında bir oyun yaparmısın
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Düşman Sınıfı var Enemy = Container.expand(function () { var self = Container.call(this); // Düşman grafiği var enemyGfx = self.attachAsset('enemyBox', { anchorX: 0.5, anchorY: 0.5 }); enemyGfx.width = 140; enemyGfx.height = 140; // Hız (her dalgada artmaz, sabit ve yavaş) self.speed = 1.2; // Düşman güncellemesi self.update = function () { self.y += self.speed; }; // Düşman vurulduğunda self.hit = function () { // Yok olma animasyonu tween(self, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 180, easing: tween.cubicOut, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); // Kahraman (Hero) Sınıfı var Hero = Container.expand(function () { var self = Container.call(this); // Kahraman grafiği var heroGfx = self.attachAsset('heroBox', { anchorX: 0.5, anchorY: 0.5 }); // Kahraman boyutunu ayarla (büyük ve kolay kontrol edilebilir) heroGfx.width = 180; heroGfx.height = 180; // Kahraman başlangıç canı self.hp = 1; // Kahraman ölü mü? self.isDead = false; // Kahraman vurulduğunda çağrılır self.hit = function () { if (self.isDead) return; self.isDead = true; // Kırmızıya flaşla LK.effects.flashObject(self, 0xff0000, 600); // Ekranı flaşla LK.effects.flashScreen(0xff0000, 800); // Oyun biter LK.showGameOver(); }; return self; }); // Kahraman Mermisi Sınıfı var HeroBullet = Container.expand(function () { var self = Container.call(this); var bulletGfx = self.attachAsset('heroBullet', { anchorX: 0.5, anchorY: 0.5 }); bulletGfx.width = 40; bulletGfx.height = 80; // Açılı mermi desteği için vx, vy ekle self.speed = -22; self.angle = 0; // derece cinsinden, yukarı doğru 0 self.vx = 0; self.vy = self.speed; self.setAngle = function (deg) { // Dereceyi radyana çevir var rad = deg * Math.PI / 180; self.angle = deg; self.vx = Math.sin(rad) * Math.abs(self.speed); self.vy = -Math.cos(rad) * Math.abs(self.speed); }; self.update = function () { self.x += self.vx; self.y += self.vy; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181c2c }); /**** * Game Code ****/ // --- Global Değişkenler --- // --- Asset Tanımları (otomatik oluşturulacak) --- // Kahraman kutusu // Düşman kutusu // Kahraman mermisi var hero; var enemies = []; var heroBullets = []; var wave = 1; var waveTimer = 0; var waveInterval = 120; // 2 saniye (60fps) var enemySpeedBase = 1.2; // Daha yavaş ve sabit hız var enemyCountBase = 3; var isDragging = false; var dragOffsetX = 0; var dragOffsetY = 0; var canShoot = true; var shootInterval = 18; // Kahraman otomatik ateş hızı (her 0.3 sn) var lastShootTick = 0; var scoreTxt; var waveTxt; var powerupActive = false; var powerupType = null; var powerupTimer = 0; // --- GUI: Skor ve Dalga --- scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); waveTxt = new Text2('1. Dalga', { size: 70, fill: 0xB0E0FF }); waveTxt.anchor.set(0.5, 0); LK.gui.top.addChild(waveTxt); waveTxt.y = 120; // --- Kahramanı Oluştur --- hero = new Hero(); game.addChild(hero); hero.x = 2048 / 2; hero.y = 2732 - 220; // --- Oyun Alanı Sınırları --- var minX = 100 + hero.width / 2; var maxX = 2048 - hero.width / 2; var minY = 2732 - 600; var maxY = 2732 - hero.height / 2; // --- Düşman Dalga Fonksiyonu --- function spawnWave() { var count = enemyCountBase + Math.floor(wave * 0.7); var speed = enemySpeedBase; // Her dalgada sabit hız for (var i = 0; i < count; i++) { var enemy = new Enemy(); enemy.speed = speed; // Sabit hız // Rastgele x, üstte başla var margin = 120; enemy.x = margin + Math.random() * (2048 - 2 * margin); enemy.y = -180 - Math.random() * 200; game.addChild(enemy); enemies.push(enemy); } waveTxt.setText(wave + ". Dalga"); } // --- Kahraman Otomatik Ateş Fonksiyonu --- function heroAutoShoot() { if (!canShoot || hero.isDead) return; // Düşman sayısına göre mermi yoğunluğunu artır var minBullets = 3; var maxBullets = 9; var enemyCount = enemies.length; var bulletCount = minBullets + Math.floor((maxBullets - minBullets) * Math.min(enemyCount, 20) / 20); // 3 ile 9 arası mermi, düşman sayısı 20'ye yaklaştıkça artar if (bulletCount % 2 === 0) bulletCount++; // Tek sayı olsun (simetrik yayılım için) var spread = 40 + Math.min(enemyCount * 2, 60); // Toplam yayılma açısı (derece) var startAngle = -spread / 2; var angleStep = spread / (bulletCount - 1); for (var i = 0; i < bulletCount; i++) { var angle = startAngle + i * angleStep; var bullet = new HeroBullet(); bullet.x = hero.x; bullet.y = hero.y - hero.height / 2 - 30; bullet.setAngle(angle); game.addChild(bullet); heroBullets.push(bullet); } lastShootTick = LK.ticks; } // --- Güçlendirme Açma Fonksiyonu --- function tryActivatePowerup() { if (powerupActive) return; var score = LK.getScore(); if (score >= 20 && !powerupActive) { // İlk güçlendirme: Çift mermi powerupActive = true; powerupType = 'doubleShot'; powerupTimer = 600; // 10 saniye // Bilgilendirici efekt LK.effects.flashObject(hero, 0x00ff00, 800); } } // --- Kahraman Hareketi (Sürükle) --- game.down = function (x, y, obj) { // Sadece kahramanın alt yarısında başlat if (y < 2732 - 700) return; if (hero.isDead) return; isDragging = true; dragOffsetX = x - hero.x; dragOffsetY = y - hero.y; // Hemen pozisyonu güncelle moveHero(x, y); }; game.up = function (x, y, obj) { isDragging = false; }; function moveHero(x, y) { // Sınırları uygula var nx = Math.max(minX, Math.min(maxX, x - dragOffsetX)); var ny = Math.max(minY, Math.min(maxY, y - dragOffsetY)); hero.x = nx; hero.y = ny; } // --- Oyun Alanı Hareketi --- game.move = function (x, y, obj) { if (isDragging && !hero.isDead) { moveHero(x, y); } }; // --- Oyun Güncelleme --- game.update = function () { // Kahraman otomatik ateş if (!hero.isDead && LK.ticks - lastShootTick > shootInterval) { if (powerupActive && powerupType === 'doubleShot') { // Güçlendirme: Düşman sayısına göre DAHA FAZLA mermi ve daha geniş yayılım var minBullets = 5; var maxBullets = 15; var enemyCount = enemies.length; var bulletCount = minBullets + Math.floor((maxBullets - minBullets) * Math.min(enemyCount, 30) / 30); // 5 ile 15 arası mermi, düşman sayısı 30'a yaklaştıkça artar if (bulletCount % 2 === 0) bulletCount++; // Tek sayı olsun var spread = 80 + Math.min(enemyCount * 3, 100); // Toplam yayılma açısı (derece) var startAngle = -spread / 2; var angleStep = spread / (bulletCount - 1); for (var i = 0; i < bulletCount; i++) { var angle = startAngle + i * angleStep; var bullet = new HeroBullet(); bullet.x = hero.x; bullet.y = hero.y - hero.height / 2 - 30; bullet.setAngle(angle); game.addChild(bullet); heroBullets.push(bullet); } lastShootTick = LK.ticks; } else { heroAutoShoot(); } } // Güçlendirme süresi if (powerupActive) { powerupTimer--; if (powerupTimer <= 0) { powerupActive = false; powerupType = null; } } // Mermileri güncelle for (var i = heroBullets.length - 1; i >= 0; i--) { var b = heroBullets[i]; b.update(); // Ekran dışıysa sil if (b.y < -100) { b.destroy(); heroBullets.splice(i, 1); continue; } // Düşmanla çarpışma for (var j = enemies.length - 1; j >= 0; j--) { var e = enemies[j]; if (b.intersects(e)) { // Düşmanı yok et e.hit(); enemies.splice(j, 1); // Skor artır LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); // Güçlendirme kontrolü tryActivatePowerup(); // Mermiyi yok et b.destroy(); heroBullets.splice(i, 1); break; } } } // Düşmanları güncelle for (var k = enemies.length - 1; k >= 0; k--) { var en = enemies[k]; en.update(); // Kahramana çarptı mı? if (!hero.isDead && en.intersects(hero)) { hero.hit(); break; } // Ekran dışıysa sil if (en.y > 2732 + 100) { en.destroy(); enemies.splice(k, 1); } } // Dalga kontrolü if (enemies.length === 0 && !hero.isDead) { wave++; spawnWave(); } // Dalga yazısı animasyonu (her dalga başında kısa büyüt) if (waveTxt.scale.x > 1) { waveTxt.scale.x -= 0.02; waveTxt.scale.y -= 0.02; if (waveTxt.scale.x < 1) { waveTxt.scale.x = 1; waveTxt.scale.y = 1; } } }; // --- İlk Dalga Başlat --- spawnWave();
===================================================================
--- original.js
+++ change.js
@@ -171,15 +171,24 @@
}
// --- Kahraman Otomatik Ateş Fonksiyonu ---
function heroAutoShoot() {
if (!canShoot || hero.isDead) return;
- // Çoklu ve açılı mermi: 3 mermi, -20, 0, +20 derece
- var angles = [-20, 0, 20];
- for (var i = 0; i < angles.length; i++) {
+ // Düşman sayısına göre mermi yoğunluğunu artır
+ var minBullets = 3;
+ var maxBullets = 9;
+ var enemyCount = enemies.length;
+ var bulletCount = minBullets + Math.floor((maxBullets - minBullets) * Math.min(enemyCount, 20) / 20);
+ // 3 ile 9 arası mermi, düşman sayısı 20'ye yaklaştıkça artar
+ if (bulletCount % 2 === 0) bulletCount++; // Tek sayı olsun (simetrik yayılım için)
+ var spread = 40 + Math.min(enemyCount * 2, 60); // Toplam yayılma açısı (derece)
+ var startAngle = -spread / 2;
+ var angleStep = spread / (bulletCount - 1);
+ for (var i = 0; i < bulletCount; i++) {
+ var angle = startAngle + i * angleStep;
var bullet = new HeroBullet();
bullet.x = hero.x;
bullet.y = hero.y - hero.height / 2 - 30;
- bullet.setAngle(angles[i]);
+ bullet.setAngle(angle);
game.addChild(bullet);
heroBullets.push(bullet);
}
lastShootTick = LK.ticks;
@@ -228,15 +237,24 @@
game.update = function () {
// Kahraman otomatik ateş
if (!hero.isDead && LK.ticks - lastShootTick > shootInterval) {
if (powerupActive && powerupType === 'doubleShot') {
- // Güçlendirme: 5 mermi, -35, -17, 0, +17, +35 derece
- var angles = [-35, -17, 0, 17, 35];
- for (var i = 0; i < angles.length; i++) {
+ // Güçlendirme: Düşman sayısına göre DAHA FAZLA mermi ve daha geniş yayılım
+ var minBullets = 5;
+ var maxBullets = 15;
+ var enemyCount = enemies.length;
+ var bulletCount = minBullets + Math.floor((maxBullets - minBullets) * Math.min(enemyCount, 30) / 30);
+ // 5 ile 15 arası mermi, düşman sayısı 30'a yaklaştıkça artar
+ if (bulletCount % 2 === 0) bulletCount++; // Tek sayı olsun
+ var spread = 80 + Math.min(enemyCount * 3, 100); // Toplam yayılma açısı (derece)
+ var startAngle = -spread / 2;
+ var angleStep = spread / (bulletCount - 1);
+ for (var i = 0; i < bulletCount; i++) {
+ var angle = startAngle + i * angleStep;
var bullet = new HeroBullet();
bullet.x = hero.x;
bullet.y = hero.y - hero.height / 2 - 30;
- bullet.setAngle(angles[i]);
+ bullet.setAngle(angle);
game.addChild(bullet);
heroBullets.push(bullet);
}
lastShootTick = LK.ticks;
uzay aracı olsun . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
ahtapot şekilli canavar olsun. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
uzay aracı olsun . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat