User prompt
yukardan sadece elma değil rastgele oranlarda muzda fırlatılsın
User prompt
meyveler left adlı assetin içine giremez girerse oradan seker
User prompt
left adlı asset imagei yanlara koy
User prompt
meyveler yan tarafa geçmesin.Bunun için yan taraflara taştan bir duvar oluştur
Code edit (1 edits merged)
Please save this source code
User prompt
oyun bittiğinde Game Over yerine Kazandın! yazsın
User prompt
en yüksek yazısı siyah renk olsun
User prompt
Please fix the bug: 'storage.getItem is not a function' in or related to this line: 'var topScore = storage.getItem('topScore') || 0;' Line Number: 159 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'var topScore = storage.get('topScore') || 0;' Line Number: 159
User prompt
oyunda top score sistemide olsun
User prompt
oyun sadece 2 tane fruit7 birleşirse bitsin ve 20 tane meyve olursa bitsin
User prompt
oyun sadece 2 tane fruit7 oluştuğunda bitsin
User prompt
yukardan sadece fruit1 fırlatılsın
User prompt
arkaplan insanların olmadığı huzurlu bir evin içi olsun
User prompt
iki tane fruit7 birleşirse oyun biter
User prompt
oyun sonsuz olsun ama meyveler kaba sığmazsa oyun bitsin
User prompt
arkaplan için bir asset ekle
User prompt
arkaplan ekle
Code edit (1 edits merged)
Please save this source code
User prompt
Fruit Merge Cup
Initial prompt
Oyunun içinde bir kap olsun içine üstten 7 seviyeli meyveler fırlat aynı seviyedeki 2 meyve birleşirse bir üst seviyede bir tane meyve oluşsun
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Bowl class
var Bowl = Container.expand(function () {
var self = Container.call(this);
self.bowlAsset = self.attachAsset('bowl', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
// Fruit class
var Fruit = Container.expand(function () {
var self = Container.call(this);
// Vars
self.level = 1; // 1-7
self.radius = 90; // default, will be set below
self.isMerging = false; // prevent double merge
// Attach fruit asset
self.setLevel = function (level) {
self.level = level;
// Remove old asset if exists
if (self.fruitAsset) {
self.removeChild(self.fruitAsset);
}
var assetId = 'fruit' + level;
self.fruitAsset = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = self.fruitAsset.width / 2;
};
self.setLevel(1);
// Physics
self.vx = 0;
self.vy = 0;
self.gravity = 2.2;
self.bounce = 0.55;
self.friction = 0.99;
self.isStatic = false; // true: can't move (for bowl, etc)
// Merge animation
self.playMergeAnim = function () {
tween(self, {
scaleX: 1.25,
scaleY: 1.25
}, {
duration: 120,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1,
scaleY: 1
}, {
duration: 120,
easing: tween.easeIn
});
}
});
};
// Update
self.update = function () {
if (self.isStatic) return;
// Physics
self.vy += self.gravity;
self.x += self.vx;
self.y += self.vy;
// Friction (horizontal)
self.vx *= self.friction;
// Bowl collision
var bowlTop = bowl.y - bowl.height / 2;
var bowlLeft = bowl.x - bowl.width / 2;
var bowlRight = bowl.x + bowl.width / 2;
// Alt sınır (bowl)
if (self.y + self.radius > bowlTop) {
self.y = bowlTop - self.radius;
self.vy *= -self.bounce;
self.vx *= self.friction;
// Yavaşça durdur
if (Math.abs(self.vy) < 2) self.vy = 0;
}
// Yan sınırlar (bowl)
if (self.x - self.radius < bowlLeft) {
self.x = bowlLeft + self.radius;
self.vx *= -self.bounce;
}
if (self.x + self.radius > bowlRight) {
self.x = bowlRight - self.radius;
self.vx *= -self.bounce;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xf7f7f7
});
/****
* Game Code
****/
// Kap (bowl)
// Ejder Meyvesi
// Karpuz
// Üzüm
// Kivi
// Elma
// Portakal
// Limon
// 7 farklı seviye için meyve şekilleri (örnek renkler ve boyutlar, gerçek oyunda görsellerle değiştirilebilir)
// Oyun alanı boyutları
var GAME_W = 2048;
var GAME_H = 2732;
// Bowl'u oluştur ve ortala (alt kısımda)
var bowl = new Bowl();
bowl.x = GAME_W / 2;
bowl.y = GAME_H - 200;
game.addChild(bowl);
// Meyve listesi
var fruits = [];
// Skor
var score = 0;
var scoreTxt = new Text2('0', {
size: 120,
fill: "#222"
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Sonraki atılacak meyve
var nextLevel = 1;
var nextFruitPreview = LK.getAsset('fruit1', {
anchorX: 0.5,
anchorY: 0.5,
x: GAME_W / 2,
y: 220,
scaleX: 0.7,
scaleY: 0.7
});
game.addChild(nextFruitPreview);
// Atılacak meyve pozisyonu
var shootX = GAME_W / 2;
var shootY = 400;
// Atılacak meyve (henüz düşmeyen)
var holdingFruit = null;
var isDragging = false;
// Oyun bitti mi?
var isGameOver = false;
// Skoru güncelle
function updateScore(val) {
score = val;
scoreTxt.setText(score);
}
// Yeni meyve seviyesi seç (1-5 arası daha sık, 6-7 nadir)
function getRandomLevel() {
var r = Math.random();
if (r < 0.5) return 1;
if (r < 0.75) return 2;
if (r < 0.90) return 3;
if (r < 0.97) return 4;
if (r < 0.99) return 5;
if (r < 0.995) return 6;
return 7;
}
// Yeni meyve oluştur (henüz düşmeyen)
function spawnHoldingFruit() {
nextLevel = getRandomLevel();
if (nextFruitPreview) {
game.removeChild(nextFruitPreview);
}
nextFruitPreview = LK.getAsset('fruit' + nextLevel, {
anchorX: 0.5,
anchorY: 0.5,
x: GAME_W / 2,
y: 220,
scaleX: 0.7,
scaleY: 0.7
});
game.addChild(nextFruitPreview);
holdingFruit = new Fruit();
holdingFruit.setLevel(nextLevel);
holdingFruit.x = shootX;
holdingFruit.y = shootY;
holdingFruit.isStatic = true;
game.addChild(holdingFruit);
}
// İlk meyveyi oluştur
spawnHoldingFruit();
// Ekrana dokunma/çekme ile meyve pozisyonunu ayarla
game.move = function (x, y, obj) {
if (isGameOver) return;
if (!holdingFruit) return;
// Sadece yatayda hareket ettir
var minX = bowl.x - bowl.width / 2 + holdingFruit.radius;
var maxX = bowl.x + bowl.width / 2 - holdingFruit.radius;
holdingFruit.x = Math.max(minX, Math.min(maxX, x));
// Y sabit
holdingFruit.y = shootY;
};
// Dokunma başlat
game.down = function (x, y, obj) {
if (isGameOver) return;
if (!holdingFruit) return;
isDragging = true;
game.move(x, y, obj);
};
// Dokunma bırakınca meyveyi bırak
game.up = function (x, y, obj) {
if (isGameOver) return;
if (!holdingFruit) return;
if (!isDragging) return;
isDragging = false;
// Meyveyi serbest bırak
holdingFruit.isStatic = false;
holdingFruit.vx = 0;
holdingFruit.vy = 0;
fruits.push(holdingFruit);
holdingFruit = null;
// Yeni meyve oluştur
LK.setTimeout(function () {
if (!isGameOver) spawnHoldingFruit();
}, 250);
};
// Meyve çarpışma ve birleştirme
function checkFruitMerges() {
for (var i = 0; i < fruits.length; i++) {
var f1 = fruits[i];
if (f1.isMerging) continue;
for (var j = i + 1; j < fruits.length; j++) {
var f2 = fruits[j];
if (f2.isMerging) continue;
if (f1.level !== f2.level) continue;
// Çarpışma kontrolü
var dx = f1.x - f2.x;
var dy = f1.y - f2.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < f1.radius + f2.radius - 8) {
// biraz tolerans
// Birleştir
mergeFruits(f1, f2);
return; // Birleştikten sonra döngüyü kır, çünkü dizi değişti
}
}
}
}
// Meyve birleştirme
function mergeFruits(f1, f2) {
if (f1.isMerging || f2.isMerging) return;
f1.isMerging = true;
f2.isMerging = true;
// Yeni meyve pozisyonu ortalama
var newX = (f1.x + f2.x) / 2;
var newY = (f1.y + f2.y) / 2;
var newVx = (f1.vx + f2.vx) / 2;
var newVy = (f1.vy + f2.vy) / 2;
// Yeni meyve
var newLevel = Math.min(f1.level + 1, 7);
var newFruit = new Fruit();
newFruit.setLevel(newLevel);
newFruit.x = newX;
newFruit.y = newY;
newFruit.vx = newVx;
newFruit.vy = -Math.abs(newVy) * 0.7 - 8; // yukarı zıplat
newFruit.isStatic = false;
game.addChild(newFruit);
fruits.push(newFruit);
// Animasyon
newFruit.scaleX = 0.7;
newFruit.scaleY = 0.7;
tween(newFruit, {
scaleX: 1,
scaleY: 1
}, {
duration: 180,
easing: tween.easeOut
});
// Eski meyveleri sil
f1.visible = false;
f2.visible = false;
LK.setTimeout(function () {
f1.destroy();
f2.destroy();
}, 60);
// Listeden çıkar
for (var k = fruits.length - 1; k >= 0; k--) {
if (fruits[k] === f1 || fruits[k] === f2) fruits.splice(k, 1);
}
// Skor ekle
updateScore(score + Math.pow(2, newLevel + 1));
// En yüksek seviyeye ulaşıldıysa kazan
if (newLevel === 7) {
LK.setTimeout(function () {
LK.showYouWin();
}, 500);
}
}
// Meyve-meyve fiziksel çarpışma (sıçrama)
function resolveFruitCollisions() {
for (var i = 0; i < fruits.length; i++) {
var f1 = fruits[i];
if (f1.isMerging) continue;
for (var j = i + 1; j < fruits.length; j++) {
var f2 = fruits[j];
if (f2.isMerging) continue;
// Çarpışma kontrolü
var dx = f1.x - f2.x;
var dy = f1.y - f2.y;
var dist = Math.sqrt(dx * dx + dy * dy);
var minDist = f1.radius + f2.radius;
if (dist < minDist - 2) {
// Meyveleri ayır
var overlap = (minDist - dist) / 2;
if (dist === 0) {
dx = Math.random() - 0.5;
dy = Math.random() - 0.5;
dist = 1;
}
var nx = dx / dist;
var ny = dy / dist;
f1.x += nx * overlap;
f1.y += ny * overlap;
f2.x -= nx * overlap;
f2.y -= ny * overlap;
// Basit elastik çarpışma
var tx = -ny,
ty = nx;
var dpTan1 = f1.vx * tx + f1.vy * ty;
var dpTan2 = f2.vx * tx + f2.vy * ty;
var dpNorm1 = f1.vx * nx + f1.vy * ny;
var dpNorm2 = f2.vx * nx + f2.vy * ny;
var m1 = dpNorm2;
var m2 = dpNorm1;
f1.vx = tx * dpTan1 + nx * m1;
f1.vy = ty * dpTan1 + ny * m1;
f2.vx = tx * dpTan2 + nx * m2;
f2.vy = ty * dpTan2 + ny * m2;
// Hafif sönümleme
f1.vx *= 0.98;
f1.vy *= 0.98;
f2.vx *= 0.98;
f2.vy *= 0.98;
}
}
}
}
// Meyveler taşarsa oyun biter
function checkGameOver() {
for (var i = 0; i < fruits.length; i++) {
if (fruits[i].y - fruits[i].radius < 120) {
isGameOver = true;
LK.setTimeout(function () {
LK.showGameOver();
}, 400);
return;
}
}
}
// Oyun döngüsü
game.update = function () {
// Meyveleri güncelle
for (var i = 0; i < fruits.length; i++) {
fruits[i].update();
}
// Çarpışma ve birleştirme
checkFruitMerges();
resolveFruitCollisions();
// Oyun bitti mi?
checkGameOver();
};
// Oyun bittiğinde veya kazanıldığında cleanup otomatik yapılır (LK tarafından)
/* END */ ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,378 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Bowl class
+var Bowl = Container.expand(function () {
+ var self = Container.call(this);
+ self.bowlAsset = self.attachAsset('bowl', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ return self;
+});
+// Fruit class
+var Fruit = Container.expand(function () {
+ var self = Container.call(this);
+ // Vars
+ self.level = 1; // 1-7
+ self.radius = 90; // default, will be set below
+ self.isMerging = false; // prevent double merge
+ // Attach fruit asset
+ self.setLevel = function (level) {
+ self.level = level;
+ // Remove old asset if exists
+ if (self.fruitAsset) {
+ self.removeChild(self.fruitAsset);
+ }
+ var assetId = 'fruit' + level;
+ self.fruitAsset = self.attachAsset(assetId, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.radius = self.fruitAsset.width / 2;
+ };
+ self.setLevel(1);
+ // Physics
+ self.vx = 0;
+ self.vy = 0;
+ self.gravity = 2.2;
+ self.bounce = 0.55;
+ self.friction = 0.99;
+ self.isStatic = false; // true: can't move (for bowl, etc)
+ // Merge animation
+ self.playMergeAnim = function () {
+ tween(self, {
+ scaleX: 1.25,
+ scaleY: 1.25
+ }, {
+ duration: 120,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 120,
+ easing: tween.easeIn
+ });
+ }
+ });
+ };
+ // Update
+ self.update = function () {
+ if (self.isStatic) return;
+ // Physics
+ self.vy += self.gravity;
+ self.x += self.vx;
+ self.y += self.vy;
+ // Friction (horizontal)
+ self.vx *= self.friction;
+ // Bowl collision
+ var bowlTop = bowl.y - bowl.height / 2;
+ var bowlLeft = bowl.x - bowl.width / 2;
+ var bowlRight = bowl.x + bowl.width / 2;
+ // Alt sınır (bowl)
+ if (self.y + self.radius > bowlTop) {
+ self.y = bowlTop - self.radius;
+ self.vy *= -self.bounce;
+ self.vx *= self.friction;
+ // Yavaşça durdur
+ if (Math.abs(self.vy) < 2) self.vy = 0;
+ }
+ // Yan sınırlar (bowl)
+ if (self.x - self.radius < bowlLeft) {
+ self.x = bowlLeft + self.radius;
+ self.vx *= -self.bounce;
+ }
+ if (self.x + self.radius > bowlRight) {
+ self.x = bowlRight - self.radius;
+ self.vx *= -self.bounce;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0xf7f7f7
+});
+
+/****
+* Game Code
+****/
+// Kap (bowl)
+// Ejder Meyvesi
+// Karpuz
+// Üzüm
+// Kivi
+// Elma
+// Portakal
+// Limon
+// 7 farklı seviye için meyve şekilleri (örnek renkler ve boyutlar, gerçek oyunda görsellerle değiştirilebilir)
+// Oyun alanı boyutları
+var GAME_W = 2048;
+var GAME_H = 2732;
+// Bowl'u oluştur ve ortala (alt kısımda)
+var bowl = new Bowl();
+bowl.x = GAME_W / 2;
+bowl.y = GAME_H - 200;
+game.addChild(bowl);
+// Meyve listesi
+var fruits = [];
+// Skor
+var score = 0;
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: "#222"
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Sonraki atılacak meyve
+var nextLevel = 1;
+var nextFruitPreview = LK.getAsset('fruit1', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: GAME_W / 2,
+ y: 220,
+ scaleX: 0.7,
+ scaleY: 0.7
+});
+game.addChild(nextFruitPreview);
+// Atılacak meyve pozisyonu
+var shootX = GAME_W / 2;
+var shootY = 400;
+// Atılacak meyve (henüz düşmeyen)
+var holdingFruit = null;
+var isDragging = false;
+// Oyun bitti mi?
+var isGameOver = false;
+// Skoru güncelle
+function updateScore(val) {
+ score = val;
+ scoreTxt.setText(score);
+}
+// Yeni meyve seviyesi seç (1-5 arası daha sık, 6-7 nadir)
+function getRandomLevel() {
+ var r = Math.random();
+ if (r < 0.5) return 1;
+ if (r < 0.75) return 2;
+ if (r < 0.90) return 3;
+ if (r < 0.97) return 4;
+ if (r < 0.99) return 5;
+ if (r < 0.995) return 6;
+ return 7;
+}
+// Yeni meyve oluştur (henüz düşmeyen)
+function spawnHoldingFruit() {
+ nextLevel = getRandomLevel();
+ if (nextFruitPreview) {
+ game.removeChild(nextFruitPreview);
+ }
+ nextFruitPreview = LK.getAsset('fruit' + nextLevel, {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: GAME_W / 2,
+ y: 220,
+ scaleX: 0.7,
+ scaleY: 0.7
+ });
+ game.addChild(nextFruitPreview);
+ holdingFruit = new Fruit();
+ holdingFruit.setLevel(nextLevel);
+ holdingFruit.x = shootX;
+ holdingFruit.y = shootY;
+ holdingFruit.isStatic = true;
+ game.addChild(holdingFruit);
+}
+// İlk meyveyi oluştur
+spawnHoldingFruit();
+// Ekrana dokunma/çekme ile meyve pozisyonunu ayarla
+game.move = function (x, y, obj) {
+ if (isGameOver) return;
+ if (!holdingFruit) return;
+ // Sadece yatayda hareket ettir
+ var minX = bowl.x - bowl.width / 2 + holdingFruit.radius;
+ var maxX = bowl.x + bowl.width / 2 - holdingFruit.radius;
+ holdingFruit.x = Math.max(minX, Math.min(maxX, x));
+ // Y sabit
+ holdingFruit.y = shootY;
+};
+// Dokunma başlat
+game.down = function (x, y, obj) {
+ if (isGameOver) return;
+ if (!holdingFruit) return;
+ isDragging = true;
+ game.move(x, y, obj);
+};
+// Dokunma bırakınca meyveyi bırak
+game.up = function (x, y, obj) {
+ if (isGameOver) return;
+ if (!holdingFruit) return;
+ if (!isDragging) return;
+ isDragging = false;
+ // Meyveyi serbest bırak
+ holdingFruit.isStatic = false;
+ holdingFruit.vx = 0;
+ holdingFruit.vy = 0;
+ fruits.push(holdingFruit);
+ holdingFruit = null;
+ // Yeni meyve oluştur
+ LK.setTimeout(function () {
+ if (!isGameOver) spawnHoldingFruit();
+ }, 250);
+};
+// Meyve çarpışma ve birleştirme
+function checkFruitMerges() {
+ for (var i = 0; i < fruits.length; i++) {
+ var f1 = fruits[i];
+ if (f1.isMerging) continue;
+ for (var j = i + 1; j < fruits.length; j++) {
+ var f2 = fruits[j];
+ if (f2.isMerging) continue;
+ if (f1.level !== f2.level) continue;
+ // Çarpışma kontrolü
+ var dx = f1.x - f2.x;
+ var dy = f1.y - f2.y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ if (dist < f1.radius + f2.radius - 8) {
+ // biraz tolerans
+ // Birleştir
+ mergeFruits(f1, f2);
+ return; // Birleştikten sonra döngüyü kır, çünkü dizi değişti
+ }
+ }
+ }
+}
+// Meyve birleştirme
+function mergeFruits(f1, f2) {
+ if (f1.isMerging || f2.isMerging) return;
+ f1.isMerging = true;
+ f2.isMerging = true;
+ // Yeni meyve pozisyonu ortalama
+ var newX = (f1.x + f2.x) / 2;
+ var newY = (f1.y + f2.y) / 2;
+ var newVx = (f1.vx + f2.vx) / 2;
+ var newVy = (f1.vy + f2.vy) / 2;
+ // Yeni meyve
+ var newLevel = Math.min(f1.level + 1, 7);
+ var newFruit = new Fruit();
+ newFruit.setLevel(newLevel);
+ newFruit.x = newX;
+ newFruit.y = newY;
+ newFruit.vx = newVx;
+ newFruit.vy = -Math.abs(newVy) * 0.7 - 8; // yukarı zıplat
+ newFruit.isStatic = false;
+ game.addChild(newFruit);
+ fruits.push(newFruit);
+ // Animasyon
+ newFruit.scaleX = 0.7;
+ newFruit.scaleY = 0.7;
+ tween(newFruit, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 180,
+ easing: tween.easeOut
+ });
+ // Eski meyveleri sil
+ f1.visible = false;
+ f2.visible = false;
+ LK.setTimeout(function () {
+ f1.destroy();
+ f2.destroy();
+ }, 60);
+ // Listeden çıkar
+ for (var k = fruits.length - 1; k >= 0; k--) {
+ if (fruits[k] === f1 || fruits[k] === f2) fruits.splice(k, 1);
+ }
+ // Skor ekle
+ updateScore(score + Math.pow(2, newLevel + 1));
+ // En yüksek seviyeye ulaşıldıysa kazan
+ if (newLevel === 7) {
+ LK.setTimeout(function () {
+ LK.showYouWin();
+ }, 500);
+ }
+}
+// Meyve-meyve fiziksel çarpışma (sıçrama)
+function resolveFruitCollisions() {
+ for (var i = 0; i < fruits.length; i++) {
+ var f1 = fruits[i];
+ if (f1.isMerging) continue;
+ for (var j = i + 1; j < fruits.length; j++) {
+ var f2 = fruits[j];
+ if (f2.isMerging) continue;
+ // Çarpışma kontrolü
+ var dx = f1.x - f2.x;
+ var dy = f1.y - f2.y;
+ var dist = Math.sqrt(dx * dx + dy * dy);
+ var minDist = f1.radius + f2.radius;
+ if (dist < minDist - 2) {
+ // Meyveleri ayır
+ var overlap = (minDist - dist) / 2;
+ if (dist === 0) {
+ dx = Math.random() - 0.5;
+ dy = Math.random() - 0.5;
+ dist = 1;
+ }
+ var nx = dx / dist;
+ var ny = dy / dist;
+ f1.x += nx * overlap;
+ f1.y += ny * overlap;
+ f2.x -= nx * overlap;
+ f2.y -= ny * overlap;
+ // Basit elastik çarpışma
+ var tx = -ny,
+ ty = nx;
+ var dpTan1 = f1.vx * tx + f1.vy * ty;
+ var dpTan2 = f2.vx * tx + f2.vy * ty;
+ var dpNorm1 = f1.vx * nx + f1.vy * ny;
+ var dpNorm2 = f2.vx * nx + f2.vy * ny;
+ var m1 = dpNorm2;
+ var m2 = dpNorm1;
+ f1.vx = tx * dpTan1 + nx * m1;
+ f1.vy = ty * dpTan1 + ny * m1;
+ f2.vx = tx * dpTan2 + nx * m2;
+ f2.vy = ty * dpTan2 + ny * m2;
+ // Hafif sönümleme
+ f1.vx *= 0.98;
+ f1.vy *= 0.98;
+ f2.vx *= 0.98;
+ f2.vy *= 0.98;
+ }
+ }
+ }
+}
+// Meyveler taşarsa oyun biter
+function checkGameOver() {
+ for (var i = 0; i < fruits.length; i++) {
+ if (fruits[i].y - fruits[i].radius < 120) {
+ isGameOver = true;
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 400);
+ return;
+ }
+ }
+}
+// Oyun döngüsü
+game.update = function () {
+ // Meyveleri güncelle
+ for (var i = 0; i < fruits.length; i++) {
+ fruits[i].update();
+ }
+ // Çarpışma ve birleştirme
+ checkFruitMerges();
+ resolveFruitCollisions();
+ // Oyun bitti mi?
+ checkGameOver();
+};
+// Oyun bittiğinde veya kazanıldığında cleanup otomatik yapılır (LK tarafından)
+/* END */
\ No newline at end of file
pixel art 2d apple. In-Game asset. 2d. High contrast. No shadows
make pixel art 2d banana. In-Game asset. 2d. High contrast. No shadows
make pixel art 2d purple grapes. In-Game asset. 2d. High contrast. No shadows
make pixel art 2d orange. In-Game asset. 2d. High contrast. No shadows
make pixel art 2d strawberry. In-Game asset. 2d. High contrast. No shadows
make pixel art 2d watermelon. In-Game asset. 2d. High contrast. No shadows
make pixel art 2d pineapple. In-Game asset. 2d. High contrast. No shadows
The inside of a quiet and peaceful house with no people inside. In-Game asset. 2d. High contrast. No shadows
a floor made of stone. In-Game asset. 2d. High contrast. No shadows