User prompt
Biraz daha büyült ve kediler bonus butonlarına temas etmesin mümkün olduğunca
User prompt
Tamam şimdi butonları biraz büyült ve aralarındaki boşluğuda eşit şekilde arttir
User prompt
Çok sağa olmuş bu seferde kafesle sağ tarafın tam ortasinda olsunlar
User prompt
Dahada sağa kaysın sağ tarafta ortalansınlar
User prompt
Butonlar biraz daha sağa kaysın ve kafesle arasinda boşluk olsun hepsinin
User prompt
Tüm bonuslar oyun boyunca kalıcı dursun butonları hepsi yan yana yatay şekilde oyun başindan sonuna kadar dursun
User prompt
Bonus butonları 3 tane olucak ve kafes ile boşluklu olucak
User prompt
Bonus butonları basınca kaybolmasın oyun boyunca orada dursun ve hepsi yan yana aralı şekilde dursun yatay şekilde ve biraz küçük olsun butonlar
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of null (reading 'intersects')' in or related to this line: 'if (dragCat.intersects(cage)) {' Line Number: 366
User prompt
Bonus butonu ile kafes arasinda boşluk olsun ve simgesi biraz daha büyük olsun ve her bonus için farklı buton ekle bunlarda yatay şekilde kafesin sağ tarafında yan yana olsun aralarında boşluk olsun ve 3 butonuda assest olarak kütüphaneye ekle
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'call')' in or related to this line: 'self.asset = Container.attachAsset.call(self, assetId, {' Line Number: 34
User prompt
Please fix the bug: 'self.attachAsset is not a function' in or related to this line: 'self.asset = self.attachAsset(assetId, {' Line Number: 36
User prompt
Şimdi ise oyuna 3 bonus eklicez bu bonus lardan oyun başında 1 tane olucak daha sonra random seklinde her 10 kedi yakaladıktan sonra 1 tanesi verilecek 1.Hız bonusu bu bonus kullanıldığında kedilerin hızı %5 e düşücek 4 saniyeligine diğer 2.Çek Topla bonusu bu bonus kullanıldığında oyuncu bir sonraki kedi tutuşunda 3 kedi tutabilecek bir kez bonus kullanildiktan sonra yine tek tek toplayacak 3.Dahada Kedi bonusu bu bonus kullanilinca spawn olan kediler 2 katı spawn olucak 4 saniyeligine bu bonuslar kafesin yaninda daire şeklinde aralı bir biçimde dursun bunların assestleri nide kütüphaneye ekle
User prompt
Hız %65 olsun
User prompt
Kademe her 10 kedide artsın ve %50 olsun hiz artmasi
User prompt
%40 hızlansın her kademede
User prompt
15 kedi toplayınca oyun bitmesin kediler her 15 tane topladiğimızda kademe kademe daha hızlı kaçsınlar sonsuza kadar devam etsin bu oyun
User prompt
Karakterimizi elimizle sürüklerken kediye değerse kediyi elinde tutsun
User prompt
Yakalarken karakterimizle yakalayalim karakter olustur bir tane avci onunla kedileri tutup atalim
User prompt
Hareket edebilen bir karakterimiz olsun onunla yakalayıp kafese atalım
User prompt
Please fix the bug: 'TypeError: Cannot read properties of null (reading 'destroy')' in or related to this line: 'dragCat.destroy();' Line Number: 212
Code edit (1 edits merged)
Please save this source code
User prompt
Kedi Yakalama Kaosu
Initial prompt
### **Oyun Adı: Kedi Yakalama Kaosu** **Tema:** Eğlenceli ve kaotik bir kedi yakalama oyunu **Grafik Türü:** 2D, sevimli piksel tarzı veya düz minimal çizimler **Oynanış:** Basit, sürükleyici, hız ve strateji odaklı --- ### **Oyun Mekanikleri:** 1️⃣ **Karakter**: Oyuncu, **bir kedi yakalayıcı** karakteri kontrol eder. 2️⃣ **Amaç**: Kaçan **kedileri hızlıca yakalayıp kafese koymak**. 3️⃣ **Kontroller**: - **Dokunarak** veya **sürükleyerek** kediyi yakala. - **Hızlı karar ver**, yoksa kedi kaçacak! 4️⃣ **Kedi Çeşitleri**: - **Normal Kedi**: Kaçar ama fazla zeki değil. - **Zıpır Kedi**: Sürekli zıplıyor, yakalaması zor. - **Kamuflajcı Kedi**: Nesnelerin arkasına saklanıyor. - **Süper Hızlı Kedi**: Çok hızlı koşuyor, sadece belirli bir tuzakla yakalanabilir. 5️⃣ **Özel Yardımcılar**: - **Balık Yemi**: Kedileri kısa süreliğine durdurur. - **Lazer Göstergesi**: Kediyi belirli bir noktaya çeker. - **Kedi Ağı**: Sadece belirli sayıda kullanabilirsin, dikkatli seç! 6️⃣ **Zorluk Seviyeleri**: - Kolay: **Az sayıda kedi, yavaş hareket** - Orta: **Hızlı ve çeşitli kaçan kediler** - Zor: **Kedilerin kaçış zekası artar, engeller eklenir** 7️⃣ **Puanlama Sistemi**: - **Ne kadar hızlı yakalarsan, o kadar fazla puan alırsın** - Özel bonuslar: **3 kedi yakalarsan ekstra puan!** --- **Ekstra Basitlik İçin:** ✅ **Tek tuşla kontrol edilebilir** (Dokun veya sürükle) ✅ **Basit 2D animasyonlarla kediler ve karakterler hareket eder** ✅ **Düşük işlem gücü gerektiren mekanikler (mobil uyumlu)** ✅ **Giderek artan hız ile eğlenceli kaos hissi yaratır**
/****
* 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
****/
// 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 yatay şekilde, aralarında boşluklu ve büyük simgelerle diz
var bonusButtonSpacing = 70; // Butonlar arası boşluk
var bonusButtonSize = 1.45; // Simge büyüklüğü
var bonusStartX = cage.x + 180; // Kafesin sağında başlasın
var bonusStartY = cage.y - 20; // Kafesin ortasına hizalı
bonusUI = [];
for (var i = 0; i < 3; i++) {
var b = new Bonus();
b.setType(bonusTypes[i]);
b.x = bonusStartX + i * (100 * bonusButtonSize + bonusButtonSpacing);
b.y = bonusStartY;
b.scaleX = b.scaleY = bonusButtonSize;
b.alpha = 0.7;
b.active = false;
b.interactive = true;
b.visible = false; // Başta sadece biri görünecek
(function (bonusType, bonusObj) {
b.down = function (x, y, obj) {
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);
bonusUI[firstBonusIdx].visible = true;
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();
// Eğer skor 10 ve katlarıysa, yeni kediler de hızlanmış olmalı
if (score > 0 && score % 10 === 0) {
cat.speed *= Math.pow(1.65, Math.floor(score / 10));
}
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.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.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;
}
}
} 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);
for (var i = 0; i < cats.length; i++) {
cats[i].speed *= multiplier;
}
// 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
for (var i = 0; i < bonusUI.length; i++) {
var t = bonusTypes[i];
if (bonusReady[t] && !bonusActive[t]) {
bonusUI[i].alpha = 0.7;
bonusUI[i].visible = true;
} else if (bonusActive[t]) {
bonusUI[i].alpha = 1.0;
bonusUI[i].visible = true;
} else {
bonusUI[i].alpha = 0.3;
bonusUI[i].visible = false;
}
}
// Zamanla yeni kedi ekle (zorluk artışı)
if (LK.ticks - lastCatAddTick > 600 && cats.length < maxCats + 2) {
addCat();
lastCatAddTick = LK.ticks;
}
// Eğer çok fazla kedi varsa ve oyuncu yakalayamıyorsa, kaybet
if (cats.length > maxCats + 3) {
LK.effects.flashScreen(0xff0000, 800);
LK.getSound('miss').play();
LK.showGameOver();
}
};
// Oyun başında skor sıfırla
score = 0;
scoreTxt.setText(score); ===================================================================
--- original.js
+++ change.js
@@ -120,8 +120,12 @@
/****
* Game Code
****/
+// 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
@@ -176,21 +180,20 @@
catcher = new Catcher();
catcher.x = 2048 / 2;
catcher.y = 350;
game.addChild(catcher);
-// Bonus UI butonlarını kafesin yanında dairesel diz
-var bonusCircleRadius = 180;
-var bonusCenterX = cage.x;
-var bonusCenterY = cage.y - 120;
+// Bonus UI butonlarını kafesin sağında yatay şekilde, aralarında boşluklu ve büyük simgelerle diz
+var bonusButtonSpacing = 70; // Butonlar arası boşluk
+var bonusButtonSize = 1.45; // Simge büyüklüğü
+var bonusStartX = cage.x + 180; // Kafesin sağında başlasın
+var bonusStartY = cage.y - 20; // Kafesin ortasına hizalı
bonusUI = [];
for (var i = 0; i < 3; i++) {
var b = new Bonus();
b.setType(bonusTypes[i]);
- // Daire şeklinde diz
- var angle = Math.PI / 2 + (i - 1) * Math.PI / 3;
- b.x = bonusCenterX + Math.cos(angle) * bonusCircleRadius;
- b.y = bonusCenterY + Math.sin(angle) * bonusCircleRadius;
- b.scaleX = b.scaleY = 1;
+ b.x = bonusStartX + i * (100 * bonusButtonSize + bonusButtonSpacing);
+ b.y = bonusStartY;
+ b.scaleX = b.scaleY = bonusButtonSize;
b.alpha = 0.7;
b.active = false;
b.interactive = true;
b.visible = false; // Başta sadece biri görünecek
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