User prompt
Bonusların yanıp sönme işini kaldır
User prompt
Bonus verilmesi sırayla olmasın rastgele olsun
User prompt
Bonus kazanıldığinda bonus sayısina ekle göster ve bonus varken üzerine bonus eklenebilir kac tane toplandiysa o kada bonus altinda gosterilsin
User prompt
Oyun arkaplanı gitmiş geri getir saçmalama topladığımız kedi sayısıda yine ustte yazsın beyaz renk ve kalın bir fontla eski yerinde
User prompt
Bonus adet sayısının yazisı hem beyaz olsun hemde biraz daha kalın olsun
User prompt
Oyun başladığında her bonusumuzdan 1 tane olsun ve bonusun altında küçük bir şekilde kaç adet olduğu yazsın
User prompt
Menüde başlıklarin arası dikey biraz daha boşluklu olsun ve hepsi aynı boyutta olsun metinlerin oyunu anlatan yerdede metin rengini mavi yap ve daha kalın bir font kullan menüdede Arial Black Fontunu kullan
User prompt
Please fix the bug: 'TypeError: LK.isMusicPlaying is not a function' in or related to this line: 'if (musicOn && !LK.isMusicPlaying('bgmusic')) {' Line Number: 824
User prompt
Birde oyunumuza güzel bir menü ekleyelim başlama olsun ve bide oyunu anlatan kısım olsun bide ayarlar kısmı olsun ordada ses ayarlarını ayarlicaz müzık ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Bonuslar 6 saniye sürüyor artık
User prompt
Multi bonusuda 4 saniye sursün ve bu bonusların süresi butonlarin üzerinde gösterilsin bitesiye kadar bitince sayılar kaybolsun kullanildığı andan itibaren belirsin saysın bitene kadar sonra kaybolsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Kullanılmadan bonus eklensin ve eklenen bonus yanıp sönsün kullanasıya kadar ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyunda her 10 kedi topladığimızda artarak bonus ver her 10 kedide bir bonu 20 de bir bonu 30 da bir bonus boyle olucak şekilde sonsuza kadar devam etsin bu
User prompt
Her 10 kedide yap bunu
User prompt
10 kedi toplayınca random bir bonus ekle ve o bonus kullanısıya kadar gitmesin
User prompt
Oyunun arkaplanını assesteki arkaplan görselini koy
User prompt
Arkaplanı assest olarak kütüphaneye eklermisin
User prompt
Eklenen kedilerde dahil
User prompt
1.bonusu kullandıktan sonra etkisi bitince yine tüm kediler aynı hızda devam etsin
User prompt
Kademe arttığında tüm kediler hızlansın
User prompt
Oyunumuzda kaybetme yok sürekli devam edicek sonsuza kadar
User prompt
200 kedi toplayana kadar oyunda kaybetme olmiyacak
User prompt
Kullanasıya kadar yanıp sönsün ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Bonuslar dolunca yanıp sönsün ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Oyuncu elimdeyken bonus butonlarına dokunulduğunda işlemesin
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Bonus Sınıfı var Bonus = Container.expand(function () { var self = Container.call(this); self.type = null; // 'speed', 'multi', 'double' self.active = false; self.setType = function (type) { self.type = type; if (self.asset) { self.removeChild(self.asset); } var assetId = type === 'speed' ? 'bonus_speed' : type === 'multi' ? 'bonus_multi' : 'bonus_double'; self.asset = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); }; return self; }); // Bonus yönetimi için değişkenler // Kafes Sınıfı var Cage = Container.expand(function () { var self = Container.call(this); var cageGfx = self.attachAsset('cage', { anchorX: 0.5, anchorY: 0.5 }); return self; }); // Kedi Sınıfı var Cat = Container.expand(function () { var self = Container.call(this); // Rastgele kedi türü seç var catTypes = ['cat1', 'cat2', 'cat3']; var typeIndex = Math.floor(Math.random() * catTypes.length); self.catType = catTypes[typeIndex]; // Kedi grafiğini ekle var catGfx = self.attachAsset(self.catType, { anchorX: 0.5, anchorY: 0.5 }); // Kedi hızı ve yönü self.speed = 3 + Math.random() * 2; // 3-5 arası self.dir = Math.random() * Math.PI * 2; // 0-2pi arası rastgele yön // Kedi yakalandı mı? self.caught = false; // Kedi hareketi self.update = function () { if (self.caught) return; // Kenarlardan sekme var nextX = self.x + Math.cos(self.dir) * self.speed; var nextY = self.y + Math.sin(self.dir) * self.speed; var r = catGfx.width / 2; // Sınır kontrolü if (nextX < r || nextX > 2048 - r) { self.dir = Math.PI - self.dir + (Math.random() - 0.5) * 0.5; } if (nextY < r + 200 || nextY > 2732 - r - 100) { self.dir = -self.dir + (Math.random() - 0.5) * 0.5; } // Hareket self.x += Math.cos(self.dir) * self.speed; self.y += Math.sin(self.dir) * self.speed; }; // Kediye dokunulduğunda self.down = function (x, y, obj) { if (self.caught) return; // Sadece catcher ile temas ediyorsa yakalanabilsin if (!catcher || !self.intersects(catcher)) { // Catcher ile temas yoksa yakalanamaz return; } self.caught = true; // Efekt: hafifçe büyüt tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 120, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); // Kedi yakalandı, ana oyun kodunda işlenecek if (typeof onCatCaught === 'function') onCatCaught(self); }; return self; }); // Kedi Yakalayıcı Karakter Sınıfı var Catcher = Container.expand(function () { var self = Container.call(this); var catcherGfx = self.attachAsset('catcher', { anchorX: 0.5, anchorY: 0.5 }); self.dragging = false; return self; }); /**** * Initialize Game ****/ // Hız bonusu için restore katsayısı var game = new LK.Game({ backgroundColor: 0xf5f5f5 }); /**** * Game Code ****/ // Arkaplan asseti eklendi // Arkaplan görselini ekle var background = LK.getAsset('background', { anchorX: 0, anchorY: 0, x: 0, y: 0, width: 2048, height: 2732 }); game.addChildAt(background, 0); // En arkaya ekle // --- Menü Ekranları --- // Menü durumları var MENU_MAIN = 0, MENU_GAME = 1, MENU_ABOUT = 2, MENU_SETTINGS = 3; var menuState = MENU_MAIN; // Menü overlay container var menuOverlay = new Container(); menuOverlay.zIndex = 10000; game.addChild(menuOverlay); // Menüdeki butonlar ve metinler var menuTitle = new Text2("Kedi Toplama", { size: 160, fill: "#333", font: "Arial Black" }); menuTitle.anchor.set(0.5, 0.5); menuTitle.x = 2048 / 2; menuTitle.y = 600; menuOverlay.addChild(menuTitle); // Tüm menü butonları aynı boyutta ve aralarında daha fazla boşluk olacak şekilde ayarlandı var menuButtonSize = 110; var menuButtonSpacing = 180; var btnStart = new Text2("Başla", { size: menuButtonSize, fill: "#fff", font: "Arial Black" }); btnStart.anchor.set(0.5, 0.5); btnStart.x = 2048 / 2; btnStart.y = menuTitle.y + 1 * menuButtonSpacing; btnStart.interactive = true; menuOverlay.addChild(btnStart); var btnAbout = new Text2("Oyun Hakkında", { size: menuButtonSize, fill: "#fff", font: "Arial Black" }); btnAbout.anchor.set(0.5, 0.5); btnAbout.x = 2048 / 2; btnAbout.y = menuTitle.y + 2 * menuButtonSpacing; btnAbout.interactive = true; menuOverlay.addChild(btnAbout); var btnSettings = new Text2("Ayarlar", { size: menuButtonSize, fill: "#fff", font: "Arial Black" }); btnSettings.anchor.set(0.5, 0.5); btnSettings.x = 2048 / 2; btnSettings.y = menuTitle.y + 3 * menuButtonSpacing; btnSettings.interactive = true; menuOverlay.addChild(btnSettings); // Hakkında ekranı var aboutOverlay = new Container(); aboutOverlay.visible = false; aboutOverlay.zIndex = 10001; game.addChild(aboutOverlay); var aboutTitle = new Text2("Oyun Hakkında", { size: 120, fill: "#333", font: "Arial Black" }); aboutTitle.anchor.set(0.5, 0.5); aboutTitle.x = 2048 / 2; aboutTitle.y = 600; aboutOverlay.addChild(aboutTitle); var aboutText = new Text2("Kedileri yakalayıcı ile yakalayıp kafese bırak!\n\n" + "Her 10 puanda bir bonus kazanırsın.\n" + "Bonuslar:\n" + "- Hız: Kediler yavaşlar\n" + "- Çek Topla: 3 kedi birden toplarsın\n" + "- Çift: 6 saniye boyunca 2 kat kedi gelir\n\n" + "Bonusları butonlardan kullanabilirsin.\n" + "Oyun sonsuz, en yüksek skoru hedefle!", { size: 60, fill: 0x0074D9, // Mavi renk font: "Arial Black" // Daha kalın font }); aboutText.anchor.set(0.5, 0); aboutText.x = 2048 / 2; aboutText.y = 750; aboutOverlay.addChild(aboutText); var btnAboutBack = new Text2("Geri", { size: 90, fill: "#fff", font: "Arial Black" }); btnAboutBack.anchor.set(0.5, 0.5); btnAboutBack.x = 2048 / 2; btnAboutBack.y = 1800; btnAboutBack.interactive = true; aboutOverlay.addChild(btnAboutBack); // Ayarlar ekranı var settingsOverlay = new Container(); settingsOverlay.visible = false; settingsOverlay.zIndex = 10001; game.addChild(settingsOverlay); var settingsTitle = new Text2("Ayarlar", { size: 120, fill: "#333", font: "Arial Black" }); settingsTitle.anchor.set(0.5, 0.5); settingsTitle.x = 2048 / 2; settingsTitle.y = 600; settingsOverlay.addChild(settingsTitle); var musicOn = true; var soundOn = true; var btnMusic = new Text2("Müzik: Açık", { size: 80, fill: "#fff", font: "Arial Black" }); btnMusic.anchor.set(0.5, 0.5); btnMusic.x = 2048 / 2; btnMusic.y = 950; btnMusic.interactive = true; settingsOverlay.addChild(btnMusic); var btnSound = new Text2("Ses: Açık", { size: 80, fill: "#fff", font: "Arial Black" }); btnSound.anchor.set(0.5, 0.5); btnSound.x = 2048 / 2; btnSound.y = 1100; btnSound.interactive = true; settingsOverlay.addChild(btnSound); var btnSettingsBack = new Text2("Geri", { size: 90, fill: "#fff", font: "Arial Black" }); btnSettingsBack.anchor.set(0.5, 0.5); btnSettingsBack.x = 2048 / 2; btnSettingsBack.y = 1800; btnSettingsBack.interactive = true; settingsOverlay.addChild(btnSettingsBack); // Menü buton eventleri btnStart.down = function (x, y, obj) { menuOverlay.visible = false; menuState = MENU_GAME; }; btnAbout.down = function (x, y, obj) { menuOverlay.visible = false; aboutOverlay.visible = true; menuState = MENU_ABOUT; }; btnSettings.down = function (x, y, obj) { menuOverlay.visible = false; settingsOverlay.visible = true; menuState = MENU_SETTINGS; }; btnAboutBack.down = function (x, y, obj) { aboutOverlay.visible = false; menuOverlay.visible = true; menuState = MENU_MAIN; }; btnSettingsBack.down = function (x, y, obj) { settingsOverlay.visible = false; menuOverlay.visible = true; menuState = MENU_MAIN; }; btnMusic.down = function (x, y, obj) { musicOn = !musicOn; btnMusic.setText("Müzik: " + (musicOn ? "Açık" : "Kapalı")); if (musicOn) { LK.playMusic('bgmusic'); } else { LK.stopMusic(); } }; btnSound.down = function (x, y, obj) { soundOn = !soundOn; btnSound.setText("Ses: " + (soundOn ? "Açık" : "Kapalı")); // Ses efektleri için kontrol game.update içinde yapılacak }; // Oyun başında sadece menü görünsün menuOverlay.visible = true; aboutOverlay.visible = false; settingsOverlay.visible = false; // Oyun içi kontrolleri menüdeyken devre dışı bırak function isMenuActive() { return menuOverlay.visible || aboutOverlay.visible || settingsOverlay.visible; } // Daha fazla kedi bonusu: mor // Çek Topla bonusu: sarı // Hız bonusu: yeşil // Bonus assetleri: Her bonus için farklı renk ve simge // Bonus yönetimi için değişkenler // Daha fazla kedi bonusu // Çek Topla bonusu // Hız bonusu // Bonus assetleri // Kediler için farklı renklerde kutu ve elipsler, kafes ve karakter için şekiller tanımlanıyor // Oyun değişkenleri var bonuses = []; // Aktif bonus objeleri var bonusTypes = ['speed', 'multi', 'double']; var bonusActive = { speed: false, multi: false, "double": false }; var bonusTimers = { speed: 0, multi: 0, "double": 0 }; var bonusReady = { speed: false, multi: false, "double": false }; var bonusUI = []; // UI'daki bonus butonları var bonusTimerTexts = []; // Her bonus için kalan süreyi gösterecek Text2 objeleri var bonusCountTexts = []; // Her bonusun altında kalan adet sayısını gösterecek Text2 objeleri var bonusCounts = { speed: 1, multi: 1, "double": 1 }; // Oyun başında her bonus 1 adet var bonusMultiNextCatch = false; // Çek Topla bonusu için flag var bonusDoubleActive = false; // Daha fazla kedi bonusu için flag var bonusSpeedRestore = 1; var cats = []; var maxCats = 4; var score = 0; var scoreTxt; var catcher; var cage; var dragCat = null; var dragOffsetX = 0; var dragOffsetY = 0; var onCatCaught; // Kedi yakalandığında çağrılacak fonksiyon var lastCatAddTick = 0; // Skor metni scoreTxt = new Text2('0', { size: 120, fill: "#fff", font: "Arial Black" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Kafes oluştur ve ekranın alt ortasına yerleştir cage = new Cage(); cage.x = 2048 / 2; cage.y = 2732 - 220; game.addChild(cage); // Yakalama karakteri oluştur ve ekranın üst ortasına yerleştir catcher = new Catcher(); catcher.x = 2048 / 2; catcher.y = 350; game.addChild(catcher); // Bonus UI butonlarını kafesin sağında, aralıklı ve daha büyük boyutta, 3 adet olarak yatay diz var bonusButtonSpacing = 160; // Butonlar arası boşluk daha da artırıldı var bonusButtonSize = 1.05; // Simge daha da büyütüldü var totalBonusWidth = 3 * (140 * bonusButtonSize) + 2 * bonusButtonSpacing; // Kafes ile sağ kenarın tam ortasında bonusları hizala // cage.x: kafesin merkezi, cage.width: 220 // Sağ kenar: 2048 // Ortadaki bonusun merkezi, cage'in sağ kenarı ile sağ kenarın ortasında olmalı var cageRight = cage.x + 220 / 2; var rightEdge = 2048; // Kedilerle temas etmemesi için kafesle bonuslar arasında ekstra boşluk bırak var extraGap = 120; var centerBetween = cageRight + extraGap + (rightEdge - (cageRight + extraGap)) / 2; // Bonusların toplam genişliği kadar sola kaydırarak ortala var bonusStartX = centerBetween - totalBonusWidth / 2 + 140 * bonusButtonSize / 2; var bonusStartY = cage.y; // Kafesin ortasına hizalı bonusUI = []; bonusTimerTexts = []; bonusCountTexts = []; for (var i = 0; i < 3; i++) { var b = new Bonus(); b.setType(bonusTypes[i]); // Her butonun x pozisyonu: sağda ortalanmış şekilde b.x = bonusStartX + i * (140 * bonusButtonSize + bonusButtonSpacing); b.y = bonusStartY; b.scaleX = b.scaleY = bonusButtonSize; b.alpha = 0.7; b.active = false; b.interactive = true; b.visible = true; // Her zaman görünsün, bonus aktif olmasa da (function (bonusType, bonusObj, idx) { b.down = function (x, y, obj) { // Eğer oyuncunun elinde kedi varsa bonus butonları çalışmasın if (dragCat) return; // Adet sıfırsa bonus kullanılamaz if (bonusCounts[bonusType] <= 0) return; if (bonusReady[bonusType] && !bonusActive[bonusType]) { activateBonus(bonusType); // Bonus kullanıldı, adedi azalt bonusCounts[bonusType]--; // Sayaç güncelle if (bonusCountTexts[idx]) { bonusCountTexts[idx].setText(bonusCounts[bonusType] > 0 ? bonusCounts[bonusType] : ""); } } }; })(bonusTypes[i], b, i); bonusUI.push(b); game.addChild(b); // Bonus timer text objesini oluştur ve bonus butonunun üstüne ekle var timerTxt = new Text2('', { size: 60, fill: "#fff", font: "Arial Black" }); timerTxt.anchor.set(0.5, 0.5); timerTxt.x = b.x; timerTxt.y = b.y - 100; // Butonun biraz üstünde timerTxt.visible = false; bonusTimerTexts.push(timerTxt); game.addChild(timerTxt); // Bonus kalan adet texti: butonun ALTINDA küçük şekilde var countTxt = new Text2(bonusCounts[bonusTypes[i]] > 0 ? bonusCounts[bonusTypes[i]] : "", { size: 48, fill: "#fff", font: "Arial Black", fontWeight: "bold" }); countTxt.anchor.set(0.5, 0); countTxt.x = b.x; countTxt.y = b.y + 140 * bonusButtonSize / 2 + 8; // Butonun hemen altında bonusCountTexts.push(countTxt); game.addChild(countTxt); } // Oyun başında rastgele bir bonusu aktif yap var firstBonusIdx = Math.floor(Math.random() * 3); bonusReady[bonusTypes[firstBonusIdx]] = true; // Catcher karakterini hareket ettirmek için dokunma ve sürükleme desteği // game.down, game.move ve game.up zaten aşağıda tanımlı, yakalayıcıyı sürüklemek için kod mevcut // Bonus aktivasyon fonksiyonları function activateBonus(type) { if (type === 'speed') { // Kedilerin hızını %5'e düşür if (bonusActive.speed) return; bonusActive.speed = true; for (var i = 0; i < cats.length; i++) { cats[i].speed *= 0.05; } bonusSpeedRestore = Math.pow(1 / 0.05, 1); // Restore için katsayı // Timer text'i göster for (var j = 0; j < bonusUI.length; j++) { if (bonusUI[j].type === 'speed') { bonusTimerTexts[j].visible = true; bonusTimerTexts[j].setText('6.0'); bonusTimerTexts[j]._bonusTimerStart = Date.now(); bonusTimerTexts[j]._bonusTimerDuration = 6000; } } // 6 saniye sonra hızları geri al bonusTimers.speed = LK.setTimeout(function () { for (var i = 0; i < cats.length; i++) { cats[i].speed *= bonusSpeedRestore; } bonusActive.speed = false; bonusReady.speed = false; for (var j = 0; j < bonusUI.length; j++) { if (bonusUI[j].type === 'speed') { bonusUI[j].visible = false; bonusTimerTexts[j].visible = false; } } }, 6000); } if (type === 'multi') { // Bir sonraki kedi yakalamada 3 kedi topla if (bonusActive.multi) return; bonusActive.multi = true; bonusMultiNextCatch = true; // 4 saniye boyunca aktif kalsın, sonra otomatik olarak devre dışı bırak // Timer text'i göster for (var j = 0; j < bonusUI.length; j++) { if (bonusUI[j].type === 'multi') { bonusTimerTexts[j].visible = true; bonusTimerTexts[j].setText('6.0'); bonusTimerTexts[j]._bonusTimerStart = Date.now(); bonusTimerTexts[j]._bonusTimerDuration = 6000; } } bonusTimers.multi = LK.setTimeout(function () { bonusActive.multi = false; bonusMultiNextCatch = false; bonusReady.multi = false; for (var j = 0; j < bonusUI.length; j++) { if (bonusUI[j].type === 'multi') { bonusUI[j].visible = false; bonusTimerTexts[j].visible = false; } } }, 6000); } if (type === 'double') { // 4 saniye boyunca spawn edilen kedi sayısı 2 katı if (bonusActive["double"]) return; bonusActive["double"] = true; bonusDoubleActive = true; // Timer text'i göster for (var j = 0; j < bonusUI.length; j++) { if (bonusUI[j].type === 'double') { bonusTimerTexts[j].visible = true; bonusTimerTexts[j].setText('6.0'); bonusTimerTexts[j]._bonusTimerStart = Date.now(); bonusTimerTexts[j]._bonusTimerDuration = 6000; } } bonusTimers["double"] = LK.setTimeout(function () { bonusActive["double"] = false; bonusDoubleActive = false; bonusReady["double"] = false; for (var j = 0; j < bonusUI.length; j++) { if (bonusUI[j].type === 'double') { bonusUI[j].visible = false; bonusTimerTexts[j].visible = false; } } }, 6000); } // Bonus UI'da butonu pasifleştir for (var j = 0; j < bonusUI.length; j++) { if (bonusUI[j].type === type) { bonusUI[j].alpha = 0.3; // Kalan adet sayısını güncelle if (bonusCountTexts[j]) { bonusCountTexts[j].setText(bonusCounts[type] > 0 ? bonusCounts[type] : ""); } } } } // Kedi ekleme fonksiyonu function addCat() { var cat = new Cat(); // Mevcut kademe seviyesine göre yeni kedinin hızını ayarla var level = Math.floor(score / 10); if (level > 0) { cat.speed *= Math.pow(1.65, level); } // Eğer hız bonusu aktifse, yeni kediye de uygula if (bonusActive.speed) { cat.speed *= 0.05; } var margin = 180; var minY = 350 + margin; var maxY = 2732 - 220 - margin; var minX = margin; var maxX = 2048 - margin; cat.x = minX + Math.random() * (maxX - minX); cat.y = minY + Math.random() * (maxY - minY); cats.push(cat); game.addChild(cat); } // Başlangıçta kedileri ekle for (var i = 0; i < maxCats; i++) { addCat(); } // Kedi yakalama fonksiyonu (Cat.down'dan çağrılır) onCatCaught = function onCatCaught(cat) { // Sürüklemeye başla dragCat = cat; dragOffsetX = 0; dragOffsetY = 0; // Efekt: hafifçe öne çıkar tween(cat, { scaleX: 1.25, scaleY: 1.25 }, { duration: 100 }); }; // Oyun alanında dokunma/sürükleme game.down = function (x, y, obj) { // Eğer bir kediye dokunulmadıysa, yakalayıcıyı sürükle if (!dragCat) { // Yakınsa yakalayıcıyı sürükle var dx = x - catcher.x; var dy = y - catcher.y; var dist = Math.sqrt(dx * dx + dy * dy); if (dist < 120) { catcher.dragging = true; dragOffsetX = catcher.x - x; dragOffsetY = catcher.y - y; } } }; game.move = function (x, y, obj) { // Sürüklenen kedi varsa, onu hareket ettir if (dragCat && !dragCat.removed) { // Sadece catcher ile temas ediyorsa sürüklenebilsin if (dragCat && dragCat.intersects && catcher && dragCat.intersects(catcher)) { dragCat.x = x; dragCat.y = y; } else { // Eğer artık temas yoksa, kediyi bırak dragCat.caught = false; tween(dragCat, { scaleX: 1, scaleY: 1 }, { duration: 100 }); dragCat = null; } // Kafesle kesişiyor mu? if (dragCat && dragCat.intersects && cage && dragCat.intersects(cage)) { // Çek Topla bonusu aktifse, 3 kedi birden topla if (bonusMultiNextCatch && bonusActive.multi) { var collected = 0; for (var i = cats.length - 1; i >= 0; i--) { var c = cats[i]; if (!c.caught && c.intersects(cage) && collected < 3) { c.caught = true; score += 1; scoreTxt.setText(score); if (typeof soundOn === "undefined" || soundOn) if (typeof soundOn === "undefined" || soundOn) LK.getSound('catch').play(); tween(c, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 200, onFinish: function (catRef) { return function () { if (catRef && typeof catRef.destroy === "function") { catRef.destroy(); } }; }(c) }); cats.splice(i, 1); collected++; } } // DragCat de dahilse, onu da yok et if (!dragCat.removed) { tween(dragCat, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 200, onFinish: function onFinish() { if (dragCat && typeof dragCat.destroy === "function") { dragCat.destroy(); } } }); } dragCat = null; // 3 yeni kedi ekle (double bonus aktifse 6 ekle) var toAdd = bonusDoubleActive ? 6 : 3; for (var j = 0; j < toAdd; j++) addCat(); // Bonus pasifleşsin bonusActive.multi = false; bonusMultiNextCatch = false; bonusReady.multi = false; for (var j = 0; j < bonusUI.length; j++) { if (bonusUI[j].type === 'multi') { bonusUI[j].visible = false; bonusUI[j].alpha = 0.7; // Süre göstergesini de gizle bonusTimerTexts[j].visible = false; } } // Multi bonusu bittikten sonra tüm kedilerin hızını mevcut kademe seviyesine göre güncelle var level = Math.floor(score / 10); for (var i = 0; i < cats.length; i++) { // Kedinin hızını sıfırdan kademe çarpanına göre ayarla var baseSpeed = 3 + Math.random() * 2; cats[i].speed = baseSpeed * Math.pow(1.65, level); // Eğer hız bonusu aktifse, hız bonusunu da uygula if (bonusActive.speed) { cats[i].speed *= 0.05; } } } else { // Skor artır, ses çal, efekt score += 1; scoreTxt.setText(score); if (typeof soundOn === "undefined" || soundOn) LK.getSound('catch').play(); // Kedi kaybolsun tween(dragCat, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 200, onFinish: function onFinish() { if (dragCat && typeof dragCat.destroy === "function") { dragCat.destroy(); } } }); // Listeden çıkar for (var i = 0; i < cats.length; i++) { if (cats[i] === dragCat) { cats.splice(i, 1); break; } } dragCat = null; // Yeni kedi ekle (double bonus aktifse 2 ekle) var toAdd = bonusDoubleActive ? 2 : 1; for (var j = 0; j < toAdd; j++) addCat(); } // Her 10 puanda bir kedilerin hızını %65 artır (birden fazla kademe atlanırsa hepsini uygula) if (score > 0) { var prevLevel = Math.floor((score - 1) / 10); var newLevel = Math.floor(score / 10); if (newLevel > prevLevel) { var multiplier = Math.pow(1.65, newLevel - prevLevel); // Tüm mevcut kedilerin hızını artır for (var i = 0; i < cats.length; i++) { // Kedinin temel hızını yeniden hesapla var baseSpeed = 3 + Math.random() * 2; var level = Math.floor(score / 10); cats[i].speed = baseSpeed * Math.pow(1.65, level); // Eğer hız bonusu aktifse, hız bonusunu da uygula if (bonusActive.speed) { cats[i].speed *= 0.05; } } } // Her 10 kedide bir, rastgele bonus ekle ve bu sonsuza kadar devam etsin if (score > 0 && score % 10 === 0) { // Rastgele bir bonus seç var bonusIndex = Math.floor(Math.random() * bonusTypes.length); var bonusType = bonusTypes[bonusIndex]; bonusUI[bonusIndex].visible = true; bonusReady[bonusType] = true; // Bonus sayısını artır bonusCounts[bonusType] = (typeof bonusCounts[bonusType] === "number" ? bonusCounts[bonusType] : 0) + 1; // Sayaç güncelle if (bonusCountTexts[bonusIndex]) { bonusCountTexts[bonusIndex].setText(bonusCounts[bonusType] > 0 ? bonusCounts[bonusType] : ""); } } } } } // Yakalayıcı sürükleniyorsa if (catcher.dragging) { catcher.x = Math.max(120, Math.min(2048 - 120, x + dragOffsetX)); catcher.y = Math.max(200, Math.min(2732 - 120, y + dragOffsetY)); // Eğer henüz bir kedi tutulmuyorsa, catcher bir kediye değiyorsa onu eline al if (!dragCat) { for (var i = 0; i < cats.length; i++) { var cat = cats[i]; if (!cat.caught && cat.intersects(catcher)) { cat.caught = true; dragCat = cat; dragOffsetX = 0; dragOffsetY = 0; // Efekt: hafifçe öne çıkar tween(cat, { scaleX: 1.25, scaleY: 1.25 }, { duration: 100 }); break; } } } } }; game.up = function (x, y, obj) { // Sürükleme bitti if (dragCat) { // Eğer kafese bırakılmadıysa, kedi tekrar kaçmaya başlasın if (!dragCat.removed) { dragCat.caught = false; tween(dragCat, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } dragCat = null; } catcher.dragging = false; }; // Oyun güncelleme döngüsü game.update = function () { // Menü açıksa oyun güncellenmesin if (typeof isMenuActive === "function" && isMenuActive()) { // Müzik ayarı değiştiyse uygula if (typeof game._musicPlaying === "undefined") game._musicPlaying = false; if (musicOn && !game._musicPlaying) { LK.playMusic('bgmusic'); game._musicPlaying = true; } if (!musicOn && game._musicPlaying) { LK.stopMusic(); game._musicPlaying = false; } return; } // Kedileri güncelle for (var i = 0; i < cats.length; i++) { cats[i].update(); } // Bonus timer textlerini güncelle for (var i = 0; i < bonusUI.length; i++) { var t = bonusTypes[i]; if (bonusActive[t]) { // Timer text aktifse güncelle if (bonusTimerTexts[i].visible && bonusTimerTexts[i]._bonusTimerStart) { var elapsed = Date.now() - bonusTimerTexts[i]._bonusTimerStart; var left = Math.max(0, bonusTimerTexts[i]._bonusTimerDuration - elapsed); bonusTimerTexts[i].setText((left / 1000).toFixed(1)); // Süre bittiyse gizle (güvenlik için) if (left <= 0) { bonusTimerTexts[i].visible = false; } } } else { // Bonus aktif değilse timer text gizli olsun bonusTimerTexts[i].visible = false; bonusTimerTexts[i]._bonusTimerStart = null; } } // Bonus UI butonlarının aktif/pasif durumunu güncelle var _loop = function _loop() { t = bonusTypes[i]; // Butonlar her zaman görünür, sadece alpha ile aktif/pasif göster if (bonusReady[t] && !bonusActive[t]) { bonusUI[i].alpha = 0.7; // Yanıp sönme animasyonu kaldırıldı, bonus hazırsa alpha 0.7 olarak sabitleniyor bonusUI[i].alpha = 0.7; bonusUI[i]._flashing = false; tween.stop(bonusUI[i], { alpha: true }); bonusUI[i].alpha = 0.7; } else if (bonusActive[t]) { bonusUI[i].alpha = 1.0; // Aktifken yanıp sönme animasyonu yok, alpha 1.0 olarak sabitleniyor bonusUI[i].alpha = 1.0; bonusUI[i]._flashing = false; tween.stop(bonusUI[i], { alpha: true }); bonusUI[i].alpha = 1.0; } else { bonusUI[i].alpha = 0.3; // Pasifken yanıp sönme animasyonu yok, alpha 0.3 olarak sabitleniyor bonusUI[i].alpha = 0.3; bonusUI[i]._flashing = false; tween.stop(bonusUI[i], { alpha: true }); bonusUI[i].alpha = 0.3; } bonusUI[i].visible = true; }; for (var i = 0; i < bonusUI.length; i++) { _loop(); } // Zamanla yeni kedi ekle (zorluk artışı) if (LK.ticks - lastCatAddTick > 600 && cats.length < maxCats + 2) { addCat(); lastCatAddTick = LK.ticks; } // Sonsuz oyun: game over koşulu kaldırıldı, oyun sonsuza kadar devam eder }; // Oyun başında skor sıfırla score = 0; scoreTxt.setText(score);
===================================================================
--- original.js
+++ change.js
@@ -120,10 +120,10 @@
/****
* Game Code
****/
-// Arkaplan görselini ekle
// Arkaplan asseti eklendi
+// Arkaplan görselini ekle
var background = LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
@@ -855,63 +855,33 @@
var _loop = function _loop() {
t = bonusTypes[i]; // Butonlar her zaman görünür, sadece alpha ile aktif/pasif göster
if (bonusReady[t] && !bonusActive[t]) {
bonusUI[i].alpha = 0.7;
- // Yanıp sönme animasyonu: bonusReady ve bonus aktif değilse başlat
- if (!bonusUI[i]._flashing) {
- var _flashLoop = function flashLoop(btn) {
- // Bonus kullanılana kadar yanıp sönmeye devam etsin
- if (!bonusReady[btn.type] || bonusActive[btn.type]) {
- // Bonus hazır değil veya aktif olduysa animasyonu durdur
- btn._flashing = false;
- tween.stop(btn, {
- alpha: true
- });
- btn.alpha = 0.7;
- return;
- }
- tween(btn, {
- alpha: 1
- }, {
- duration: 350,
- easing: tween.easeInOut,
- onFinish: function onFinish() {
- tween(btn, {
- alpha: 0.5
- }, {
- duration: 350,
- easing: tween.easeInOut,
- onFinish: function onFinish() {
- // Kullanana kadar yanıp sönmeye devam et
- if (btn._flashing && bonusReady[btn.type] && !bonusActive[btn.type]) _flashLoop(btn);
- }
- });
- }
- });
- };
- bonusUI[i]._flashing = true;
- _flashLoop(bonusUI[i]);
- }
+ // Yanıp sönme animasyonu kaldırıldı, bonus hazırsa alpha 0.7 olarak sabitleniyor
+ bonusUI[i].alpha = 0.7;
+ bonusUI[i]._flashing = false;
+ tween.stop(bonusUI[i], {
+ alpha: true
+ });
+ bonusUI[i].alpha = 0.7;
} else if (bonusActive[t]) {
bonusUI[i].alpha = 1.0;
- // Aktifken yanıp sönmeyi durdur
- if (bonusUI[i]._flashing) {
- bonusUI[i]._flashing = false;
- tween.stop(bonusUI[i], {
- alpha: true
- });
- bonusUI[i].alpha = 1.0;
- }
+ // Aktifken yanıp sönme animasyonu yok, alpha 1.0 olarak sabitleniyor
+ bonusUI[i].alpha = 1.0;
+ bonusUI[i]._flashing = false;
+ tween.stop(bonusUI[i], {
+ alpha: true
+ });
+ bonusUI[i].alpha = 1.0;
} else {
bonusUI[i].alpha = 0.3;
- // Pasifken yanıp sönmeyi durdur
- if (bonusUI[i]._flashing) {
- bonusUI[i]._flashing = false;
- tween.stop(bonusUI[i], {
- alpha: true
- });
- bonusUI[i].alpha = 0.3;
- }
+ // Pasifken yanıp sönme animasyonu yok, alpha 0.3 olarak sabitleniyor
+ bonusUI[i].alpha = 0.3;
+ bonusUI[i]._flashing = false;
+ tween.stop(bonusUI[i], {
+ alpha: true
+ });
+ bonusUI[i].alpha = 0.3;
}
bonusUI[i].visible = true;
};
for (var i = 0; i < bonusUI.length; i++) {
cat cage black. 2dNo backgraund,No shadows,Game assest
Cat backgraund sweet white. In-Game asset. 2d. High contrast. No shadows
Daire içinde yavaşlatma bonus butonu. In-Game asset. 2d. High contrast. No shadows
Daire içinde nesneyi artirma butonu. In-Game asset. 2d. High contrast. No shadows
Daire içinde elinde daha fazla av tutma butonu. In-Game asset. 2d. High contrast. No shadows
Çizgili dark arkaplan resmi ürkütücü. In-Game asset. 2d. High contrast. No shadows
Elinde ağ olan bir avcı . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat