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; // Tracer efekti için bir iz bırakma noktası oluştur var tracer = LK.getAsset('heroBullet', { anchorX: 0.5, anchorY: 1, width: 10, height: 60, color: 0x00e0ff }); tracer.alpha = 0.25; tracer.y = bulletGfx.height / 2; self.addChild(tracer); // 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); // Tracer açısını da ayarla tracer.rotation = rad; }; self.update = function () { self.x += self.vx; self.y += self.vy; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181c2c }); /**** * Game Code ****/ // Kahraman mermisi // Düşman kutusu // Kahraman kutusu // --- Asset Tanımları (otomatik oluşturulacak) --- // --- Global Değişkenler --- 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; // --- Uzay Arkaplanı: Yıldızlar ve Uzay Boşluğu --- // Derin uzay rengi için bir kutu ekle var spaceBg = LK.getAsset('manzara', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2, width: 2048, height: 2732, color: 0x101024 // Koyu uzay rengi }); game.addChild(spaceBg); // Yıldızlar için parametreler var STAR_COUNT = 80; var stars = []; for (var i = 0; i < STAR_COUNT; i++) { var starSize = 2 + Math.random() * 3; var star = LK.getAsset('manzara', { anchorX: 0.5, anchorY: 0.5, width: starSize, height: starSize, color: 0xffffff }); star.x = Math.random() * 2048; star.y = Math.random() * 2732; star.alpha = 0.5 + Math.random() * 0.5; star.speed = 0.7 + Math.random() * 0.7; // Farklı hızlarda kayma game.addChild(star); stars.push(star); } // Oyun güncellemesinde yıldızları hareket ettir var oldGameUpdate = game.update; game.update = function () { // Yıldızları aşağı kaydır for (var i = 0; i < stars.length; i++) { stars[i].y += stars[i].speed; if (stars[i].y > 2732) { stars[i].y = -5; stars[i].x = Math.random() * 2048; } } if (typeof oldGameUpdate === "function") oldGameUpdate(); }; // --- Kahramanı Oluştur --- hero = new Hero(); game.addChild(hero); hero.x = 2048 / 2; hero.y = 2732 - 220; // --- Oyun Alanı Sınırları --- // Kahraman ekranın tamamında hareket edebilsin // (minX, maxX, minY, maxY değerleri hero oluşturulduktan sonra güncellenmeli) var minX = 0 + 90; var maxX = 2048 - 90; var minY = 0 + 90; var maxY = 2732 - 90; // --- 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) { // Her yerden sürükleme başlasın if (hero.isDead) return; isDragging = true; // Sürükleme başlangıcında kahramanın merkezine göre offset al dragOffsetX = 0; dragOffsetY = 0; moveHero(x, y); }; game.up = function (x, y, obj) { isDragging = false; }; function moveHero(x, y) { // Sınırları uygula (ekranın tamamı erişilebilir) // minX ve maxX, minY ve maxY değerlerini 0 ve ekran boyutuna göre ayarla var nx = Math.max(0 + hero.width / 2, Math.min(2048 - hero.width / 2, x - dragOffsetX)); var ny = Math.max(0 + hero.height / 2, Math.min(2732 - hero.height / 2, 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(); // Müzik başlat (loop açık, fade ile yumuşak başlat) LK.playMusic('1a439', { fade: { start: 0, end: 1, duration: 1200 } });
===================================================================
--- original.js
+++ change.js
@@ -75,8 +75,19 @@
anchorY: 0.5
});
bulletGfx.width = 40;
bulletGfx.height = 80;
+ // Tracer efekti için bir iz bırakma noktası oluştur
+ var tracer = LK.getAsset('heroBullet', {
+ anchorX: 0.5,
+ anchorY: 1,
+ width: 10,
+ height: 60,
+ color: 0x00e0ff
+ });
+ tracer.alpha = 0.25;
+ tracer.y = bulletGfx.height / 2;
+ self.addChild(tracer);
// 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;
@@ -86,8 +97,10 @@
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);
+ // Tracer açısını da ayarla
+ tracer.rotation = rad;
};
self.update = function () {
self.x += self.vx;
self.y += self.vy;
@@ -104,13 +117,13 @@
/****
* Game Code
****/
-// --- Global Değişkenler ---
-// --- Asset Tanımları (otomatik oluşturulacak) ---
-// Kahraman kutusu
-// Düşman kutusu
// Kahraman mermisi
+// Düşman kutusu
+// Kahraman kutusu
+// --- Asset Tanımları (otomatik oluşturulacak) ---
+// --- Global Değişkenler ---
var hero;
var enemies = [];
var heroBullets = [];
var wave = 1;
@@ -193,12 +206,13 @@
hero.x = 2048 / 2;
hero.y = 2732 - 220;
// --- Oyun Alanı Sınırları ---
// Kahraman ekranın tamamında hareket edebilsin
-var minX = hero.width / 2;
-var maxX = 2048 - hero.width / 2;
-var minY = hero.height / 2;
-var maxY = 2732 - hero.height / 2;
+// (minX, maxX, minY, maxY değerleri hero oluşturulduktan sonra güncellenmeli)
+var minX = 0 + 90;
+var maxX = 2048 - 90;
+var minY = 0 + 90;
+var maxY = 2732 - 90;
// --- Düşman Dalga Fonksiyonu ---
function spawnWave() {
var count = enemyCountBase + Math.floor(wave * 0.7);
var speed = enemySpeedBase; // Her dalgada sabit hız
@@ -255,20 +269,21 @@
game.down = function (x, y, obj) {
// Her yerden sürükleme başlasın
if (hero.isDead) return;
isDragging = true;
- dragOffsetX = x - hero.x;
- dragOffsetY = y - hero.y;
- // Hemen pozisyonu güncelle
+ // Sürükleme başlangıcında kahramanın merkezine göre offset al
+ dragOffsetX = 0;
+ dragOffsetY = 0;
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));
+ // Sınırları uygula (ekranın tamamı erişilebilir)
+ // minX ve maxX, minY ve maxY değerlerini 0 ve ekran boyutuna göre ayarla
+ var nx = Math.max(0 + hero.width / 2, Math.min(2048 - hero.width / 2, x - dragOffsetX));
+ var ny = Math.max(0 + hero.height / 2, Math.min(2732 - hero.height / 2, y - dragOffsetY));
hero.x = nx;
hero.y = ny;
}
// --- Oyun Alanı Hareketi ---
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