/****
* Classes
****/
// --- Customer Sınıfı ---
var Customer = Container.expand(function () {
var self = Container.call(this);
// Erkek müşteri asset'i
var asset = self.attachAsset('customer', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: 300
});
return self;
});
// --- CustomerFemale Sınıfı ---
var CustomerFemale = Container.expand(function () {
var self = Container.call(this);
// Kadın müşteri asset'i
var asset = self.attachAsset('customer_female', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: 300
});
return self;
});
// --- IngredientButton Sınıfı ---
var IngredientButton = Container.expand(function () {
var self = Container.call(this);
self.ingredient = null;
self.selected = false;
// Malzeme asset'i ve yazısı
var asset = null;
var label = null;
// Malzeme atama fonksiyonu
self.setIngredient = function (ingredient) {
self.ingredient = ingredient;
// Önce eski asset ve label'ı sil
if (asset) {
self.removeChild(asset);
asset.destroy();
}
if (label) {
self.removeChild(label);
label.destroy();
}
// Asset oluştur
asset = self.attachAsset('ingredient_' + ingredient.id, {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 100,
color: ingredient.color
});
// Malzeme adı (altında, siyah renkte)
label = new Text2(ingredient.name, {
size: 44,
fill: "#111" // Siyah yazı
});
label.anchor.set(0.5, 0);
label.y = 70;
self.addChild(label);
};
// Seçili görsel efekti
self.update = function () {
if (self.selected) {
self.alpha = 0.6;
} else {
self.alpha = 1;
}
};
// Butona basınca seçili hale getir
self.down = function (x, y, obj) {
if (!self.ingredient) return;
// Seçiliyse kaldır, değilse ekle
if (self.selected) {
self.selected = false;
// Seçili malzemelerden çıkar
var idx = selectedIngredients.indexOf(self.ingredient.id);
if (idx !== -1) selectedIngredients.splice(idx, 1);
} else {
self.selected = true;
selectedIngredients.push(self.ingredient.id);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x00ff00
});
/****
* Game Code
****/
// Malzeme ve siparişler için örnek veri
// --- Oyun için temel değişkenler ve sınıflar ---
var INGREDIENTS = [{
id: 'lettuce',
name: 'Marul',
color: 0x7ed957
}, {
id: 'tomato',
name: 'Domates',
color: 0xff4b4b
}, {
id: 'cheese',
name: 'Peynir',
color: 0xffe066
}, {
id: 'meat',
name: 'Et',
color: 0x8b5c2a
}, {
id: 'onion',
name: 'Soğan',
color: 0xe0c97f
}, {
id: 'cucumber',
name: 'Salatalık',
color: 0x6ecb63
}, {
id: 'egg',
name: 'Yumurta',
color: 0xf7e7b0
}, {
id: 'chicken',
name: 'Tavuk',
color: 0xf5c16c
}, {
id: 'bread',
name: 'Ekmek',
color: 0xf5e6b2
}];
var RECIPES = [{
name: 'Burger',
ingredients: ['lettuce', 'tomato', 'cheese', 'meat'],
type: 'cook'
}, {
name: 'Salata',
ingredients: ['lettuce', 'tomato', 'cheese'],
type: 'normal'
}, {
name: 'Peynirli Sandviç',
ingredients: ['cheese', 'lettuce', 'tomato', 'bread'],
type: 'normal'
}, {
name: 'Etli Sandviç',
ingredients: ['meat', 'cheese', 'lettuce', 'bread'],
type: 'cook'
}, {
name: 'Domatesli Salata',
ingredients: ['lettuce', 'tomato'],
type: 'normal'
}, {
name: 'Tavuklu Salata',
ingredients: ['lettuce', 'tomato', 'chicken', 'cucumber'],
type: 'normal'
}, {
name: 'Yumurtalı Salata',
ingredients: ['lettuce', 'egg', 'tomato', 'onion'],
type: 'cook'
}, {
name: 'Tavuklu Sandviç',
ingredients: ['chicken', 'cheese', 'lettuce', 'bread'],
type: 'cook'
}, {
name: 'Sebzeli Sandviç',
ingredients: ['lettuce', 'tomato', 'cucumber', 'bread'],
type: 'normal'
}, {
name: 'Soğanlı Burger',
ingredients: ['meat', 'cheese', 'onion', 'bread'],
type: 'cook'
},
// Drinks
{
name: 'Limonata',
ingredients: ['lemon', 'water', 'sugar'],
type: 'drink'
}, {
name: 'Soğuk Çay',
ingredients: ['tea', 'water', 'sugar', 'lemon'],
type: 'drink'
}, {
name: 'Ayran',
ingredients: ['yogurt', 'water', 'salt'],
type: 'drink'
}];
// Ekstra içecek ve pişirme malzemeleri
if (!INGREDIENTS.find(function (i) {
return i.id === 'lemon';
})) INGREDIENTS.push({
id: 'lemon',
name: 'Limon',
color: 0xfff700
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'water';
})) INGREDIENTS.push({
id: 'water',
name: 'Su',
color: 0x8fd3f4
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'sugar';
})) INGREDIENTS.push({
id: 'sugar',
name: 'Şeker',
color: 0xffffff
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'tea';
})) INGREDIENTS.push({
id: 'tea',
name: 'Çay',
color: 0x7b3f00
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'yogurt';
})) INGREDIENTS.push({
id: 'yogurt',
name: 'Yoğurt',
color: 0xfafafa
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'salt';
})) INGREDIENTS.push({
id: 'salt',
name: 'Tuz',
color: 0xe0e0e0
});
var currentOrder = null;
var selectedIngredients = [];
var customer = null;
var ingredientButtons = [];
var score = 0;
var orderTimer = null;
var orderTimeLimit = 30000; // ms, 30 saniye
var orderTimeLeft = orderTimeLimit;
var orderText = null;
var scoreText = null;
var timerText = null;
// --- Sipariş oluşturma ve gösterme ---
function newOrder() {
// Sipariş ve seçili malzemeleri sıfırla
selectedIngredients = [];
for (var i = 0; i < ingredientButtons.length; i++) {
ingredientButtons[i].selected = false;
ingredientButtons[i].alpha = 1;
}
// Rastgele sipariş seç
currentOrder = RECIPES[Math.floor(Math.random() * RECIPES.length)];
if (orderText) orderText.destroy();
orderText = new Text2("Sipariş: " + currentOrder.name, {
size: 90,
fill: "#fff"
});
orderText.anchor.set(0.5, 0);
// orderText'i deliverBtn'in hemen altına yerleştir
orderText.x = 2048 / 2;
orderText.y = deliverBtn.y + deliverBtn.height / 2 + 30;
game.addChild(orderText);
// Pişir ve içecek hazırla butonları her zaman görünür, sadece ilgili siparişlerde aktif olur
if (typeof cookBtn !== "undefined" && cookBtn) {
cookBtn.visible = true;
cookBtn.alpha = currentOrder.type === 'cook' ? 1 : 0.5;
cookBtn.interactive = currentOrder.type === 'cook';
}
if (typeof drinkBtn !== "undefined" && drinkBtn) {
drinkBtn.visible = true;
drinkBtn.alpha = currentOrder.type === 'drink' ? 1 : 0.5;
drinkBtn.interactive = currentOrder.type === 'drink';
}
// Zamanı başlat
orderTimeLeft = orderTimeLimit;
if (timerText) timerText.destroy();
timerText = new Text2("Süre: " + Math.floor(orderTimeLeft / 1000), {
size: 80,
fill: "#fff"
});
timerText.anchor.set(0.5, 0);
// timerText'i orderText'in hemen altına yerleştir
timerText.x = 2048 / 2;
timerText.y = orderText.y + orderText.height + 10;
game.addChild(timerText);
// Müşteri oluştur
if (customer) customer.destroy();
if (Math.random() < 0.5) {
customer = new Customer();
} else {
customer = new CustomerFemale();
}
customer.x = 2048 / 2;
customer.y = 600;
game.addChild(customer);
// Zamanlayıcı başlat
if (orderTimer) LK.clearInterval(orderTimer);
orderTimer = LK.setInterval(function () {
orderTimeLeft -= 100;
if (timerText) timerText.setText("Süre: " + Math.ceil(orderTimeLeft / 1000));
if (orderTimeLeft <= 0) {
LK.clearInterval(orderTimer);
failOrder();
}
}, 100);
}
// --- Pişir ve içecek hazırla butonları için global değişkenler ---
window.cooked = false;
window.drinkReady = false;
// --- Cook button logic ---
// cookBtn, startGame'de oluşturuluyor, bu yüzden fonksiyonu orada atayacağız
function setCookBtnHandler() {
if (typeof cookBtn !== "undefined" && cookBtn) {
cookBtn.down = function (x, y, obj) {
if (!currentOrder || currentOrder.type !== 'cook') return;
if (selectedIngredients.length !== currentOrder.ingredients.length) {
LK.effects.flashScreen(0xffa500, 400);
return;
}
// Sıralı ve tam malzeme kontrolü
var correct = true;
for (var i = 0; i < currentOrder.ingredients.length; i++) {
if (selectedIngredients[i] !== currentOrder.ingredients[i]) {
correct = false;
break;
}
}
if (correct) {
window.cooked = true;
LK.effects.flashObject(cookBtn, 0x00ff00, 600);
} else {
LK.effects.flashObject(cookBtn, 0xff0000, 600);
}
};
}
}
// --- Drink button logic ---
// (Artık handler sadece startGame içinde atanıyor, burada tekrar atama yok)
// --- Siparişi kontrol et ---
function checkOrder() {
if (!currentOrder) return;
// Pişirme veya içecek hazırlama gerektiriyorsa, önce o işlem yapılmalı
if (currentOrder.type === 'cook' && !window.cooked) {
LK.effects.flashScreen(0xffa500, 400);
return;
}
if (currentOrder.type === 'drink' && !window.drinkReady) {
LK.effects.flashScreen(0x8fd3f4, 400);
return;
}
var correct = true;
if (selectedIngredients.length !== currentOrder.ingredients.length) correct = false;else {
for (var i = 0; i < currentOrder.ingredients.length; i++) {
if (selectedIngredients[i] !== currentOrder.ingredients[i]) {
correct = false;
break;
}
}
}
if (correct) {
score += 10;
if (scoreText) scoreText.setText("Puan: " + score);
LK.effects.flashScreen(0x00ff00, 400);
LK.clearInterval(orderTimer);
window.cooked = false;
window.drinkReady = false;
LK.setTimeout(newOrder, 800);
} else {
failOrder();
window.cooked = false;
window.drinkReady = false;
}
}
// --- Sipariş başarısız ---
function failOrder() {
LK.effects.flashScreen(0xff0000, 400);
LK.clearInterval(orderTimer);
score -= 5;
if (score < 0) score = 0;
if (scoreText) scoreText.setText("Puan: " + score);
LK.setTimeout(newOrder, 800);
}
// --- Oyun başlat ---
function startGame() {
// Skor gösterimi
if (scoreText) scoreText.destroy();
scoreText = new Text2("Puan: 0", {
size: 90,
fill: "#fff"
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Malzeme butonlarını oluştur
for (var i = 0; i < ingredientButtons.length; i++) {
ingredientButtons[i].destroy();
}
ingredientButtons = [];
// Mobilde ekranın altına ve ortalanmış şekilde butonları 2 satırda yerleştir
var buttonAreaY = 2732 - 270; // Alt kısımda, deliverBtn'in üstünde, biraz daha yukarı
var buttonSize = 170; // Daha küçük butonlar
var spacing = 38; // Daha az boşluk
var buttonsPerRow = Math.ceil(INGREDIENTS.length / 2);
var totalWidth = buttonsPerRow * buttonSize + (buttonsPerRow - 1) * spacing;
var startX = 2048 / 2 - totalWidth / 2 + buttonSize / 2;
for (var i = 0; i < INGREDIENTS.length; i++) {
var btn = new IngredientButton();
btn.setIngredient(INGREDIENTS[i]);
var row = Math.floor(i / buttonsPerRow);
var col = i % buttonsPerRow;
btn.x = startX + col * (buttonSize + spacing);
btn.y = buttonAreaY - row * (buttonSize + 40); // 2. satır yukarıda
btn.scaleX = btn.scaleY = buttonSize / 200; // IngredientButton asset boyutu 200, orantılı küçült
ingredientButtons.push(btn);
game.addChild(btn);
}
// Pişir ve İçecek Hazırla butonları
if (typeof cookBtn !== "undefined" && cookBtn) cookBtn.destroy();
if (typeof drinkBtn !== "undefined" && drinkBtn) drinkBtn.destroy();
// Butonları yan yana, orderText'in hemen altına ortalanmış şekilde yerleştir
drinkBtn = new Container();
var drinkAsset = drinkBtn.attachAsset('ingredient_water', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 100,
color: 0x8fd3f4
});
var drinkText = new Text2("İçecek Hazırla", {
size: 44,
fill: "#222"
});
drinkText.anchor.set(0.5, 0.5);
drinkBtn.addChild(drinkText);
cookBtn = new Container();
var cookAsset = cookBtn.attachAsset('ingredient_meat', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 100,
color: 0xffa500
});
var cookText = new Text2("Pişir", {
size: 54,
fill: "#fff"
});
cookText.anchor.set(0.5, 0.5);
cookBtn.addChild(cookText);
// Ortak y koordinatı: orderText'in hemen altı
var btnsY = 0;
if (orderText && orderText.y !== undefined && orderText.height !== undefined) {
btnsY = orderText.y + orderText.height + 40;
} else if (timerText && timerText.y !== undefined && timerText.height !== undefined) {
btnsY = timerText.y + timerText.height + 40;
} else {
btnsY = 600 + 150 + 60 + 200;
}
// Yan yana, ortalanmış şekilde x koordinatları
var btnSpacing = 60;
var btnWidth = 200;
var totalBtnsWidth = btnWidth * 2 + btnSpacing;
var startX = 2048 / 2 - totalBtnsWidth / 2 + btnWidth / 2;
cookBtn.x = startX;
cookBtn.y = btnsY;
cookBtn.visible = true;
game.addChild(cookBtn);
drinkBtn.x = startX + btnWidth + btnSpacing;
drinkBtn.y = btnsY;
drinkBtn.visible = true;
game.addChild(drinkBtn);
setCookBtnHandler();
// Drink butonunun handler'ını burada atıyoruz (her zaman çalışır)
drinkBtn.down = function (x, y, obj) {
if (!currentOrder || currentOrder.type !== 'drink') return;
if (selectedIngredients.length !== currentOrder.ingredients.length) {
LK.effects.flashScreen(0x8fd3f4, 400);
return;
}
// Sıralı ve tam malzeme kontrolü
var correct = true;
for (var i = 0; i < currentOrder.ingredients.length; i++) {
if (selectedIngredients[i] !== currentOrder.ingredients[i]) {
correct = false;
break;
}
}
if (correct) {
window.drinkReady = true;
LK.effects.flashObject(drinkBtn, 0x00ff00, 600);
} else {
LK.effects.flashObject(drinkBtn, 0xff0000, 600);
}
};
// Sipariş başlat
newOrder();
}
// --- Teslim et butonu ---
var deliverBtn = new Container();
var deliverAsset = deliverBtn.attachAsset('deliver', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: 120,
color: 0x4b8cff
});
var deliverText = new Text2("Teslim Et", {
size: 70,
fill: "#fff"
});
deliverText.anchor.set(0.5, 0.5);
deliverBtn.addChild(deliverText);
deliverBtn.x = 2048 / 2;
// Müşterinin hemen altına yerleştir (müşteri 600'de, yüksekliği 300, biraz boşluk ekle)
deliverBtn.y = 600 + 150 + 60; // customer.y + customer.height/2 + margin
deliverBtn.down = function (x, y, obj) {
checkOrder();
};
game.addChild(deliverBtn);
// --- Tarif Kitabı (Recipe Book) ---
// Tarif kitabı paneli (tam ekran, başta gizli)
var recipeBookPanel = new Container();
var recipeBookBg = recipeBookPanel.attachAsset('ingredient_lettuce', {
anchorX: 0.5,
anchorY: 0.5,
width: 2048,
height: 2732,
color: 0xfafafa
});
recipeBookPanel.x = 2048 / 2;
recipeBookPanel.y = 2732 / 2;
recipeBookPanel.visible = false;
// Panel başlığı
var recipeTitle = new Text2("Tarifler", {
size: 110,
fill: "#222"
});
recipeTitle.anchor.set(0.5, 0);
recipeTitle.y = -1100;
recipeBookPanel.addChild(recipeTitle);
// Tarifleri listele
var yStart = recipeTitle.y + 180;
var recipeLineSpacing = 100;
for (var i = 0; i < RECIPES.length; i++) {
var recipe = RECIPES[i];
var recipeStr = recipe.name + ": ";
for (var j = 0; j < recipe.ingredients.length; j++) {
var ing = INGREDIENTS.find(function (x) {
return x.id === recipe.ingredients[j];
});
recipeStr += ing ? ing.name : recipe.ingredients[j];
if (j < recipe.ingredients.length - 1) recipeStr += ", ";
}
// Pişirme veya içecek gerektiriyorsa belirt
if (recipe.type === 'cook') {
recipeStr += " [Pişirilmeli]";
} else if (recipe.type === 'drink') {
recipeStr += " [İçecek Hazırlanmalı]";
}
var recipeLine = new Text2(recipeStr, {
size: 80,
fill: "#333"
});
recipeLine.anchor.set(0.5, 0);
recipeLine.y = yStart + i * recipeLineSpacing;
recipeBookPanel.addChild(recipeLine);
}
// Kapatma butonu (büyük, üstte)
var closeBtn = new Container();
var closeBtnAsset = closeBtn.attachAsset('ingredient_tomato', {
anchorX: 0.5,
anchorY: 0.5,
width: 160,
height: 160,
color: 0xff4b4b
});
var closeBtnText = new Text2("Kapat", {
size: 48,
fill: "#fff"
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtn.addChild(closeBtnText);
closeBtn.x = 0;
closeBtn.y = -1200;
closeBtn.down = function (x, y, obj) {
recipeBookPanel.visible = false;
};
recipeBookPanel.addChild(closeBtn);
// Paneli oyuna ekle (en üstte olacak şekilde)
game.addChild(recipeBookPanel);
// Her frame'de recipeBookPanel'i en üste taşı
game.update = function (origUpdate) {
return function () {
// Panel görünürse, en üste taşı
if (recipeBookPanel && recipeBookPanel.visible) {
// En üste taşımak için önce çıkarıp tekrar ekle
if (recipeBookPanel.parent) {
recipeBookPanel.parent.removeChild(recipeBookPanel);
game.addChild(recipeBookPanel);
}
}
if (typeof origUpdate === "function") origUpdate.call(game);
};
}(game.update);
// Tarif kitabı açma butonu (her zaman görünür, ekranın sağ üstünde, tarif paneli açıkken gizli)
var recipeBookBtn = new Container();
var recipeBookBtnAsset = recipeBookBtn.attachAsset('ingredient_cheese', {
anchorX: 0.5,
anchorY: 0.5,
width: 140,
height: 140,
color: 0xffe066
});
var recipeBookBtnText = new Text2("Tarifler", {
size: 44,
fill: "#222"
});
recipeBookBtnText.anchor.set(0.5, 0.5);
recipeBookBtn.addChild(recipeBookBtnText);
// Sağ üstte, platform menüsüne çakışmayacak şekilde (ilk 100x100 px boş bırak)
recipeBookBtn.x = 2048 - 160;
recipeBookBtn.y = 100 + 70;
recipeBookBtn.down = function (x, y, obj) {
recipeBookPanel.visible = true;
recipeBookBtn.visible = false;
// Diğer etkileşimli elemanları gizle
deliverBtn.visible = false;
for (var i = 0; i < ingredientButtons.length; i++) {
ingredientButtons[i].visible = false;
}
if (customer) customer.visible = false;
if (orderText) orderText.visible = false;
if (timerText) timerText.visible = false;
};
// Panel açıldığında kapatma butonuna basınca tekrar göster
closeBtn.down = function (x, y, obj) {
recipeBookPanel.visible = false;
recipeBookBtn.visible = true;
// Diğer etkileşimli elemanları tekrar göster
deliverBtn.visible = true;
for (var i = 0; i < ingredientButtons.length; i++) {
ingredientButtons[i].visible = true;
}
if (customer) customer.visible = true;
if (orderText) orderText.visible = true;
if (timerText) timerText.visible = true;
};
game.addChild(recipeBookBtn);
// --- Oyunu başlat ---
startGame();
; /****
* Classes
****/
// --- Customer Sınıfı ---
var Customer = Container.expand(function () {
var self = Container.call(this);
// Erkek müşteri asset'i
var asset = self.attachAsset('customer', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: 300
});
return self;
});
// --- CustomerFemale Sınıfı ---
var CustomerFemale = Container.expand(function () {
var self = Container.call(this);
// Kadın müşteri asset'i
var asset = self.attachAsset('customer_female', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: 300
});
return self;
});
// --- IngredientButton Sınıfı ---
var IngredientButton = Container.expand(function () {
var self = Container.call(this);
self.ingredient = null;
self.selected = false;
// Malzeme asset'i ve yazısı
var asset = null;
var label = null;
// Malzeme atama fonksiyonu
self.setIngredient = function (ingredient) {
self.ingredient = ingredient;
// Önce eski asset ve label'ı sil
if (asset) {
self.removeChild(asset);
asset.destroy();
}
if (label) {
self.removeChild(label);
label.destroy();
}
// Asset oluştur
asset = self.attachAsset('ingredient_' + ingredient.id, {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 100,
color: ingredient.color
});
// Malzeme adı (altında, siyah renkte)
label = new Text2(ingredient.name, {
size: 44,
fill: "#111" // Siyah yazı
});
label.anchor.set(0.5, 0);
label.y = 70;
self.addChild(label);
};
// Seçili görsel efekti
self.update = function () {
if (self.selected) {
self.alpha = 0.6;
} else {
self.alpha = 1;
}
};
// Butona basınca seçili hale getir
self.down = function (x, y, obj) {
if (!self.ingredient) return;
// Seçiliyse kaldır, değilse ekle
if (self.selected) {
self.selected = false;
// Seçili malzemelerden çıkar
var idx = selectedIngredients.indexOf(self.ingredient.id);
if (idx !== -1) selectedIngredients.splice(idx, 1);
} else {
self.selected = true;
selectedIngredients.push(self.ingredient.id);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x00ff00
});
/****
* Game Code
****/
// Malzeme ve siparişler için örnek veri
// --- Oyun için temel değişkenler ve sınıflar ---
var INGREDIENTS = [{
id: 'lettuce',
name: 'Marul',
color: 0x7ed957
}, {
id: 'tomato',
name: 'Domates',
color: 0xff4b4b
}, {
id: 'cheese',
name: 'Peynir',
color: 0xffe066
}, {
id: 'meat',
name: 'Et',
color: 0x8b5c2a
}, {
id: 'onion',
name: 'Soğan',
color: 0xe0c97f
}, {
id: 'cucumber',
name: 'Salatalık',
color: 0x6ecb63
}, {
id: 'egg',
name: 'Yumurta',
color: 0xf7e7b0
}, {
id: 'chicken',
name: 'Tavuk',
color: 0xf5c16c
}, {
id: 'bread',
name: 'Ekmek',
color: 0xf5e6b2
}];
var RECIPES = [{
name: 'Burger',
ingredients: ['lettuce', 'tomato', 'cheese', 'meat'],
type: 'cook'
}, {
name: 'Salata',
ingredients: ['lettuce', 'tomato', 'cheese'],
type: 'normal'
}, {
name: 'Peynirli Sandviç',
ingredients: ['cheese', 'lettuce', 'tomato', 'bread'],
type: 'normal'
}, {
name: 'Etli Sandviç',
ingredients: ['meat', 'cheese', 'lettuce', 'bread'],
type: 'cook'
}, {
name: 'Domatesli Salata',
ingredients: ['lettuce', 'tomato'],
type: 'normal'
}, {
name: 'Tavuklu Salata',
ingredients: ['lettuce', 'tomato', 'chicken', 'cucumber'],
type: 'normal'
}, {
name: 'Yumurtalı Salata',
ingredients: ['lettuce', 'egg', 'tomato', 'onion'],
type: 'cook'
}, {
name: 'Tavuklu Sandviç',
ingredients: ['chicken', 'cheese', 'lettuce', 'bread'],
type: 'cook'
}, {
name: 'Sebzeli Sandviç',
ingredients: ['lettuce', 'tomato', 'cucumber', 'bread'],
type: 'normal'
}, {
name: 'Soğanlı Burger',
ingredients: ['meat', 'cheese', 'onion', 'bread'],
type: 'cook'
},
// Drinks
{
name: 'Limonata',
ingredients: ['lemon', 'water', 'sugar'],
type: 'drink'
}, {
name: 'Soğuk Çay',
ingredients: ['tea', 'water', 'sugar', 'lemon'],
type: 'drink'
}, {
name: 'Ayran',
ingredients: ['yogurt', 'water', 'salt'],
type: 'drink'
}];
// Ekstra içecek ve pişirme malzemeleri
if (!INGREDIENTS.find(function (i) {
return i.id === 'lemon';
})) INGREDIENTS.push({
id: 'lemon',
name: 'Limon',
color: 0xfff700
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'water';
})) INGREDIENTS.push({
id: 'water',
name: 'Su',
color: 0x8fd3f4
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'sugar';
})) INGREDIENTS.push({
id: 'sugar',
name: 'Şeker',
color: 0xffffff
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'tea';
})) INGREDIENTS.push({
id: 'tea',
name: 'Çay',
color: 0x7b3f00
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'yogurt';
})) INGREDIENTS.push({
id: 'yogurt',
name: 'Yoğurt',
color: 0xfafafa
});
if (!INGREDIENTS.find(function (i) {
return i.id === 'salt';
})) INGREDIENTS.push({
id: 'salt',
name: 'Tuz',
color: 0xe0e0e0
});
var currentOrder = null;
var selectedIngredients = [];
var customer = null;
var ingredientButtons = [];
var score = 0;
var orderTimer = null;
var orderTimeLimit = 30000; // ms, 30 saniye
var orderTimeLeft = orderTimeLimit;
var orderText = null;
var scoreText = null;
var timerText = null;
// --- Sipariş oluşturma ve gösterme ---
function newOrder() {
// Sipariş ve seçili malzemeleri sıfırla
selectedIngredients = [];
for (var i = 0; i < ingredientButtons.length; i++) {
ingredientButtons[i].selected = false;
ingredientButtons[i].alpha = 1;
}
// Rastgele sipariş seç
currentOrder = RECIPES[Math.floor(Math.random() * RECIPES.length)];
if (orderText) orderText.destroy();
orderText = new Text2("Sipariş: " + currentOrder.name, {
size: 90,
fill: "#fff"
});
orderText.anchor.set(0.5, 0);
// orderText'i deliverBtn'in hemen altına yerleştir
orderText.x = 2048 / 2;
orderText.y = deliverBtn.y + deliverBtn.height / 2 + 30;
game.addChild(orderText);
// Pişir ve içecek hazırla butonları her zaman görünür, sadece ilgili siparişlerde aktif olur
if (typeof cookBtn !== "undefined" && cookBtn) {
cookBtn.visible = true;
cookBtn.alpha = currentOrder.type === 'cook' ? 1 : 0.5;
cookBtn.interactive = currentOrder.type === 'cook';
}
if (typeof drinkBtn !== "undefined" && drinkBtn) {
drinkBtn.visible = true;
drinkBtn.alpha = currentOrder.type === 'drink' ? 1 : 0.5;
drinkBtn.interactive = currentOrder.type === 'drink';
}
// Zamanı başlat
orderTimeLeft = orderTimeLimit;
if (timerText) timerText.destroy();
timerText = new Text2("Süre: " + Math.floor(orderTimeLeft / 1000), {
size: 80,
fill: "#fff"
});
timerText.anchor.set(0.5, 0);
// timerText'i orderText'in hemen altına yerleştir
timerText.x = 2048 / 2;
timerText.y = orderText.y + orderText.height + 10;
game.addChild(timerText);
// Müşteri oluştur
if (customer) customer.destroy();
if (Math.random() < 0.5) {
customer = new Customer();
} else {
customer = new CustomerFemale();
}
customer.x = 2048 / 2;
customer.y = 600;
game.addChild(customer);
// Zamanlayıcı başlat
if (orderTimer) LK.clearInterval(orderTimer);
orderTimer = LK.setInterval(function () {
orderTimeLeft -= 100;
if (timerText) timerText.setText("Süre: " + Math.ceil(orderTimeLeft / 1000));
if (orderTimeLeft <= 0) {
LK.clearInterval(orderTimer);
failOrder();
}
}, 100);
}
// --- Pişir ve içecek hazırla butonları için global değişkenler ---
window.cooked = false;
window.drinkReady = false;
// --- Cook button logic ---
// cookBtn, startGame'de oluşturuluyor, bu yüzden fonksiyonu orada atayacağız
function setCookBtnHandler() {
if (typeof cookBtn !== "undefined" && cookBtn) {
cookBtn.down = function (x, y, obj) {
if (!currentOrder || currentOrder.type !== 'cook') return;
if (selectedIngredients.length !== currentOrder.ingredients.length) {
LK.effects.flashScreen(0xffa500, 400);
return;
}
// Sıralı ve tam malzeme kontrolü
var correct = true;
for (var i = 0; i < currentOrder.ingredients.length; i++) {
if (selectedIngredients[i] !== currentOrder.ingredients[i]) {
correct = false;
break;
}
}
if (correct) {
window.cooked = true;
LK.effects.flashObject(cookBtn, 0x00ff00, 600);
} else {
LK.effects.flashObject(cookBtn, 0xff0000, 600);
}
};
}
}
// --- Drink button logic ---
// (Artık handler sadece startGame içinde atanıyor, burada tekrar atama yok)
// --- Siparişi kontrol et ---
function checkOrder() {
if (!currentOrder) return;
// Pişirme veya içecek hazırlama gerektiriyorsa, önce o işlem yapılmalı
if (currentOrder.type === 'cook' && !window.cooked) {
LK.effects.flashScreen(0xffa500, 400);
return;
}
if (currentOrder.type === 'drink' && !window.drinkReady) {
LK.effects.flashScreen(0x8fd3f4, 400);
return;
}
var correct = true;
if (selectedIngredients.length !== currentOrder.ingredients.length) correct = false;else {
for (var i = 0; i < currentOrder.ingredients.length; i++) {
if (selectedIngredients[i] !== currentOrder.ingredients[i]) {
correct = false;
break;
}
}
}
if (correct) {
score += 10;
if (scoreText) scoreText.setText("Puan: " + score);
LK.effects.flashScreen(0x00ff00, 400);
LK.clearInterval(orderTimer);
window.cooked = false;
window.drinkReady = false;
LK.setTimeout(newOrder, 800);
} else {
failOrder();
window.cooked = false;
window.drinkReady = false;
}
}
// --- Sipariş başarısız ---
function failOrder() {
LK.effects.flashScreen(0xff0000, 400);
LK.clearInterval(orderTimer);
score -= 5;
if (score < 0) score = 0;
if (scoreText) scoreText.setText("Puan: " + score);
LK.setTimeout(newOrder, 800);
}
// --- Oyun başlat ---
function startGame() {
// Skor gösterimi
if (scoreText) scoreText.destroy();
scoreText = new Text2("Puan: 0", {
size: 90,
fill: "#fff"
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
// Malzeme butonlarını oluştur
for (var i = 0; i < ingredientButtons.length; i++) {
ingredientButtons[i].destroy();
}
ingredientButtons = [];
// Mobilde ekranın altına ve ortalanmış şekilde butonları 2 satırda yerleştir
var buttonAreaY = 2732 - 270; // Alt kısımda, deliverBtn'in üstünde, biraz daha yukarı
var buttonSize = 170; // Daha küçük butonlar
var spacing = 38; // Daha az boşluk
var buttonsPerRow = Math.ceil(INGREDIENTS.length / 2);
var totalWidth = buttonsPerRow * buttonSize + (buttonsPerRow - 1) * spacing;
var startX = 2048 / 2 - totalWidth / 2 + buttonSize / 2;
for (var i = 0; i < INGREDIENTS.length; i++) {
var btn = new IngredientButton();
btn.setIngredient(INGREDIENTS[i]);
var row = Math.floor(i / buttonsPerRow);
var col = i % buttonsPerRow;
btn.x = startX + col * (buttonSize + spacing);
btn.y = buttonAreaY - row * (buttonSize + 40); // 2. satır yukarıda
btn.scaleX = btn.scaleY = buttonSize / 200; // IngredientButton asset boyutu 200, orantılı küçült
ingredientButtons.push(btn);
game.addChild(btn);
}
// Pişir ve İçecek Hazırla butonları
if (typeof cookBtn !== "undefined" && cookBtn) cookBtn.destroy();
if (typeof drinkBtn !== "undefined" && drinkBtn) drinkBtn.destroy();
// Butonları yan yana, orderText'in hemen altına ortalanmış şekilde yerleştir
drinkBtn = new Container();
var drinkAsset = drinkBtn.attachAsset('ingredient_water', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 100,
color: 0x8fd3f4
});
var drinkText = new Text2("İçecek Hazırla", {
size: 44,
fill: "#222"
});
drinkText.anchor.set(0.5, 0.5);
drinkBtn.addChild(drinkText);
cookBtn = new Container();
var cookAsset = cookBtn.attachAsset('ingredient_meat', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 100,
color: 0xffa500
});
var cookText = new Text2("Pişir", {
size: 54,
fill: "#fff"
});
cookText.anchor.set(0.5, 0.5);
cookBtn.addChild(cookText);
// Ortak y koordinatı: orderText'in hemen altı
var btnsY = 0;
if (orderText && orderText.y !== undefined && orderText.height !== undefined) {
btnsY = orderText.y + orderText.height + 40;
} else if (timerText && timerText.y !== undefined && timerText.height !== undefined) {
btnsY = timerText.y + timerText.height + 40;
} else {
btnsY = 600 + 150 + 60 + 200;
}
// Yan yana, ortalanmış şekilde x koordinatları
var btnSpacing = 60;
var btnWidth = 200;
var totalBtnsWidth = btnWidth * 2 + btnSpacing;
var startX = 2048 / 2 - totalBtnsWidth / 2 + btnWidth / 2;
cookBtn.x = startX;
cookBtn.y = btnsY;
cookBtn.visible = true;
game.addChild(cookBtn);
drinkBtn.x = startX + btnWidth + btnSpacing;
drinkBtn.y = btnsY;
drinkBtn.visible = true;
game.addChild(drinkBtn);
setCookBtnHandler();
// Drink butonunun handler'ını burada atıyoruz (her zaman çalışır)
drinkBtn.down = function (x, y, obj) {
if (!currentOrder || currentOrder.type !== 'drink') return;
if (selectedIngredients.length !== currentOrder.ingredients.length) {
LK.effects.flashScreen(0x8fd3f4, 400);
return;
}
// Sıralı ve tam malzeme kontrolü
var correct = true;
for (var i = 0; i < currentOrder.ingredients.length; i++) {
if (selectedIngredients[i] !== currentOrder.ingredients[i]) {
correct = false;
break;
}
}
if (correct) {
window.drinkReady = true;
LK.effects.flashObject(drinkBtn, 0x00ff00, 600);
} else {
LK.effects.flashObject(drinkBtn, 0xff0000, 600);
}
};
// Sipariş başlat
newOrder();
}
// --- Teslim et butonu ---
var deliverBtn = new Container();
var deliverAsset = deliverBtn.attachAsset('deliver', {
anchorX: 0.5,
anchorY: 0.5,
width: 300,
height: 120,
color: 0x4b8cff
});
var deliverText = new Text2("Teslim Et", {
size: 70,
fill: "#fff"
});
deliverText.anchor.set(0.5, 0.5);
deliverBtn.addChild(deliverText);
deliverBtn.x = 2048 / 2;
// Müşterinin hemen altına yerleştir (müşteri 600'de, yüksekliği 300, biraz boşluk ekle)
deliverBtn.y = 600 + 150 + 60; // customer.y + customer.height/2 + margin
deliverBtn.down = function (x, y, obj) {
checkOrder();
};
game.addChild(deliverBtn);
// --- Tarif Kitabı (Recipe Book) ---
// Tarif kitabı paneli (tam ekran, başta gizli)
var recipeBookPanel = new Container();
var recipeBookBg = recipeBookPanel.attachAsset('ingredient_lettuce', {
anchorX: 0.5,
anchorY: 0.5,
width: 2048,
height: 2732,
color: 0xfafafa
});
recipeBookPanel.x = 2048 / 2;
recipeBookPanel.y = 2732 / 2;
recipeBookPanel.visible = false;
// Panel başlığı
var recipeTitle = new Text2("Tarifler", {
size: 110,
fill: "#222"
});
recipeTitle.anchor.set(0.5, 0);
recipeTitle.y = -1100;
recipeBookPanel.addChild(recipeTitle);
// Tarifleri listele
var yStart = recipeTitle.y + 180;
var recipeLineSpacing = 100;
for (var i = 0; i < RECIPES.length; i++) {
var recipe = RECIPES[i];
var recipeStr = recipe.name + ": ";
for (var j = 0; j < recipe.ingredients.length; j++) {
var ing = INGREDIENTS.find(function (x) {
return x.id === recipe.ingredients[j];
});
recipeStr += ing ? ing.name : recipe.ingredients[j];
if (j < recipe.ingredients.length - 1) recipeStr += ", ";
}
// Pişirme veya içecek gerektiriyorsa belirt
if (recipe.type === 'cook') {
recipeStr += " [Pişirilmeli]";
} else if (recipe.type === 'drink') {
recipeStr += " [İçecek Hazırlanmalı]";
}
var recipeLine = new Text2(recipeStr, {
size: 80,
fill: "#333"
});
recipeLine.anchor.set(0.5, 0);
recipeLine.y = yStart + i * recipeLineSpacing;
recipeBookPanel.addChild(recipeLine);
}
// Kapatma butonu (büyük, üstte)
var closeBtn = new Container();
var closeBtnAsset = closeBtn.attachAsset('ingredient_tomato', {
anchorX: 0.5,
anchorY: 0.5,
width: 160,
height: 160,
color: 0xff4b4b
});
var closeBtnText = new Text2("Kapat", {
size: 48,
fill: "#fff"
});
closeBtnText.anchor.set(0.5, 0.5);
closeBtn.addChild(closeBtnText);
closeBtn.x = 0;
closeBtn.y = -1200;
closeBtn.down = function (x, y, obj) {
recipeBookPanel.visible = false;
};
recipeBookPanel.addChild(closeBtn);
// Paneli oyuna ekle (en üstte olacak şekilde)
game.addChild(recipeBookPanel);
// Her frame'de recipeBookPanel'i en üste taşı
game.update = function (origUpdate) {
return function () {
// Panel görünürse, en üste taşı
if (recipeBookPanel && recipeBookPanel.visible) {
// En üste taşımak için önce çıkarıp tekrar ekle
if (recipeBookPanel.parent) {
recipeBookPanel.parent.removeChild(recipeBookPanel);
game.addChild(recipeBookPanel);
}
}
if (typeof origUpdate === "function") origUpdate.call(game);
};
}(game.update);
// Tarif kitabı açma butonu (her zaman görünür, ekranın sağ üstünde, tarif paneli açıkken gizli)
var recipeBookBtn = new Container();
var recipeBookBtnAsset = recipeBookBtn.attachAsset('ingredient_cheese', {
anchorX: 0.5,
anchorY: 0.5,
width: 140,
height: 140,
color: 0xffe066
});
var recipeBookBtnText = new Text2("Tarifler", {
size: 44,
fill: "#222"
});
recipeBookBtnText.anchor.set(0.5, 0.5);
recipeBookBtn.addChild(recipeBookBtnText);
// Sağ üstte, platform menüsüne çakışmayacak şekilde (ilk 100x100 px boş bırak)
recipeBookBtn.x = 2048 - 160;
recipeBookBtn.y = 100 + 70;
recipeBookBtn.down = function (x, y, obj) {
recipeBookPanel.visible = true;
recipeBookBtn.visible = false;
// Diğer etkileşimli elemanları gizle
deliverBtn.visible = false;
for (var i = 0; i < ingredientButtons.length; i++) {
ingredientButtons[i].visible = false;
}
if (customer) customer.visible = false;
if (orderText) orderText.visible = false;
if (timerText) timerText.visible = false;
};
// Panel açıldığında kapatma butonuna basınca tekrar göster
closeBtn.down = function (x, y, obj) {
recipeBookPanel.visible = false;
recipeBookBtn.visible = true;
// Diğer etkileşimli elemanları tekrar göster
deliverBtn.visible = true;
for (var i = 0; i < ingredientButtons.length; i++) {
ingredientButtons[i].visible = true;
}
if (customer) customer.visible = true;
if (orderText) orderText.visible = true;
if (timerText) timerText.visible = true;
};
game.addChild(recipeBookBtn);
// --- Oyunu başlat ---
startGame();
;