/**** * 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();
;