User prompt
nesneler şişe dokunmadan, yakınından geçerken puan alabiliyorum. şiş nesneye tam temas etmeli
User prompt
şiş ekranın yarısından yukarı çıkamasın.
User prompt
Please fix the bug: 'ReferenceError: skewerFiring is not defined' in or related to this line: 'if (skewerFiring) {' Line Number: 126
User prompt
şiş istediğimiz gibi hareket ettirelim ve dik konumda olsun. şişe ile her nesneyi aldığımızda küçük bir efekt olsun şişin ucunda ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
şişe tıkladığım da ekranın diğer köşesine kadar gitsin gelsin. ve gidiş geliş hızı biraz daha yüksek olsun ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
şiş ekranın sol alt köşesinde çarpaz şekilde dursun. üzerine tıkladığımızda ileri doğru gidip nesneleri yakalasın. nesneler bir tık daha yavaş düşebilir.
User prompt
arka plan rengini değiştir. gökyüzü mavisi yada turkuaz gibi olabilir
User prompt
arka plan görselini farklı kullan
Code edit (1 edits merged)
Please save this source code
User prompt
Şişli Yakala
Initial prompt
bir adet şiş olacak. yukarıdan düşen sebzeleri ve köfteleri şiş ile yakalayacağız. arada bomba düşecek şiş ile onu yakalarsak oyun bitecek. sebze veya köfte yere düşerse oyun yine bitecek
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Düşen yiyecek ve bomba için temel sınıf
var FallingItem = Container.expand(function () {
var self = Container.call(this);
// .type, .speed, .assetId dışarıdan atanacak
self.update = function () {
self.y += self.speed;
};
return self;
});
// Şiş (Skewer) class
var Skewer = Container.expand(function () {
var self = Container.call(this);
var skewerAsset = self.attachAsset('skewer', {
anchorX: 0.5,
anchorY: 0.5
});
// No update needed, position is set by player
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x7ed6df // Gökyüzü mavisi/turkuaz arka plan
});
/****
* Game Code
****/
// Arka plan görselini ekle
var bgAsset = LK.getAsset('Biber', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0,
width: GAME_WIDTH,
height: GAME_HEIGHT
});
game.addChildAt(bgAsset, 0); // En arkaya ekle
// Bomba (bomb) - siyah
// Köfte (meatball) - kahverengi
// Sebze (vegetable) - yeşil
// Şiş (skewer)
// Oyun alanı boyutları
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
// Skewer oluştur ve konumlandır
var skewer = new Skewer();
game.addChild(skewer);
// Sol alt köşede, çapraz başlat
skewer.x = 120;
skewer.y = GAME_HEIGHT - 120;
skewer.rotation = -Math.PI / 4; // -45 derece çapraz
// Fırlama hareketi için değişkenler
var skewerFiring = false;
var skewerFireStart = {
x: skewer.x,
y: skewer.y
};
var skewerFireTarget = {
x: skewer.x,
y: skewer.y
};
var skewerFireProgress = 0;
var skewerFireDuration = 22; // Kaç frame ileri gitsin (yaklaşık 0.36sn)
var skewerFireDistance = 800; // Ne kadar ileri gitsin (px)
// Skewer'ın hareketi için sürükleme değişkenleri
var dragging = false;
// Skor metni
var scoreTxt = new Text2('0', {
size: 120,
fill: 0x7C4D03
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Skor
var score = 0;
// Düşen nesneler dizisi
var fallingItems = [];
// Oyun bitti mi kontrolü
var gameOver = false;
// Rastgele item türü seçimi
function getRandomItemType() {
// %40 sebze, %40 köfte, %20 bomba
var r = Math.random();
if (r < 0.4) return 'veggie';
if (r < 0.8) return 'meatball';
return 'bomb';
}
// Yeni düşen nesne oluştur
function spawnFallingItem() {
var itemType = getRandomItemType();
var item = new FallingItem();
item.type = itemType;
item.assetId = itemType;
item.speed = 7 + Math.random() * 4; // 7-11 px/sn, biraz daha yavaş
// Asset ekle
var asset = item.attachAsset(item.assetId, {
anchorX: 0.5,
anchorY: 0.5
});
// Rastgele x, kenarlara taşmasın
var margin = 100 + asset.width / 2;
item.x = margin + Math.random() * (GAME_WIDTH - 2 * margin);
item.y = -asset.height / 2;
fallingItems.push(item);
game.addChild(item);
}
// Oyun güncelleme fonksiyonu
game.update = function () {
if (gameOver) return;
// Skewer fırlama animasyonu
if (skewerFiring) {
skewerFireProgress++;
var t = skewerFireProgress / skewerFireDuration;
if (t < 0.5) {
// İleri giderken
var tt = t * 2;
skewer.x = skewerFireStart.x + (skewerFireTarget.x - skewerFireStart.x) * tt;
skewer.y = skewerFireStart.y + (skewerFireTarget.y - skewerFireStart.y) * tt;
} else if (t < 1) {
// Geri dönerken
var tt = (t - 0.5) * 2;
skewer.x = skewerFireTarget.x + (skewerFireStart.x - skewerFireTarget.x) * tt;
skewer.y = skewerFireTarget.y + (skewerFireStart.y - skewerFireTarget.y) * tt;
} else {
// Animasyon bitti
skewer.x = skewerFireStart.x;
skewer.y = skewerFireStart.y;
skewerFiring = false;
}
}
// Düşen nesneleri güncelle
for (var i = fallingItems.length - 1; i >= 0; i--) {
var item = fallingItems[i];
item.update();
// Yere değdi mi?
if (item.y - item.height / 2 > GAME_HEIGHT) {
if (item.type === 'veggie' || item.type === 'meatball') {
// Yiyecek yere düştü, oyun biter
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
gameOver = true;
return;
} else {
// Bomba yere düştü, sadece sil
item.destroy();
fallingItems.splice(i, 1);
continue;
}
}
// Şiş ile çarpışma kontrolü
if (item.intersects(skewer)) {
if (item.type === 'bomb') {
// Bomba yakalandı, oyun biter
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
gameOver = true;
return;
} else {
// Yiyecek yakalandı, skor artır
score += 1;
LK.setScore(score);
scoreTxt.setText(score);
// Yakalanan itemi sil
item.destroy();
fallingItems.splice(i, 1);
continue;
}
}
}
// Belirli aralıklarla yeni nesne oluştur
if (LK.ticks % 36 === 0) {
// ~1 adet/sn
spawnFallingItem();
}
};
// Skewer'ı sürüklemek için dokunma/taşıma olayları
function clamp(val, min, max) {
return Math.max(min, Math.min(max, val));
}
game.down = function (x, y, obj) {
// Sadece skewer'ın yakınında başlat
var local = skewer.toLocal(game.toGlobal({
x: x,
y: y
}));
if (Math.abs(local.x) < skewer.width / 2 + 80 && Math.abs(local.y) < skewer.height / 2 + 80) {
// Fırlama başlat
if (!skewerFiring) {
skewerFiring = true;
skewerFireStart.x = skewer.x;
skewerFireStart.y = skewer.y;
// Hedef: ekranın sağ üst köşesine kadar (çapraz)
// Skewer'ın merkezini ve asset boyutunu dikkate al
var margin = skewer.width / 2 + 40;
skewerFireTarget.x = GAME_WIDTH - margin;
skewerFireTarget.y = margin;
// Gidiş-geliş süresi (ms) - hızlıca
var fireDuration = 320; // gidiş 0.32sn
var returnDuration = 320; // dönüş 0.32sn
// Gidiş animasyonu
tween(skewer, {
x: skewerFireTarget.x,
y: skewerFireTarget.y
}, {
duration: fireDuration,
easing: tween.cubicOut,
onFinish: function onFinish() {
// Dönüş animasyonu
tween(skewer, {
x: skewerFireStart.x,
y: skewerFireStart.y
}, {
duration: returnDuration,
easing: tween.cubicIn,
onFinish: function onFinish() {
skewerFiring = false;
}
});
}
});
}
}
};
game.move = function (x, y, obj) {
if (dragging) {
moveSkewer(x, y);
}
};
game.up = function (x, y, obj) {
dragging = false;
};
function moveSkewer(x, y) {
// Sadece yatay hareket, kenarlara taşmasın
var halfWidth = skewer.width / 2;
skewer.x = clamp(x, halfWidth + 40, GAME_WIDTH - halfWidth - 40);
}
// Oyun başında skor sıfırla
score = 0;
LK.setScore(0);
scoreTxt.setText(score);
// Oyun bittiğinde cleanup (LK.showGameOver çağrıldığında otomatik resetlenir) ===================================================================
--- original.js
+++ change.js
@@ -199,12 +199,37 @@
if (!skewerFiring) {
skewerFiring = true;
skewerFireStart.x = skewer.x;
skewerFireStart.y = skewer.y;
- // Fırlama yönü: skewer'ın rotasyonuna göre ileri
- skewerFireTarget.x = skewer.x + Math.cos(skewer.rotation) * skewerFireDistance;
- skewerFireTarget.y = skewer.y + Math.sin(skewer.rotation) * skewerFireDistance;
- skewerFireProgress = 0;
+ // Hedef: ekranın sağ üst köşesine kadar (çapraz)
+ // Skewer'ın merkezini ve asset boyutunu dikkate al
+ var margin = skewer.width / 2 + 40;
+ skewerFireTarget.x = GAME_WIDTH - margin;
+ skewerFireTarget.y = margin;
+ // Gidiş-geliş süresi (ms) - hızlıca
+ var fireDuration = 320; // gidiş 0.32sn
+ var returnDuration = 320; // dönüş 0.32sn
+ // Gidiş animasyonu
+ tween(skewer, {
+ x: skewerFireTarget.x,
+ y: skewerFireTarget.y
+ }, {
+ duration: fireDuration,
+ easing: tween.cubicOut,
+ onFinish: function onFinish() {
+ // Dönüş animasyonu
+ tween(skewer, {
+ x: skewerFireStart.x,
+ y: skewerFireStart.y
+ }, {
+ duration: returnDuration,
+ easing: tween.cubicIn,
+ onFinish: function onFinish() {
+ skewerFiring = false;
+ }
+ });
+ }
+ });
}
}
};
game.move = function (x, y, obj) {
bomba. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
köfte. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
dikey bir kebab şişi. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
domates. In-Game asset. 2d. High contrast. No shadows
biber. In-Game asset. 2d. High contrast. No shadows