User prompt
oyundaki mevcut paramızı ekranın sağ üst kısmında görünebilecek şekilde oyuna entegre et
User prompt
oyuna para sistemi ekle her düşman öldürüldüğünde stone çağında düşman başı 1 para medieval çağında düşman başı 2 para modern çağ için 3 para şeklidne ayarla
User prompt
npcleri ana karakterden uzaklaştır
User prompt
Oyuncumuzun yanına destekleme amaçlı yapay zeka yönetiminde 2 adet npc ekle
User prompt
düşmanların doğma noktası sağ taraftan olmalı
User prompt
düşman geliş yönünü karmaşık yap ve düşman gelen sayısını arttır
User prompt
Please fix the bug: 'Uncaught ReferenceError: Projectile is not defined' in or related to this line: 'var proj = new Projectile();' Line Number: 349
User prompt
enemy için tower ekle ve assets dosyası oluştur
User prompt
Please fix the bug: 'Enemy is not defined' in or related to this line: 'var enemy = new Enemy();' Line Number: 274
User prompt
Please fix the bug: 'Defender is not defined' in or related to this line: 'defender = new Defender();' Line Number: 152
User prompt
Please fix the bug: 'EnemyTower is not defined' in or related to this line: 'var defenderTower = new EnemyTower();' Line Number: 112
User prompt
savunma için yapılan assetsleri saldırı için kopyala ve oyuna ekle
User prompt
tower assetslerının pozisyonunu haritanın orta kısmının biraz üstüne konumlandır
User prompt
Tower assetslerini nir miktar sol tarafta konumlandır
User prompt
oyuncu karakteri bir miktar sağa kaydır kule assetslerinin önünde konumlandır
User prompt
sesleri duyulabilir seviyede arttır
User prompt
eklediğin soundların sesini arttır
User prompt
her çağ için çağlara uyumlu şekilde soundlar oluştur ve soundları kullan
User prompt
her çağ için savunma kulesi assetsi ekle
User prompt
taş devri için sildiğim assetsi geri ekle
User prompt
savunma kulesi için assets oluştur
User prompt
savunma tarafı için kule entegre et
User prompt
oyuncu karakterin hareket etmesini engelle
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // EnemyTower class (minimal implementation, can be expanded as needed) var EnemyTower = Container.expand(function () { var self = Container.call(this); // Store current age for asset switching self.currentAge = 0; // Tower asset references for each age self.towerAssets = [self.attachAsset('tower_stone', { anchorX: 0.5, anchorY: 0.5, visible: true }), self.attachAsset('tower_medieval', { anchorX: 0.5, anchorY: 0.5, visible: false }), self.attachAsset('tower_modern', { anchorX: 0.5, anchorY: 0.5, visible: false })]; // Set tower appearance by age self.setAge = function (age) { self.currentAge = age; for (var i = 0; i < self.towerAssets.length; i++) { self.towerAssets[i].visible = i === age; } }; // Default to age 0 self.setAge(0); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Sound assets for each age and action // Savunma kulesi assetleri (her çağ için farklı) // Savunma kulesi assetleri (her çağ için) // Geçiş efekti için // Düşmanlar (çağa göre farklı renkler) // Farklı çağlar için mermi/ok/kurşun // Silahlar ve çağlar için farklı renklerde savunma birimi // Oyun parametreleri var AGES = [{ name: "Taş Çağı", scoreToNext: 10 }, { name: "Orta Çağ", scoreToNext: 25 }, { name: "Modern Çağ", scoreToNext: 50 }]; var currentAge = 0; var score = 0; var wave = 1; var enemies = []; var projectiles = []; var defender = null; var dragNode = null; var lastTouch = { x: 1024, y: 2300 }; var canShoot = true; // Ateş hızı çağlara göre: taş 200ms, ortaçağ 120ms, modern 60ms var shootCooldowns = [200, 120, 60]; var shootCooldown = shootCooldowns[0]; var lastShotTime = 0; var ageFlash = null; var ageText = null; var scoreTxt = null; var waveTxt = null; var ageTxt = null; var gameOver = false; // Arka planlar: Her çağ için bir arka plan asset'i oluştur ve ekle var backgrounds = [LK.getAsset('bg_stone', { anchorX: 0, anchorY: 0, x: 0, y: 0 }), LK.getAsset('bg_medieval', { anchorX: 0, anchorY: 0, x: 0, y: 0 }), LK.getAsset('bg_modern', { anchorX: 0, anchorY: 0, x: 0, y: 0 })]; // Sadece ilk çağın arka planını göster, diğerlerini gizle for (var i = 0; i < backgrounds.length; i++) { if (i === 0) { backgrounds[i].visible = true; } else { backgrounds[i].visible = false; } game.addChild(backgrounds[i]); } // Savunma kulesi oluştur ve ekle var defenderTower = new EnemyTower(); defenderTower.setAge(0); defenderTower.x = 180; // Kuleyi daha sola al defenderTower.y = 1000; // Haritanın ortasının biraz üstü (1366 merkez, 1000 üstte) game.addChild(defenderTower); // Savunma birimini oluştur ve kuleye göre daha sağda konumlandır defender = new Defender(); defender.x = 600; defender.y = 1366; game.addChild(defender); // Skor ve çağ göstergeleri scoreTxt = new Text2('0', { size: 100, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); ageTxt = new Text2(AGES[currentAge].name, { size: 70, fill: 0xFFE066 }); ageTxt.anchor.set(0.5, 0); LK.gui.top.addChild(ageTxt); waveTxt = new Text2('Dalga: 1', { size: 60, fill: "#fff" }); waveTxt.anchor.set(0.5, 0); LK.gui.top.addChild(waveTxt); // GUI pozisyonları scoreTxt.y = 20; scoreTxt.x = 2048 / 2; ageTxt.y = 140; ageTxt.x = 2048 / 2; waveTxt.y = 220; waveTxt.x = 2048 / 2; // Çağ geçiş efekti function showAgeFlash(newAge) { if (ageFlash) { ageFlash.destroy(); ageFlash = null; } ageFlash = LK.getAsset('age_flash', { anchorX: 0, anchorY: 0, x: 0, y: 0, alpha: 0.0 }); game.addChild(ageFlash); ageFlash.alpha = 0.8; var txt = new Text2(AGES[newAge].name + "!", { size: 180, fill: "#222" }); txt.anchor.set(0.5, 0.5); txt.x = 2048 / 2; txt.y = 2732 / 2; game.addChild(txt); // Play age-up sound for new age if (newAge === 0) { LK.getSound('ageup_stone').play(); } else if (newAge === 1) { LK.getSound('ageup_medieval').play(); } else if (newAge === 2) { LK.getSound('ageup_modern').play(); } // Savunma kulesi çağını güncelle if (typeof defenderTower !== "undefined" && defenderTower.setAge) { defenderTower.setAge(newAge); } // Arka planı güncelle: Sadece yeni çağın arka planını göster for (var i = 0; i < backgrounds.length; i++) { backgrounds[i].visible = i === newAge; } tween(ageFlash, { alpha: 0 }, { duration: 1200, easing: tween.linear, onFinish: function onFinish() { ageFlash.destroy(); txt.destroy(); ageFlash = null; } }); tween(txt, { alpha: 0 }, { duration: 1200, easing: tween.linear }); } // Düşman dalgası oluştur function spawnWave() { var count = 3 + wave; // Dalga başına düşman sayısı artar var minY = 180, maxY = 2732 - 180; for (var i = 0; i < count; i++) { var enemy = new Enemy(); enemy.setAge(currentAge); enemy.x = 2048 + 150 + i * 180; // Tüm düşmanlar aynı yatay çizgide hareket etsin (ekranın ortası) enemy.y = 1366; // Hız çağ ve dalgaya göre artar (yavaşlatıldı) enemy.speed = 3 + currentAge * 1 + Math.floor(wave / 3); enemies.push(enemy); game.addChild(enemy); } } // İlk dalga spawnWave(); // Sürükleme ve ateşleme function handleMove(x, y, obj) { // Defender movement is disabled; do nothing here } game.down = function (x, y, obj) { // Savunma birimini sürükleme devre dışı if (!gameOver) { handleMove(x, y, obj); // Ateşle tryShoot(x, y); } }; game.move = function (x, y, obj) { handleMove(x, y, obj); }; game.up = function (x, y, obj) { // Dragging disabled, do not set dragNode }; // Ateşleme fonksiyonu function tryShoot(x, y) { var now = Date.now(); if (canShoot && now - lastShotTime > shootCooldown) { var proj = new Projectile(); proj.setAge(currentAge); proj.x = defender.x + 80; proj.y = defender.y; proj.setTarget(x, y); projectiles.push(proj); game.addChild(proj); lastShotTime = now; // Play shoot sound for current age if (currentAge === 0) { LK.getSound('shoot_stone').play(); } else if (currentAge === 1) { LK.getSound('shoot_medieval').play(); } else if (currentAge === 2) { LK.getSound('shoot_modern').play(); } } } // Oyun güncelleme game.update = function () { if (gameOver) return; // Mermileri güncelle for (var i = projectiles.length - 1; i >= 0; i--) { var p = projectiles[i]; p.update(); // Ekran dışıysa sil if (p.x < -100 || p.x > 2148) { p.destroy(); projectiles.splice(i, 1); } } // Düşmanları güncelle for (var j = enemies.length - 1; j >= 0; j--) { var e = enemies[j]; e.update(); // Düşman savunma birimine ulaştıysa oyun biter if (e.intersects(defender)) { LK.effects.flashScreen(0xff0000, 1000); gameOver = true; LK.showGameOver(); return; } // Düşman ekranın solundan geçtiyse oyun biter if (e.x < -100) { LK.effects.flashScreen(0xff0000, 1000); gameOver = true; LK.showGameOver(); return; } // Mermi ile çarpışma for (var k = projectiles.length - 1; k >= 0; k--) { var p = projectiles[k]; if (e.intersects(p)) { // Düşman ve mermi yok olur, skor artar e.destroy(); p.destroy(); enemies.splice(j, 1); projectiles.splice(k, 1); // Play hit sound for current age if (currentAge === 0) { LK.getSound('hit_stone').play(); } else if (currentAge === 1) { LK.getSound('hit_medieval').play(); } else if (currentAge === 2) { LK.getSound('hit_modern').play(); } score += 1; LK.setScore(score); scoreTxt.setText(score); // Çağ atlama kontrolü if (currentAge < AGES.length - 1 && score >= AGES[currentAge].scoreToNext) { currentAge += 1; defender.setAge(currentAge); showAgeFlash(currentAge); ageTxt.setText(AGES[currentAge].name); // Çağ atladıkça ateş hızını güncelle shootCooldown = shootCooldowns[currentAge]; } // Kazanma kontrolü if (score >= AGES[AGES.length - 1].scoreToNext) { LK.showYouWin(); gameOver = true; return; } break; } } } // Dalga bitti mi? if (enemies.length === 0 && !gameOver) { wave += 1; waveTxt.setText('Dalga: ' + wave); spawnWave(); } }; // Oyun başında çağ ve skorları sıfırla function resetGame() { currentAge = 0; score = 0; wave = 1; enemies = []; projectiles = []; defender.setAge(0); shootCooldown = shootCooldowns[0]; defender.x = 180; defender.y = 1366; // Savunma kulesini de sıfırla if (typeof defenderTower !== "undefined" && defenderTower.setAge) { defenderTower.setAge(0); defenderTower.x = 180; defenderTower.y = 1000; // Haritanın ortasının biraz üstü } scoreTxt.setText('0'); ageTxt.setText(AGES[0].name); waveTxt.setText('Dalga: 1'); gameOver = false; // Arka planı sıfırla: Sadece ilk çağın arka planı görünsün for (var i = 0; i < backgrounds.length; i++) { backgrounds[i].visible = i === 0; } } // Oyun yeniden başlatıldığında sıfırla LK.on('gameStart', function () { resetGame(); // Tüm düşman ve mermileri sil for (var i = 0; i < enemies.length; i++) { enemies[i].destroy(); } for (var j = 0; j < projectiles.length; j++) { projectiles[j].destroy(); } enemies = []; projectiles = []; spawnWave(); });
===================================================================
--- original.js
+++ change.js
@@ -3,8 +3,42 @@
****/
var tween = LK.import("@upit/tween.v1");
/****
+* Classes
+****/
+// EnemyTower class (minimal implementation, can be expanded as needed)
+var EnemyTower = Container.expand(function () {
+ var self = Container.call(this);
+ // Store current age for asset switching
+ self.currentAge = 0;
+ // Tower asset references for each age
+ self.towerAssets = [self.attachAsset('tower_stone', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ visible: true
+ }), self.attachAsset('tower_medieval', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ visible: false
+ }), self.attachAsset('tower_modern', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ visible: false
+ })];
+ // Set tower appearance by age
+ self.setAge = function (age) {
+ self.currentAge = age;
+ for (var i = 0; i < self.towerAssets.length; i++) {
+ self.towerAssets[i].visible = i === age;
+ }
+ };
+ // Default to age 0
+ self.setAge(0);
+ return self;
+});
+
+/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x222222
taş devri döneminde savaşçı. In-Game asset. 2d. High contrast. No shadows. taş devri asker
Ortaçağ dönemi savaşçı. In-Game asset. 2d. High contrast. No shadows
Modern çağ dönemi savaşçı. In-Game asset. 2d. High contrast. No shadows
Taş devri düşman. In-Game asset. 2d. High contrast. No shadows
Modern çağ düşman. In-Game asset. 2d. High contrast. No shadows
Orta çağ dönemi düşman. In-Game asset. 2d. High contrast. No shadows
Taş devri cephane mermisi. In-Game asset. 2d. High contrast. No shadows
Modern çağ dönemi cephane mermisi. In-Game asset. 2d. High contrast. No shadows
Orta çağ dönemi silah mermisi. In-Game asset. 2d. High contrast. No shadows
Taş devri arka plan. In-Game asset. 2d. High contrast. No shadows
Modern çağ için savaş arka planı. In-Game asset. 2d. High contrast. No shadows
Orta çağ dönemi için savaş arka planı. In-Game asset. 2d. High contrast. No shadows
Taş devri Kule. In-Game asset. 2d. High contrast. No shadows
Orta çağ dönemi kule savunma. In-Game asset. 2d. High contrast. No shadows
modern çağ dönemi kule savunma. In-Game asset. 2d. High contrast. No shadows