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 artacak) self.speed = 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 = 2; 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 + Math.floor(wave / 2); for (var i = 0; i < count; i++) { var enemy = new Enemy(); enemy.speed = speed + Math.floor(Math.random() * 1.2); // daha yavaş ve az değişkenlik // 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; // Çoklu ve açılı mermi: 3 mermi, -20, 0, +20 derece var angles = [-20, 0, 20]; for (var i = 0; i < angles.length; i++) { var bullet = new HeroBullet(); bullet.x = hero.x; bullet.y = hero.y - hero.height / 2 - 30; bullet.setAngle(angles[i]); 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: 5 mermi, -35, -17, 0, +17, +35 derece var angles = [-35, -17, 0, 17, 35]; for (var i = 0; i < angles.length; i++) { var bullet = new HeroBullet(); bullet.x = hero.x; bullet.y = hero.y - hero.height / 2 - 30; bullet.setAngle(angles[i]); 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
@@ -75,11 +75,23 @@
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.y += self.speed;
+ self.x += self.vx;
+ self.y += self.vy;
};
return self;
});
@@ -159,13 +171,18 @@
}
// --- Kahraman Otomatik Ateş Fonksiyonu ---
function heroAutoShoot() {
if (!canShoot || hero.isDead) return;
- var bullet = new HeroBullet();
- bullet.x = hero.x;
- bullet.y = hero.y - hero.height / 2 - 30;
- game.addChild(bullet);
- heroBullets.push(bullet);
+ // Çoklu ve açılı mermi: 3 mermi, -20, 0, +20 derece
+ var angles = [-20, 0, 20];
+ for (var i = 0; i < angles.length; i++) {
+ var bullet = new HeroBullet();
+ bullet.x = hero.x;
+ bullet.y = hero.y - hero.height / 2 - 30;
+ bullet.setAngle(angles[i]);
+ game.addChild(bullet);
+ heroBullets.push(bullet);
+ }
lastShootTick = LK.ticks;
}
// --- Güçlendirme Açma Fonksiyonu ---
function tryActivatePowerup() {
@@ -211,19 +228,18 @@
game.update = function () {
// Kahraman otomatik ateş
if (!hero.isDead && LK.ticks - lastShootTick > shootInterval) {
if (powerupActive && powerupType === 'doubleShot') {
- // Çift mermi
- var bullet1 = new HeroBullet();
- bullet1.x = hero.x - 40;
- bullet1.y = hero.y - hero.height / 2 - 30;
- game.addChild(bullet1);
- heroBullets.push(bullet1);
- var bullet2 = new HeroBullet();
- bullet2.x = hero.x + 40;
- bullet2.y = hero.y - hero.height / 2 - 30;
- game.addChild(bullet2);
- heroBullets.push(bullet2);
+ // 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++) {
+ var bullet = new HeroBullet();
+ bullet.x = hero.x;
+ bullet.y = hero.y - hero.height / 2 - 30;
+ bullet.setAngle(angles[i]);
+ game.addChild(bullet);
+ heroBullets.push(bullet);
+ }
lastShootTick = LK.ticks;
} else {
heroAutoShoot();
}
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