User prompt
score yi sola yasla
User prompt
İz olarak silah çıkmasın
User prompt
HEDEF ÜZERİNDEKİ İZ iz olsun
User prompt
SİLAH MERMİ ATSIN
User prompt
Seviye 1 tamamlandı yazısı çıktıktan 5 saniye sonra diğer seviyeye geçsin
User prompt
"Seviye Tamamlandı!" yazısı ile "Sonraki Seviye" yazısı arasında 20 px aralık olsun
User prompt
"Seviye Tamamlandı!" yazısı ile "Sonraki Seviye" yazısı arasında 200 px aralık olsun
User prompt
seviye tamamlandı yazısı sonraki seviye yazısının 200 px üstünde yazsın
User prompt
seviye tamamlandı yazısı sonraki seviye yazısının üstüne gelsin
User prompt
hedeflerden birini vurunca seviye yazısı gitsin diğer seviyeye kadar
User prompt
mermi silahın baktığıyerden çıksın
User prompt
silah fareye baksın
User prompt
elimizde silah olsun ve hedefler sabit olsun
Code edit (1 edits merged)
Please save this source code
User prompt
Target Master: Character Quest
Initial prompt
oyuncu ilk başta karaterini seçsin ve oyuna başlasın oyunda hedefler olsun ve onları vurarak seviye atlayalım 10 seviye olsun
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ // Mermi (Bullet) sınıfı var Bullet = Container.expand(function () { var self = Container.call(this); // Mermi asseti olarak 'mermi' görselini kullan self.asset = self.attachAsset('mermi', { anchorX: 0.5, anchorY: 1 // Silah ucundan çıksın }); self.asset.width = 32; self.asset.height = 80; // Mermi yönü ve hızı self.speedX = 0; self.speedY = -50; // default yukarı self.update = function () { self.x += self.speedX; self.y += self.speedY; }; return self; }); // Karakter sınıfı var PlayerCharacter = Container.expand(function () { var self = Container.call(this); self.type = 'box'; // default self.asset = null; self.gun = null; self.setType = function (type) { self.removeChildren(); self.type = type; if (type === 'box') { self.asset = self.attachAsset('charBox', { anchorX: 0.5, anchorY: 0.5 }); } else { self.asset = self.attachAsset('charEllipse', { anchorX: 0.5, anchorY: 0.5 }); } // Add gun asset (simple yellow ellipse as placeholder) self.gun = self.attachAsset('hitEffect', { anchorX: 0.5, anchorY: 1, x: 0, y: -80 }); self.gun.width = 40; self.gun.height = 80; self.gun.tint = 0xffff00; }; self.setType('box'); return self; }); // Hedef (düşman/nesne) sınıfı var Target = Container.expand(function () { var self = Container.call(this); self.asset = self.attachAsset('target', { anchorX: 0.5, anchorY: 0.5 }); self.isHit = false; self.hitEffect = null; self.speedY = 0; self.speedX = 0; self.setRandomSpeed = function (level) { // Hedefler sabit, hareket etmeyecek self.speedY = 0; self.speedX = 0; }; self.update = function () { if (self.isHit) return; // Sabit hedef, hareket yok }; self.hit = function () { if (self.isHit) return; self.isHit = true; // Hedefin üzerinde iz bırak var iz = self.attachAsset('iz', { anchorX: 0.5, anchorY: 0.5 }); iz.x = 0; iz.y = 0; iz.alpha = 0.8; iz.width = 60; iz.height = 60; // Vuruş efekti self.hitEffect = self.attachAsset('hitEffect', { anchorX: 0.5, anchorY: 0.5 }); self.hitEffect.alpha = 1; tween(self.hitEffect, { alpha: 0 }, { duration: 400, onFinish: function onFinish() { self.destroy(); } }); LK.getSound('hit').play(); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Oyun değişkenleri // Karakterler için kutu ve elips şeklinde iki farklı karakter // Hedefler için kırmızı daire // Vuruş efekti için küçük sarı daire // Atış efekti için ses var player = null; var targets = []; var level = 1; var maxLevel = 10; var targetsToSpawn = 0; var targetsLeft = 0; var score = 0; var isSelectingCharacter = true; var selectedType = 'box'; var levelText = null; var scoreText = null; var infoText = null; var nextButton = null; var dragNode = null; // GUI elemanları levelText = new Text2('', { size: 90, fill: "#fff" }); levelText.anchor.set(0.5, 0); LK.gui.top.addChild(levelText); scoreText = new Text2('', { size: 90, fill: "#fff" }); // Sola yasla: anchor'ı (0,0) yap ve gui.topLeft'e ekle scoreText.anchor.set(0, 0); LK.gui.topLeft.addChild(scoreText); infoText = new Text2('', { size: 80, fill: "#fff" }); infoText.anchor.set(0.5, 0.5); LK.gui.center.addChild(infoText); // Karakter seçimi ekranı var charBoxBtn = LK.getAsset('charBox', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2 - 220, y: 2732 / 2 - 100 }); var charEllipseBtn = LK.getAsset('charEllipse', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2 + 220, y: 2732 / 2 - 100 }); var charBoxLabel = new Text2('Kare', { size: 60, fill: "#fff" }); charBoxLabel.anchor.set(0.5, 0); charBoxLabel.x = charBoxBtn.x; charBoxLabel.y = charBoxBtn.y + 120; var charEllipseLabel = new Text2('Elips', { size: 60, fill: "#fff" }); charEllipseLabel.anchor.set(0.5, 0); charEllipseLabel.x = charEllipseBtn.x; charEllipseLabel.y = charEllipseBtn.y + 120; game.addChild(charBoxBtn); game.addChild(charEllipseBtn); game.addChild(charBoxLabel); game.addChild(charEllipseLabel); infoText.setText('Karakterini Seç!'); // Karakter seçimi eventleri charBoxBtn.down = function (x, y, obj) { selectedType = 'box'; charBoxBtn.scaleX = 1.2; charBoxBtn.scaleY = 1.2; charEllipseBtn.scaleX = 1; charEllipseBtn.scaleY = 1; }; charEllipseBtn.down = function (x, y, obj) { selectedType = 'ellipse'; charEllipseBtn.scaleX = 1.2; charEllipseBtn.scaleY = 1.2; charBoxBtn.scaleX = 1; charBoxBtn.scaleY = 1; }; // Başlat butonu var startBtn = new Text2('Başla', { size: 100, fill: 0x00FF00 }); startBtn.anchor.set(0.5, 0.5); startBtn.x = 2048 / 2; startBtn.y = 2732 / 2 + 300; game.addChild(startBtn); startBtn.down = function (x, y, obj) { isSelectingCharacter = false; // Temizle game.removeChild(charBoxBtn); game.removeChild(charEllipseBtn); game.removeChild(charBoxLabel); game.removeChild(charEllipseLabel); game.removeChild(startBtn); infoText.setText(''); startLevel(1); }; // Seviye başlatma fonksiyonu function startLevel(lvl) { level = lvl; targetsToSpawn = 3 + level * 2; targetsLeft = targetsToSpawn; score = 0; updateLevelText(); updateScoreText(); infoText.setText('Seviye ' + level); // Show level text at the start of each level updateLevelText(); // Karakteri oluştur if (player) { player.destroy(); } player = new PlayerCharacter(); player.setType(selectedType); player.x = 2048 / 2; player.y = 2732 - 350; game.addChild(player); // Hedefleri oluştur for (var i = 0; i < targetsToSpawn; i++) { spawnTarget(); } } // Hedef oluşturma fonksiyonu function spawnTarget() { var t = new Target(); // Sabit hedefler: 3 satır, eşit aralıklı, yukarıdan aşağıya var row = Math.floor(targets.length / 4); var col = targets.length % 4; var marginX = 300; var marginY = 350; var spacingX = (2048 - 2 * marginX) / 3; var spacingY = 250; t.x = marginX + col * spacingX; t.y = marginY + row * spacingY; t.setRandomSpeed(level); targets.push(t); game.addChild(t); } // GUI güncelleme function updateLevelText() { levelText.setText('Seviye: ' + level); } function updateScoreText() { scoreText.setText('Puan: ' + score); } // Oyun bittiğinde veya seviye tamamlandığında gösterilecek buton function showNextButton(text, cb) { if (nextButton) { LK.gui.center.removeChild(nextButton); } nextButton = new Text2(text, { size: 100, fill: 0x00FF00 }); nextButton.anchor.set(0.5, 0.5); LK.gui.center.addChild(nextButton); nextButton.down = function (x, y, obj) { LK.gui.center.removeChild(nextButton); nextButton = null; cb(); }; } // Oyuncu karakterini sürükleme game.down = function (x, y, obj) { if (isSelectingCharacter) return; if (!player) return; // Karaktere tıklanırsa sürükle var local = player.toLocal(game.toGlobal({ x: x, y: y })); if (local.x > -90 && local.x < 90 && local.y > -90 && local.y < 90) { dragNode = player; } }; game.move = function (x, y, obj) { if (isSelectingCharacter) return; if (dragNode) { // Sürüklenen karakteri sınırlar içinde hareket ettir var px = Math.max(90, Math.min(2048 - 90, x)); var py = Math.max(2732 / 2 + 100, Math.min(2732 - 90, y)); dragNode.x = px; dragNode.y = py; } // Silahı fareye/touch'a döndür if (player && player.gun) { // player'ın pozisyonunu globalden al, mouse/touch pozisyonu zaten global var dx = x - player.x; var dy = y - (player.y - 80); // silahın ucu biraz yukarıda player.gun.rotation = Math.atan2(dy, dx) + Math.PI / 2; } }; game.up = function (x, y, obj) { dragNode = null; }; // Ekrana dokununca ateş et (mermi fırlat) game.downTarget = function (x, y, obj) { if (isSelectingCharacter) return; if (!player) return; // Sadece oyuncunun üst yarısına dokununca ateş etsin if (y < player.y - 100) { // Silahı ateş edilen noktaya döndür if (player.gun) { var dx = x - player.x; var dy = y - (player.y - 80); player.gun.rotation = Math.atan2(dy, dx) + Math.PI / 2; } // Mermi oluştur var bullet = new Bullet(); // Silahın ucunun pozisyonunu hesapla (player.x, player.y - 80 silahın pivot noktası) // Silahın ucunun global pozisyonunu bulmak için trigonometrik olarak hesapla var gunLength = 80; // Silahın uzunluğu (player.gun.height) var gunAngle = player.gun.rotation - Math.PI / 2; // player.gun.rotation = Math.atan2(dy, dx) + Math.PI/2 var gunTipX = player.x + Math.cos(gunAngle) * gunLength; var gunTipY = player.y - 80 + Math.sin(gunAngle) * gunLength; bullet.x = gunTipX; bullet.y = gunTipY; // Mermiye yön ver bullet.speedX = Math.cos(gunAngle) * 50; bullet.speedY = Math.sin(gunAngle) * 50; // Mermiyi döndür (görsel olarak yönüne baksın) bullet.asset.rotation = gunAngle + Math.PI / 2; game.addChild(bullet); if (!game.bullets) game.bullets = []; game.bullets.push(bullet); } }; // Tüm hedefleri temizle function clearTargets() { for (var i = 0; i < targets.length; i++) { targets[i].destroy(); } targets = []; } // Oyun güncelleme game.update = function () { if (isSelectingCharacter) return; // Hedefleri güncelle for (var i = targets.length - 1; i >= 0; i--) { var t = targets[i]; if (t.isHit && t.hitEffect && t.hitEffect.alpha <= 0) { t.destroy(); targets.splice(i, 1); continue; } t.update(); } // Mermileri güncelle if (!game.bullets) game.bullets = []; for (var b = game.bullets.length - 1; b >= 0; b--) { var bullet = game.bullets[b]; bullet.update(); // Ekran dışına çıkan mermiyi sil if (bullet.y < -50) { bullet.destroy(); game.bullets.splice(b, 1); continue; } // Mermi-hedef çarpışması for (var i = targets.length - 1; i >= 0; i--) { var t = targets[i]; if (t.isHit) continue; if (bullet.intersects(t)) { t.hit(); bullet.destroy(); game.bullets.splice(b, 1); score += 10; updateScoreText(); targetsLeft--; if (targetsLeft <= 0) { // Hide level text until next level starts levelText.setText(''); if (level < maxLevel) { infoText.setText('Seviye ' + level + ' Tamamlandı!'); // 'Seviye tamamlandı' yazısını butonun üstünde göstermek için geçici bir Text2 ekle var levelCompleteText = new Text2('Seviye tamamlandı', { size: 90, fill: "#fff" }); levelCompleteText.anchor.set(0.5, 1); // 'Sonraki Seviye' butonunun geleceği y: 1366, 20px üstü: 1346 // Butonun y'si 1366, yazı 20px üstte olacak şekilde ayarlanacak var nextButtonY = 1366; levelCompleteText.x = 1024; levelCompleteText.y = nextButtonY - 20; LK.gui.center.addChild(levelCompleteText); showNextButton('Sonraki Seviye', function () { infoText.setText(''); if (levelCompleteText && levelCompleteText.parent) { LK.gui.center.removeChild(levelCompleteText); levelCompleteText = null; } clearTargets(); startLevel(level + 1); }); // Sonraki Seviye butonunun y'sini 1366 olarak ayarla if (nextButton) { nextButton.y = nextButtonY; } // 5 saniye sonra otomatik olarak sonraki seviyeye geç if (typeof nextLevelTimeout !== "undefined") { LK.clearTimeout(nextLevelTimeout); } nextLevelTimeout = LK.setTimeout(function () { if (nextButton && nextButton.parent) { LK.gui.center.removeChild(nextButton); nextButton = null; } if (levelCompleteText && levelCompleteText.parent) { LK.gui.center.removeChild(levelCompleteText); levelCompleteText = null; } infoText.setText(''); clearTargets(); startLevel(level + 1); }, 5000); } else { infoText.setText('Tebrikler! Tüm seviyeler tamamlandı!'); showNextButton('Tekrar Oyna', function () { infoText.setText(''); clearTargets(); startLevel(1); }); } } break; } } } }; // Tüm ekrana dokunma eventini hedef vurmak için kullan game.on('down', function (x, y, obj) { game.downTarget(x, y, obj); });
===================================================================
--- original.js
+++ change.js
@@ -83,9 +83,17 @@
self.hit = function () {
if (self.isHit) return;
self.isHit = true;
// Hedefin üzerinde iz bırak
- // (iz eklenmiyor)
+ var iz = self.attachAsset('iz', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ iz.x = 0;
+ iz.y = 0;
+ iz.alpha = 0.8;
+ iz.width = 60;
+ iz.height = 60;
// Vuruş efekti
self.hitEffect = self.attachAsset('hitEffect', {
anchorX: 0.5,
anchorY: 0.5
@@ -143,10 +151,11 @@
scoreText = new Text2('', {
size: 90,
fill: "#fff"
});
-scoreText.anchor.set(0.5, 0);
-LK.gui.topRight.addChild(scoreText);
+// Sola yasla: anchor'ı (0,0) yap ve gui.topLeft'e ekle
+scoreText.anchor.set(0, 0);
+LK.gui.topLeft.addChild(scoreText);
infoText = new Text2('', {
size: 80,
fill: "#fff"
});