User prompt
5 çeşit madenci resmi oluştur
User prompt
Cevherler %100 daha yavaş kazılsın
User prompt
Herkes %50 daha yavaş hareket etsin. Seviye yükseltimi ile bu sayı Her seviye %2 artacak şekilde ayarlansın.
User prompt
Bütün yazı fontunu 36 yap.
User prompt
5 farklı müşteri resim dosyası oluştur
User prompt
Seviye panelini, Seviye yazılarını, Seviye yükseltme butonunu hizalı şekilde yeniden boyutlandır.
User prompt
Bütün yazıların büyüklüğünü cevher yazı boyutu ile aynı olsun.
User prompt
Bu panel içerisine seviye yükseltmek için butonlar ve seviye yükseltmeye maliyet ekle.
User prompt
Fabrikaların, mağazaların, şehirlerin ve çalışanların seviyesi olsun. Bu seviyeleri geliştirmek ve takip etmek için sol alt köşeye bir panel oluştur.
User prompt
10 farklı cevher kaynağı oluştur.
User prompt
Müşteriye resim oluştur
User prompt
Taşıyıcılara resim oluştur
User prompt
Araştırmacı cevher bulduktan sonra başlangıç yerinde beklesin.
User prompt
background resim dosyası oluştur.
User prompt
background resim dosyası oluştur.
User prompt
background dosyası oluştur.
User prompt
Arkaplan ile ilgili renkli bir resim oluştur
User prompt
Çalışanların başladığı konuma yere bir renkli resim oluştur.
User prompt
Şehire bir renk resmi ekle
User prompt
Şehiri haritanın soluna üst tarafına taşı.
User prompt
Mağaza ürünleri otomatik satmasın. Oyuna şehir ekle. Şehirden müşteriler gelip ürünleri mağazadan alsınlar.
User prompt
Oyuna Araştırmacı ekle. Bu araştırmacılar maden bittiğinde haritanın herhangi bir yerinde rastgele yeni bir maden bulsunlar.
User prompt
Madenciler cevheri hemen almasınlar. Cevher başında cevheri kazmaları için eline kazma ikonu ekle. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Madenci al yazısı altına, taşıyıcı al yazısını ekle.
User prompt
Oyuna taşıyıcı ekle. Ürünleri mağazaya taşıyan taşıyıcıların olması ile ilgili kod ekle. Ürünler otomatik olarak mağazaya taşınmasın. Taşıyıcılar sayesinde ürünler taşınsın.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Add level to Carrier (worker) var Carrier = Container.expand(function () { var self = Container.call(this); var carrierSprite = self.attachAsset('carrier', { anchorX: 0.5, anchorY: 0.5 }); self.level = 1; // Carrier level self.speed = 7; self.state = 'idle'; // 'idle', 'toFactory', 'toShop' self.target = null; self.carrying = false; self.factoryTarget = null; self.shopTarget = null; self.goToFactory = function (factory) { self.state = 'toFactory'; self.target = { x: factory.x, y: factory.y }; self.factoryTarget = factory; }; self.goToShop = function (shop) { self.state = 'toShop'; self.target = { x: shop.x, y: shop.y }; self.shopTarget = shop; }; self.setIdle = function () { self.state = 'idle'; self.target = null; self.factoryTarget = null; self.shopTarget = null; self.carrying = false; }; self.moveTowards = function (tx, ty) { var dx = tx - self.x; var dy = ty - self.y; var dist = Math.sqrt(dx * dx + dy * dy); var moveSpeed = (self.speed + (self.level - 1) * 1) * getMoveMultiplier(self.level); if (dist < moveSpeed) { self.x = tx; self.y = ty; return true; } self.x += dx / dist * moveSpeed; self.y += dy / dist * moveSpeed; return false; }; self.update = function () { if (self.state === 'toFactory' && self.factoryTarget) { if (self.moveTowards(self.factoryTarget.x, self.factoryTarget.y)) { // Arrived at factory if (!self.carrying && self.factoryTarget.productBuffer > 0) { self.factoryTarget.productBuffer--; self.carrying = true; if (shopList.length > 0) { self.goToShop(shopList[0]); } else { self.setIdle(); } } else { self.setIdle(); } } } else if (self.state === 'toShop' && self.shopTarget) { if (self.moveTowards(self.shopTarget.x, self.shopTarget.y)) { // Arrived at shop if (self.carrying) { // Deliver product to shop if (self.shopTarget && typeof self.shopTarget.productBuffer === "number") { self.shopTarget.productBuffer++; } self.carrying = false; } if (factoryList.length > 0 && factoryList[0].productBuffer > 0) { self.goToFactory(factoryList[0]); } else { self.setIdle(); } } } else if (self.state === 'idle') { // Look for product to carry if (factoryList.length > 0 && factoryList[0].productBuffer > 0) { self.goToFactory(factoryList[0]); } } }; return self; }); // Add level to City var City = Container.expand(function () { var self = Container.call(this); // Add city color image var citySprite = self.attachAsset('city', { anchorX: 0.5, anchorY: 0.5 }); self.level = 1; // City level self.x = 150; // Move city to upper left side, but not in the 0-100px menu area self.y = 150; // Top left, but not in the 0-100px menu area self.customerSpawnCooldown = 0; self.customerSpawnInterval = 180; // 3 seconds at 60fps self.update = function () { self.customerSpawnCooldown--; if (self.customerSpawnCooldown <= 0) { self.customerSpawnCooldown = Math.max(30, self.customerSpawnInterval - (self.level - 1) * 30) + Math.floor(Math.random() * 120); spawnCustomer(); } }; return self; }); // Customer: Walks from city to shop, buys product if available, then leaves var Customer = Container.expand(function () { var self = Container.call(this); // Pick a random customer image for this customer var customerImages = ['customer1', 'customer2', 'customer3', 'customer4', 'customer5']; var customerImgId = customerImages[Math.floor(Math.random() * customerImages.length)]; var customerSprite = self.attachAsset(customerImgId, { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5 + Math.random() * 2; self.state = 'toShop'; // 'toShop', 'leaving' self.targetShop = null; self.hasBought = false; self.moveTowards = function (tx, ty) { var dx = tx - self.x; var dy = ty - self.y; var dist = Math.sqrt(dx * dx + dy * dy); var moveSpeed = self.speed * getMoveMultiplier(1); // Customers have no level, always use 1 if (dist < moveSpeed) { self.x = tx; self.y = ty; return true; } self.x += dx / dist * moveSpeed; self.y += dy / dist * moveSpeed; return false; }; self.update = function () { if (self.state === 'toShop' && self.targetShop) { if (self.moveTowards(self.targetShop.x, self.targetShop.y)) { // Arrived at shop if (!self.hasBought && self.targetShop.productBuffer > 0) { self.targetShop.productBuffer--; money += 10; updateMoneyText(); self.hasBought = true; self.state = 'leaving'; self.leaveTarget = { x: self.x, y: -100 }; // leave upwards } else { // No product, leave anyway self.state = 'leaving'; self.leaveTarget = { x: self.x, y: -100 }; } } } else if (self.state === 'leaving') { if (self.moveTowards(self.leaveTarget.x, self.leaveTarget.y)) { // Remove from game for (var i = 0; i < customerList.length; i++) { if (customerList[i] === self) { customerList.splice(i, 1); break; } } self.destroy(); } } }; return self; }); // Factory: Converts ore to product over time var Factory = Container.expand(function () { var self = Container.call(this); var factorySprite = self.attachAsset('factory', { anchorX: 0.5, anchorY: 0.5 }); self.level = 1; // Factory level self.oreBuffer = 0; // ore waiting to be processed self.productBuffer = 0; // products ready to be sold self.processTime = 60; // ticks to process one ore self.processCounter = 0; self.update = function () { if (self.oreBuffer > 0) { self.processCounter++; if (self.processCounter >= Math.max(10, self.processTime - (self.level - 1) * 10)) { self.oreBuffer--; self.productBuffer++; self.processCounter = 0; } } else { self.processCounter = 0; } }; return self; }); // Mine: Contains ore, can be depleted var Mine = Container.expand(function () { var self = Container.call(this); // Pick a random ore image for this mine var oreImages = ['ore1', 'ore2', 'ore3', 'ore4', 'ore5', 'ore6', 'ore7', 'ore8', 'ore9', 'ore10']; var oreImgId = oreImages[Math.floor(Math.random() * oreImages.length)]; var mineSprite = self.attachAsset(oreImgId, { anchorX: 0.5, anchorY: 0.5 }); self.ore = 10; // initial ore self.setOre = function (amount) { self.ore = amount; }; return self; }); // Add level to Miner (worker) var Miner = Container.expand(function () { var self = Container.call(this); // Miner visual var minerImages = ['miner1', 'miner2', 'miner3', 'miner4', 'miner5']; var minerImgId = minerImages[Math.floor(Math.random() * minerImages.length)]; var minerSprite = self.attachAsset(minerImgId, { anchorX: 0.5, anchorY: 0.5 }); self.level = 1; // Worker level self.speed = 6; // px per tick self.state = 'idle'; // 'idle', 'toMine', 'mining', 'toFactory', 'toShop' self.target = null; // {x, y} self.carrying = null; // 'ore' or 'product' or null self.mineTarget = null; // reference to Mine self.factoryTarget = null; // reference to Factory // Mining animation state self.miningTicks = 0; self.miningDuration = 120; // 2 seconds at 60fps (ores are mined 100% slower) self.pickaxeIcon = null; // Set miner to go to a mine self.goToMine = function (mine) { self.state = 'toMine'; self.target = { x: mine.x, y: mine.y }; self.mineTarget = mine; }; // Set miner to go to factory self.goToFactory = function (factory) { self.state = 'toFactory'; self.target = { x: factory.x, y: factory.y }; self.factoryTarget = factory; }; // Set miner to idle self.setIdle = function () { self.state = 'idle'; self.target = null; self.mineTarget = null; self.factoryTarget = null; self.miningTicks = 0; if (self.pickaxeIcon) { self.pickaxeIcon.destroy(); self.pickaxeIcon = null; } }; // Move towards target self.moveTowards = function (tx, ty) { var dx = tx - self.x; var dy = ty - self.y; var dist = Math.sqrt(dx * dx + dy * dy); var moveSpeed = (self.speed + (self.level - 1) * 1) * getMoveMultiplier(self.level); if (dist < moveSpeed) { self.x = tx; self.y = ty; return true; } self.x += dx / dist * moveSpeed; self.y += dy / dist * moveSpeed; return false; }; // Called every tick self.update = function () { if (self.state === 'toMine' && self.mineTarget) { if (self.moveTowards(self.mineTarget.x, self.mineTarget.y)) { // Arrived at mine if (self.mineTarget.ore > 0 && !self.carrying) { // Start mining animation self.state = 'mining'; self.miningTicks = 0; // Add pickaxe icon if not present if (!self.pickaxeIcon) { self.pickaxeIcon = LK.getAsset('pickaxe', { anchorX: 0.5, anchorY: 1.2, x: 0, y: -60 }); self.addChild(self.pickaxeIcon); } // Animate pickaxe (simple up-down) tween(self.pickaxeIcon, { y: -80 }, { duration: 200, easing: tween.cubicInOut, onFinish: function onFinish() { if (self.pickaxeIcon) { tween(self.pickaxeIcon, { y: -60 }, { duration: 200, easing: tween.cubicInOut }); } } }); } else { self.setIdle(); } } } else if (self.state === 'mining' && self.mineTarget) { self.miningTicks++; // Animate pickaxe every 20 ticks if (self.pickaxeIcon && self.miningTicks % 20 === 0) { tween(self.pickaxeIcon, { y: -80 }, { duration: 100, easing: tween.cubicInOut, onFinish: function onFinish() { if (self.pickaxeIcon) { tween(self.pickaxeIcon, { y: -60 }, { duration: 100, easing: tween.cubicInOut }); } } }); } if (self.miningTicks >= Math.max(10, self.miningDuration - (self.level - 1) * 10)) { if (self.mineTarget.ore > 0 && !self.carrying) { self.mineTarget.ore--; self.carrying = 'ore'; if (self.pickaxeIcon) { self.pickaxeIcon.destroy(); self.pickaxeIcon = null; } self.goToFactory(factoryList[0]); } else { self.setIdle(); } } } else if (self.state === 'toFactory' && self.factoryTarget) { if (self.moveTowards(self.factoryTarget.x, self.factoryTarget.y)) { // Arrived at factory if (self.carrying === 'ore') { self.carrying = null; self.factoryTarget.oreBuffer++; self.setIdle(); } else { self.setIdle(); } } } else if (self.state === 'idle') { // Find nearest mine with ore var bestMine = null; var bestDist = Infinity; for (var i = 0; i < mineList.length; i++) { var m = mineList[i]; if (m.ore > 0) { var dx = m.x - self.x; var dy = m.y - self.y; var d = dx * dx + dy * dy; if (d < bestDist) { bestDist = d; bestMine = m; } } } if (bestMine) { self.goToMine(bestMine); } } }; return self; }); // Researcher: When a mine is depleted, finds a new mine location and spawns it var Researcher = Container.expand(function () { var self = Container.call(this); // Visual for researcher var researcherSprite = self.attachAsset('miner', { anchorX: 0.5, anchorY: 0.5 }); researcherSprite.tint = 0x1a8ffc; // blue tint for distinction self.speed = 5; self.state = 'idle'; // 'idle', 'moving', 'researching' self.target = null; self.researchTicks = 0; self.researchDuration = 90; // 1.5 seconds self.moveTowards = function (tx, ty) { var dx = tx - self.x; var dy = ty - self.y; var dist = Math.sqrt(dx * dx + dy * dy); var moveSpeed = self.speed * getMoveMultiplier(1); // Researchers have no level, always use 1 if (dist < moveSpeed) { self.x = tx; self.y = ty; return true; } self.x += dx / dist * moveSpeed; self.y += dy / dist * moveSpeed; return false; }; self.startResearch = function (tx, ty) { self.state = 'moving'; self.target = { x: tx, y: ty }; self.researchTicks = 0; }; self.update = function () { if (self.state === 'moving' && self.target) { if (self.moveTowards(self.target.x, self.target.y)) { // If we just finished research, set to idle after returning to start if (self.researchTicks >= self.researchDuration) { self.state = 'idle'; self.target = null; self.researchTicks = 0; } else { self.state = 'researching'; self.researchTicks = 0; } } } else if (self.state === 'researching') { self.researchTicks++; if (self.researchTicks >= self.researchDuration) { // Spawn new mine at this location var mine = new Mine(); mine.x = self.x; mine.y = self.y; mineList.push(mine); game.addChild(mine); // After finding ore, move researcher to starting position and wait there self.state = 'moving'; self.target = { x: 1024, // worker start image x y: 2400 // worker start image y }; } } }; return self; }); // Shop: Holds products for sale, customers come to buy var Shop = Container.expand(function () { var self = Container.call(this); var shopSprite = self.attachAsset('shop', { anchorX: 0.5, anchorY: 0.5 }); self.productBuffer = 0; // products available in shop return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x222222 }); /**** * Game Code ****/ // Add a background image to the game var baseMoveMultiplier = 0.5; // Everyone moves 50% slower by default function getMoveMultiplier(level) { // Each level increases speed by 2% (so multiplier increases) // Level 1: 0.5, Level 2: 0.5*1.02, Level 3: 0.5*1.04, etc. return baseMoveMultiplier * (1 + 0.02 * (level - 1)); } var backgroundImg = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366, scaleX: 1, scaleY: 1 }); backgroundImg.alpha = 1; game.addChildAt(backgroundImg, 0); // Add as the bottom-most layer // City colored image asset (example: blue city icon) // Global game state var minerList = []; var mineList = []; var factoryList = []; var shopList = []; var carrierList = []; var researcherList = []; var customerList = []; var money = 50; var city = null; function spawnCustomer() { if (shopList.length === 0) return; var customer = new Customer(); customer.x = city.x; customer.y = city.y + 40; customer.targetShop = shopList[0]; customerList.push(customer); game.addChild(customer); } function spawnResearcher() { var researcher = new Researcher(); // Place at random near bottom researcher.x = 200 + Math.random() * 1600; researcher.y = 2300 + Math.random() * 200; researcherList.push(researcher); game.addChild(researcher); } function spawnCarrier() { var carrier = new Carrier(); // Place at random near bottom carrier.x = 600 + Math.random() * 800; carrier.y = 2300 + Math.random() * 200; carrierList.push(carrier); game.addChild(carrier); } // UI var moneyText = new Text2('₺' + money, { size: 36, fill: 0xFFE066 }); moneyText.anchor.set(0.5, 0); LK.gui.top.addChild(moneyText); function updateMoneyText() { moneyText.setText('₺' + money); } // Add buttons for buying miners and mines var buyMinerBtn = new Text2('Madenci Al (₺30)', { size: 36, fill: "#fff" }); buyMinerBtn.anchor.set(0.5, 0.5); buyMinerBtn.x = 400; buyMinerBtn.y = 100; LK.gui.top.addChild(buyMinerBtn); // Add 'Taşıyıcı Al' text below 'Madenci Al' var carrierLabel = new Text2('Taşıyıcı Al', { size: 36, fill: "#fff" }); carrierLabel.anchor.set(0.5, 0.5); carrierLabel.x = 400; carrierLabel.y = 170; LK.gui.top.addChild(carrierLabel); var buyMineBtn = new Text2('Maden Aç (₺40)', { size: 36, fill: "#fff" }); buyMineBtn.anchor.set(0.5, 0.5); buyMineBtn.x = 900; buyMineBtn.y = 100; LK.gui.top.addChild(buyMineBtn); var buyFactoryBtn = new Text2('Fabrika Kur (₺60)', { size: 36, fill: "#fff" }); buyFactoryBtn.anchor.set(0.5, 0.5); buyFactoryBtn.x = 1500; buyFactoryBtn.y = 100; LK.gui.top.addChild(buyFactoryBtn); var buyCarrierBtn = new Text2('Taşıyıcı Al (₺25)', { size: 36, fill: "#fff" }); buyCarrierBtn.anchor.set(0.5, 0.5); buyCarrierBtn.x = 2000; buyCarrierBtn.y = 100; LK.gui.top.addChild(buyCarrierBtn); buyCarrierBtn.down = function () { if (money >= 25) { money -= 25; updateMoneyText(); spawnCarrier(); } }; // Button events buyMinerBtn.down = function () { if (money >= 30) { money -= 30; updateMoneyText(); spawnMiner(); } }; buyMineBtn.down = function () { if (money >= 40) { money -= 40; updateMoneyText(); spawnMine(); } }; buyFactoryBtn.down = function () { if (money >= 60) { money -= 60; updateMoneyText(); spawnFactory(); } }; // Spawning functions function spawnMiner() { var miner = new Miner(); // Place at random near bottom miner.x = 400 + Math.random() * 1200; miner.y = 2300 + Math.random() * 200; minerList.push(miner); game.addChild(miner); } function spawnMine() { var mine = new Mine(); // Place at random in upper half mine.x = 300 + Math.random() * 1400; mine.y = 600 + Math.random() * 600; mineList.push(mine); game.addChild(mine); } function spawnFactory() { var factory = new Factory(); // Place at center factory.x = 1024; factory.y = 1600; factoryList.push(factory); game.addChild(factory); } function spawnShop() { var shop = new Shop(); shop.x = 1024; shop.y = 350; shopList.push(shop); game.addChild(shop); } // Initial setup // Add worker start position image at bottom center var workerStartImg = LK.getAsset('workerStart', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 2400 }); game.addChild(workerStartImg); spawnMine(); spawnMine(); spawnFactory(); spawnShop(); spawnMiner(); spawnCarrier(); spawnResearcher(); city = new City(); game.addChild(city); // Shop sell timer REMOVED: Carriers now deliver products // Dragging mines/factories for placement (future feature, not implemented now) // Main game update game.update = function () { if (city) city.update(); // Update all customers for (var i = 0; i < customerList.length; i++) { customerList[i].update(); } // Update all miners for (var i = 0; i < minerList.length; i++) { minerList[i].update(); } // Update all factories for (var i = 0; i < factoryList.length; i++) { factoryList[i].update(); } // Update all carriers for (var i = 0; i < carrierList.length; i++) { carrierList[i].update(); } // Update all researchers for (var i = 0; i < researcherList.length; i++) { researcherList[i].update(); } // Remove depleted mines and assign researcher to find new mine for (var i = mineList.length - 1; i >= 0; i--) { if (mineList[i].ore <= 0) { // Find an idle researcher var assigned = false; for (var r = 0; r < researcherList.length; r++) { var researcher = researcherList[r]; if (researcher.state === 'idle') { // Pick a random location in upper half for new mine var tx = 300 + Math.random() * 1400; var ty = 600 + Math.random() * 600; researcher.startResearch(tx, ty); assigned = true; break; } } mineList[i].destroy(); mineList.splice(i, 1); } } }; // Show product/ore/factory status as text overlays var statusTexts = []; function updateStatusTexts() { // Remove old for (var i = 0; i < statusTexts.length; i++) { statusTexts[i].destroy(); } statusTexts = []; // Mines for (var i = 0; i < mineList.length; i++) { var t = new Text2('Cevher: ' + mineList[i].ore, { size: 36, fill: "#fff" }); t.anchor.set(0.5, 1); t.x = mineList[i].x; t.y = mineList[i].y - 80; game.addChild(t); statusTexts.push(t); } // Factories for (var i = 0; i < factoryList.length; i++) { var t = new Text2('Cevher: ' + factoryList[i].oreBuffer + '\nÜrün: ' + factoryList[i].productBuffer, { size: 36, fill: "#fff" }); t.anchor.set(0.5, 1); t.x = factoryList[i].x; t.y = factoryList[i].y - 80; game.addChild(t); statusTexts.push(t); } // Shops for (var i = 0; i < shopList.length; i++) { var t = new Text2('Ürün: ' + shopList[i].productBuffer, { size: 36, fill: "#fff" }); t.anchor.set(0.5, 1); t.x = shopList[i].x; t.y = shopList[i].y - 80; game.addChild(t); statusTexts.push(t); } } var statusTimer = LK.setInterval(updateStatusTexts, 400); // Prevent UI overlap with top left menu // (All UI is placed away from top left 100x100 px) buyMinerBtn.x = 400; buyMineBtn.x = 900; buyFactoryBtn.x = 1500; // --- LEVEL PANEL (BOTTOM LEFT) --- // --- LEVEL PANEL (BOTTOM LEFT) --- // Resize and align the level panel and its contents for a more organized look var levelPanelBg = LK.getAsset('customer', { anchorX: 0, anchorY: 0, x: 0, y: 0, scaleX: 2.7, // wider panel scaleY: 6.5 // slightly less tall }); levelPanelBg.alpha = 0.32; LK.gui.left.addChild(levelPanelBg); // Level panel text, larger and left-aligned var levelPanelText = new Text2('', { size: 36, fill: "#fff" }); levelPanelText.anchor.set(0, 0); levelPanelText.x = 40; levelPanelText.y = 40; LK.gui.left.addChild(levelPanelText); // --- UPGRADE BUTTONS AND COSTS --- var upgradeButtons = []; var upgradeCostTexts = []; var upgradeTypes = [{ label: "Şehir", key: "city", color: 0x4FC3F7, costBase: 100, costStep: 100 }, { label: "Fabrika", key: "factory", color: 0xFFD54F, costBase: 80, costStep: 80 }, { label: "Mağaza", key: "shop", color: 0x81C784, costBase: 80, costStep: 80 }, { label: "Madenci", key: "miner", color: 0xFF8A65, costBase: 60, costStep: 60 }, { label: "Taşıyıcı", key: "carrier", color: 0xBA68C8, costBase: 60, costStep: 60 }]; // Layout constants for alignment var panelLeft = 40; var panelTop = 40; var rowHeight = 100; var btnSize = 70; var btnOffsetX = 420; var costOffsetX = 510; var textSize = 60; var btnTextSize = 36; var costTextSize = 36; // Create upgrade buttons and cost texts, aligned in a row with the level text for (var i = 0; i < upgradeTypes.length; i++) { // Upgrade button var btn = new Text2("▲", { size: btnTextSize, fill: upgradeTypes[i].color }); btn.anchor.set(0, 0.5); btn.x = btnOffsetX; btn.y = panelTop + i * rowHeight + textSize / 2 + 8; LK.gui.left.addChild(btn); upgradeButtons.push(btn); // Cost text var costTxt = new Text2("", { size: costTextSize, fill: "#fff" }); costTxt.anchor.set(0, 0.5); costTxt.x = costOffsetX; costTxt.y = panelTop + i * rowHeight + textSize / 2 + 8; LK.gui.left.addChild(costTxt); upgradeCostTexts.push(costTxt); } // --- LEVEL PANEL UPDATE --- function updateLevelPanel() { // Find max levels for each type var factoryLevel = 0; for (var i = 0; i < factoryList.length; i++) { if (factoryList[i].level > factoryLevel) factoryLevel = factoryList[i].level; } var shopLevel = 0; for (var i = 0; i < shopList.length; i++) { if (shopList[i].level > shopLevel) shopLevel = shopList[i].level; } var cityLevel = city && city.level ? city.level : 1; var minerLevel = 0; for (var i = 0; i < minerList.length; i++) { if (minerList[i].level > minerLevel) minerLevel = minerList[i].level; } var carrierLevel = 0; for (var i = 0; i < carrierList.length; i++) { if (carrierList[i].level > carrierLevel) carrierLevel = carrierList[i].level; } levelPanelText.setText("Şehir Seviyesi: " + cityLevel + "\nFabrika Seviyesi: " + (factoryLevel || 1) + "\nMağaza Seviyesi: " + (shopLevel || 1) + "\nMadenci Seviyesi: " + (minerLevel || 1) + "\nTaşıyıcı Seviyesi: " + (carrierLevel || 1)); // Update cost texts var levels = [cityLevel, factoryLevel || 1, shopLevel || 1, minerLevel || 1, carrierLevel || 1]; for (var i = 0; i < upgradeTypes.length; i++) { var cost = upgradeTypes[i].costBase + (levels[i] - 1) * upgradeTypes[i].costStep; upgradeCostTexts[i].setText("₺" + cost); // Gray out if not enough money if (money < cost) { upgradeButtons[i].alpha = 0.4; upgradeCostTexts[i].alpha = 0.4; } else { upgradeButtons[i].alpha = 1; upgradeCostTexts[i].alpha = 1; } } } var levelPanelTimer = LK.setInterval(updateLevelPanel, 400); // --- LEVEL UPGRADES (button per type) --- upgradeButtons[0].down = function () { // City var cost = 100 + ((city && city.level ? city.level : 1) - 1) * 100; if (city && money >= cost) { city.level++; money -= cost; updateMoneyText(); updateLevelPanel(); } }; upgradeButtons[1].down = function () { // Factory var factoryLevel = factoryList.length > 0 ? factoryList[0].level : 1; var cost = 80 + (factoryLevel - 1) * 80; if (factoryList.length > 0 && money >= cost) { factoryList[0].level++; money -= cost; updateMoneyText(); updateLevelPanel(); } }; upgradeButtons[2].down = function () { // Shop var shopLevel = shopList.length > 0 ? shopList[0].level : 1; var cost = 80 + (shopLevel - 1) * 80; if (shopList.length > 0 && money >= cost) { shopList[0].level++; money -= cost; updateMoneyText(); updateLevelPanel(); } }; upgradeButtons[3].down = function () { // Miner var minerLevel = minerList.length > 0 ? minerList[0].level : 1; var cost = 60 + (minerLevel - 1) * 60; if (minerList.length > 0 && money >= cost) { minerList[0].level++; money -= cost; updateMoneyText(); updateLevelPanel(); } }; upgradeButtons[4].down = function () { // Carrier var carrierLevel = carrierList.length > 0 ? carrierList[0].level : 1; var cost = 60 + (carrierLevel - 1) * 60; if (carrierList.length > 0 && money >= cost) { carrierList[0].level++; money -= cost; updateMoneyText(); updateLevelPanel(); } }; // No background, no music, no sound, as per requirements // End of MVP code;
===================================================================
--- original.js
+++ change.js
@@ -231,9 +231,11 @@
// Add level to Miner (worker)
var Miner = Container.expand(function () {
var self = Container.call(this);
// Miner visual
- var minerSprite = self.attachAsset('miner', {
+ var minerImages = ['miner1', 'miner2', 'miner3', 'miner4', 'miner5'];
+ var minerImgId = minerImages[Math.floor(Math.random() * minerImages.length)];
+ var minerSprite = self.attachAsset(minerImgId, {
anchorX: 0.5,
anchorY: 0.5
});
self.level = 1; // Worker level
Kazma cevheri kazma hareketli resmi.. In-Game asset. 2d. High contrast. No shadows
Cevher. In-Game asset. 2d. High contrast. No shadows
Üstten olacak şekilde hafif ormanlık ve dağlık olacak şekilde çayır.. In-Game asset. 2d. High contrast. Gölgelikler olsun. Map tarzı bir harita.. In-Game asset. 2d. High contrast. No shadows
Madenci. In-Game asset. 2d. High contrast. No shadows
Savaşçı. In-Game asset. 2d. High contrast. No shadows
Kılıç kalkan ok yay gibi savaş malzemeleri taşıyan at arabası. In-Game asset. 2d. High contrast. No shadows
Demirci, Eski savaş malzemeleri üretiyor. In-Game asset. 2d. High contrast. No shadows
Okçu savaşçı. In-Game asset. 2d. High contrast. No shadows
Eski çağ savaş malzemesi dükkanı. In-Game asset. 2d. High contrast. No shadows
Cevher. In-Game asset. 2d. High contrast. No shadows
Cevher. In-Game asset. 2d. High contrast. No shadows
Savaşçı kampı. In-Game asset. 2d. High contrast. No shadows
Büyük savaşçı kampı uzaktan görünüm. In-Game asset. 2d. High contrast. No shadows
Siyah sayfa. In-Game asset. 2d. High contrast. No shadows
Madenci. In-Game asset. 2d. High contrast. No shadows
Demirci ve madencilerin olduğu uzaktan bakış bir kamp alanı oluştur.. In-Game asset. 2d. High contrast. No shadows
Eski kılıçlı silahlar ve cevherlerin vs. olduğu uzaktan bakış depo alanı.. In-Game asset. 2d. High contrast. No shadows
Canavar. In-Game asset. 2d. High contrast. No shadows
Düşman canavar. In-Game asset. 2d. High contrast. No shadows
Düşman farklı canavar. In-Game asset. 2d. High contrast. No shadows
Kılıçlar savaş iconu. In-Game asset. 2d. High contrast. No shadows
Canavar. In-Game asset. 2d. High contrast. No shadows
Atlı savaşçı asker. In-Game asset. 2d. High contrast. No shadows
Mızraklı piyade asker. In-Game asset. 2d. High contrast. No shadows
Okçu piyade savaşçı. In-Game asset. 2d. High contrast. No shadows
Yaya Piyade savaşçı. In-Game asset. 2d. High contrast. No shadows
Zırhlı Savaşçı. In-Game asset. 2d. High contrast. No shadows
Yetişen yiyecek. In-Game asset. 2d. High contrast. No shadows
Yetişen Yiyecek. In-Game asset. 2d. High contrast. No shadows
Dalında çilek. In-Game asset. 2d. High contrast. No shadows
Dalında Meyve. In-Game asset. 2d. High contrast. No shadows
Oduncu. In-Game asset. 2d. High contrast. No shadows
Oduncu. In-Game asset. 2d. High contrast. No shadows
Oduncu. In-Game asset. 2d. High contrast. No shadows
Ağaç. In-Game asset. 2d. High contrast. No shadows
Ağaç. In-Game asset. 2d. High contrast. No shadows
Toplayıcı. In-Game asset. 2d. High contrast. No shadows
Toplayıcı. In-Game asset. 2d. High contrast. No shadows
İnşaat eski çağ. In-Game asset. 2d. High contrast. No shadows
Eski çağ savaş karavan. In-Game asset. 2d. High contrast. No shadows
Kalkan. In-Game asset. 2d. High contrast. No shadows
Kalkanlı Savaş Arabası. In-Game asset. 2d. High contrast. No shadows
Koçbaşı. In-Game asset. 2d. High contrast. No shadows
Kılıç. In-Game asset. 2d. High contrast. No shadows
Mızrak. In-Game asset. 2d. High contrast. No shadows
Ok ve Yay birlikte eski çağ. In-Game asset. 2d. High contrast. No shadows
Büyük savaş baltası. In-Game asset. 2d. High contrast. No shadows
Savaş Zırhı. In-Game asset. 2d. High contrast. No shadows
Miğfer. In-Game asset. 2d. High contrast. No shadows
Maden arayıcı eski çağ. In-Game asset. 2d. High contrast. No shadows
Arkaplan müziği için kullanacağım müzik ile ilgili bir icon. In-Game asset. 2d. High contrast. No shadows