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 // 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 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: "#222" }); 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 = []; 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) { b.down = function (x, y, obj) { // Eğer oyuncunun elinde kedi varsa bonus butonları çalışmasın if (dragCat) return; if (bonusReady[bonusType] && !bonusActive[bonusType]) { activateBonus(bonusType); } }; })(bonusTypes[i], b); bonusUI.push(b); game.addChild(b); } // 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ı // 4 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; } }, 4000); } if (type === 'multi') { // Bir sonraki kedi yakalamada 3 kedi topla if (bonusActive.multi) return; bonusActive.multi = true; bonusMultiNextCatch = true; // Bonus kullanıldıktan sonra tekrar devre dışı bırak // (Kullanım onCatCaught içinde) } if (type === 'double') { // 4 saniye boyunca spawn edilen kedi sayısı 2 katı if (bonusActive["double"]) return; bonusActive["double"] = true; bonusDoubleActive = true; 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; } }, 4000); } // Bonus UI'da butonu pasifleştir for (var j = 0; j < bonusUI.length; j++) { if (bonusUI[j].type === type) { bonusUI[j].alpha = 0.3; } } } // 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); 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; } } // 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); 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 yeni 10'da random bir bonus ver var available = []; for (var i = 0; i < 3; i++) { if (!bonusReady[bonusTypes[i]]) available.push(i); } if (available.length > 0) { var idx = available[Math.floor(Math.random() * available.length)]; bonusUI[idx].visible = true; bonusReady[bonusTypes[idx]] = true; } } } } } // 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 () { // Kedileri güncelle for (var i = 0; i < cats.length; i++) { cats[i].update(); } // 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: 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]); } } 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; } } 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; } } bonusUI[i].visible = true; }, t; 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
@@ -121,8 +121,18 @@
/****
* 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
// Daha fazla kedi bonusu: mor
// Çek Topla bonusu: sarı
// Hız bonusu: yeşil
// Bonus assetleri: Her bonus için farklı renk ve simge
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