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; // Arka plan ekle var background = LK.getAsset('bowl', { anchorX: 0.5, anchorY: 0.5, x: GAME_W / 2, y: GAME_H / 2, scaleX: 1.5, scaleY: 10, tint: 0xf7f7f7 // Açık renkli arka plan }); 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); // 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) { // Eğer iki 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.showGameOver(); }, 500); return; } else { 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
@@ -106,18 +106,18 @@
/****
* 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)
+// 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;
// Arka plan ekle
var background = LK.getAsset('bowl', {
@@ -306,11 +306,26 @@
// 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);
+ // Eğer iki 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.showGameOver();
+ }, 500);
+ return;
+ } else {
+ LK.setTimeout(function () {
+ LK.showYouWin();
+ }, 500);
+ }
}
}
// Meyve-meyve fiziksel çarpışma (sıçrama)
function resolveFruitCollisions() {
@@ -362,15 +377,10 @@
}
}
// Meyveler taşarsa oyun biter
function checkGameOver() {
- // Sonsuz oyun: sadece meyveler kaba sığmazsa oyun biter
for (var i = 0; i < fruits.length; i++) {
- // Meyve üst sınırı: bowl'un üst kenarından yukarı taşarsa
- // Bowl'un üst kenarını hesapla
- var bowlTop = bowl.y - bowl.height / 2;
- // 80px üstünde bir tolerans bırak (bowl kenarının biraz üstü)
- if (fruits[i].y - fruits[i].radius < bowlTop - 80) {
+ if (fruits[i].y - fruits[i].radius < 120) {
isGameOver = true;
LK.setTimeout(function () {
LK.showGameOver();
}, 400);
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