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"); var storage = LK.import("@upit/storage.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 + taş duvarlar) // Sol taş duvar assetiyle çarpışma var leftWallRight = leftWall.x + leftWall.width; if (self.x - self.radius < leftWallRight) { self.x = leftWallRight + self.radius; self.vx = Math.abs(self.vx) * self.bounce; // Sağa seker } // Sağ taş duvar assetiyle çarpışma var rightWallLeft = rightWall.x - rightWall.width; if (self.x + self.radius > rightWallLeft) { self.x = rightWallLeft - self.radius; self.vx = -Math.abs(self.vx) * self.bounce; // Sola seker } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf7f7f7 }); /**** * Game Code ****/ // Oyun alanı boyutları // 7 farklı seviye için meyve şekilleri (örnek renkler ve boyutlar, gerçek oyunda görsellerle değiştirilebilir) // Limon // Portakal // Elma // Kivi // Üzüm // Karpuz // Ejder Meyvesi // Kap (bowl) var GAME_W = 2048; var GAME_H = 2732; // Arka plan ekle (huzurlu bir ev içi görseli) var background = LK.getAsset('bg_home', { anchorX: 0.5, anchorY: 0.5, x: GAME_W / 2, y: GAME_H / 2, scaleX: 1, scaleY: 1 }); game.addChild(background); // 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); // Taş duvarlar (sol ve sağ) var wallWidth = 120; var wallHeight = GAME_H; var leftWall = LK.getAsset('left', { anchorX: 0, anchorY: 0, x: 0, y: 0, scaleX: wallWidth / 100, scaleY: wallHeight / 100 }); var rightWall = LK.getAsset('left', { anchorX: 1, anchorY: 0, x: GAME_W, y: 0, scaleX: wallWidth / 100, scaleY: wallHeight / 100 }); game.addChild(leftWall); game.addChild(rightWall); // Meyve listesi var fruits = []; // Skor var score = 0; var topScore = storage.topScore || 0; var scoreTxt = new Text2('0', { size: 120, fill: "#222" }); scoreTxt.anchor.set(0.5, 0); // Top score text var topScoreTxt = new Text2('Top Score : ' + topScore, { size: 60, fill: "#000" }); topScoreTxt.anchor.set(0.5, 0); topScoreTxt.y = scoreTxt.height + 10; LK.gui.top.addChild(scoreTxt); LK.gui.top.addChild(topScoreTxt); // 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); if (score > topScore) { topScore = score; topScoreTxt.setText('En Yüksek: ' + topScore); storage.topScore = topScore; } } // Yeni meyve seviyesi seç (1-5 arası daha sık, 6-7 nadir) function getRandomLevel() { // %60 olasılıkla elma (fruit1), %40 olasılıkla muz (fruit2) fırlat var r = Math.random(); if (r < 0.6) { return 1; // elma } else { return 2; // muz } } // 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 veya 2 tane fruit7 birleşirse oyun biter var fruit7Count = 0; for (var i = 0; i < fruits.length; i++) { if (fruits[i].level === 7) { fruit7Count++; } } // Yeni oluşan meyve de fruit7 ise sayıyı artır if (newFruit.level === 7) { fruit7Count++; } if (fruit7Count >= 2) { isGameOver = true; LK.setTimeout(function () { LK.showYouWin(); }, 500); return; } // 20 veya daha fazla meyve varsa oyun biter if (fruits.length >= 20) { isGameOver = true; LK.setTimeout(function () { LK.showYouWin(); }, 500); return; } } // 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.showYouWin(); }, 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
@@ -213,10 +213,15 @@
}
}
// Yeni meyve seviyesi seç (1-5 arası daha sık, 6-7 nadir)
function getRandomLevel() {
- // Her zaman fruit1 fırlat
- return 1;
+ // %60 olasılıkla elma (fruit1), %40 olasılıkla muz (fruit2) fırlat
+ var r = Math.random();
+ if (r < 0.6) {
+ return 1; // elma
+ } else {
+ return 2; // muz
+ }
}
// Yeni meyve oluştur (henüz düşmeyen)
function spawnHoldingFruit() {
nextLevel = getRandomLevel();
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