User prompt
silah kulesini ekranın her yerine sürükleyebilelim.
User prompt
her namlunun marmisi ekranın üst kısmına doğru genişlesin.
User prompt
namlu sayısı her 5 wave den sonra artsın.dar açıdan geniş açıya doğru atış yapsın. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
mermi atış sayısı 4 kat artsın.
User prompt
mermiler birbiri arkasına sralansın.
User prompt
mermilerin uzaklığı 4 kat azalsın
User prompt
namlu araları her 5 levelden sonra açılsın 4 kat
User prompt
her 3 level den sonra namlular artsın.
User prompt
mermiler 4 kat hızlansın.
User prompt
mermiler daha hızlı hareket etsin.
User prompt
oyun ekranını aç.
User prompt
hatalı kodları sil.
User prompt
hala düzelmedi
User prompt
Compilation error[L14] hatasını düzelt.
User prompt
error hatalarını düzelt
User prompt
oyun hatalarını düzelt
User prompt
hataları düzelt
User prompt
Derleme hatası[L33] .Hatayı düzelt. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
14 ve 33 satır kodların hatalarını düzelt. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
14 ve 33 satır kodların hatalarını düzelt ↪💡 Consider importing and using the following plugins: @upit/tween.v1
/**** * 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 ****/ // 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; // --- 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)); if (hero && !hero.isDead) { 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 && !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 && !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 && !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();
/****
* 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
****/
// 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;
// --- 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));
if (hero && !hero.isDead) {
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 && !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 && !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 && !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();
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