User prompt
Sipariş yapılmıyor. Komple kodu düzelt
User prompt
Düzelt
User prompt
Masalara numara ekle. Bu numaralara göre sipariş takibi yapılsın.
User prompt
Bir garson, yalnızca 1 masanın siparişini tamamlasın. 1 masanın siparişi tamamlandıktan sonra başka masaya yönelsin.
User prompt
Sadece 1 müşteri ile ilgilensin. 1 müşterinin siparişi tamamlanmadan diğer müşteriye gitmesin.
User prompt
Sipariş almak ve sipariş götürmek yalnızca 1 masada olsun. Sipariş teslim etmeden, diğer masanın siparişini bekletsin.
User prompt
Bir Masanın, siparişini teslim etmeden, diğer masanın siparişini teslim etmesin.
User prompt
5 farklı yemek çeşidi oluştur. Her müşteri farklı yemek siparişi versin. Ancak garson ve aşçı hangi yemeğin, kime ait olduğunu unutmasın ve teslim etmeden diğer yemeğe geçmesinler.
User prompt
Otomatik üretimi kapat. Ancak sipariş alındığı zaman yemek üretilsin. Garson elinde yemek kaldı.
User prompt
Neden 1 masaya 2 müşteri yöneliyor?
User prompt
1 masaya 2 müşteri oturmasını engelle.
User prompt
Masada 1 müşteri varken, 2. Müşteri oturmasın, boşalmasını beklesin.
Code edit (1 edits merged)
Please save this source code
User prompt
Restaurant Rush Manager
Initial prompt
Restaurant Mağazası, Idle yönetim oyunu. Müşteri gelir, masaya oturur. Daha sonra sipariş verir. Garson siparişi aşçıya iletir. Aşçı siparişi hazırlayıp, garsona teslim eder. Garson siparişi müşteriye teslim eder. Yemek siparişini yiyen müşteri, daha sonra kasaya parayı ödeyip oradan ayrılır. Hız konusunda ve yeni masa konusunda yükseltme butonları olacak.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Chef = Container.expand(function () {
var self = Container.call(this);
var chefGraphics = self.attachAsset('chef', {
anchorX: 0.5,
anchorY: 0.5
});
self.cooking = false;
self.cookTime = 0;
self.currentFoodType = -1; // Track which food type is being cooked
self.targetTableIndex = -1; // Track which table the food is for
self.update = function () {
if (chefHasOrder && !self.cooking && !foodReady) {
self.cooking = true;
self.cookTime = 0;
self.currentFoodType = currentOrderFoodType; // Remember which food to cook
self.targetTableIndex = currentOrderTableIndex; // Remember which table it's for
// Log which table number's order is being cooked
if (self.targetTableIndex >= 0 && self.targetTableIndex < tables.length) {
console.log('Chef cooking for table number: ' + tables[self.targetTableIndex].tableNumber);
}
chefHasOrder = false;
}
if (self.cooking) {
self.cookTime++;
if (self.cookTime > cookingSpeed) {
self.cooking = false;
foodReady = true;
// Pass cooked food info back through globals
currentOrderFoodType = self.currentFoodType;
currentOrderTableIndex = self.targetTableIndex;
// Reset order taken for the specific table
if (self.targetTableIndex >= 0 && self.targetTableIndex < orderTaken.length) {
orderTaken[self.targetTableIndex] = false;
}
}
}
};
return self;
});
var Customer = Container.expand(function () {
var self = Container.call(this);
var customerGraphics = self.attachAsset('customer', {
anchorX: 0.5,
anchorY: 0.5
});
self.targetTable = null;
self.targetTableIndex = -1; // Track which table index is reserved
self.state = 'entering'; // entering, seated, waiting, eating, paying, leaving
self.eatingTime = 0;
self.waitTime = 0;
self.foodType = Math.floor(Math.random() * foodTypes.length); // Random food type
self.update = function () {
if (self.state === 'entering') {
if (self.targetTable) {
var dx = self.targetTable.x - self.x;
var dy = self.targetTable.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 5) {
self.x += dx / dist * customerSpeed;
self.y += dy / dist * customerSpeed;
} else {
self.state = 'seated';
self.targetTable.occupied = true;
self.targetTable.customer = self;
}
} else {
// Wait in line near entrance if no table available
if (self.y < 200) {
self.y += customerSpeed;
}
}
} else if (self.state === 'eating') {
self.eatingTime++;
if (self.eatingTime > 180) {
// 3 seconds at 60fps
self.state = 'paying';
if (self.targetTable) {
self.targetTable.foodDelivered = false;
if (self.targetTable.food) {
self.targetTable.food.destroy();
self.targetTable.food = null;
}
}
}
} else if (self.state === 'paying') {
var dx = registerX - self.x;
var dy = registerY - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 5) {
self.x += dx / dist * customerSpeed;
self.y += dy / dist * customerSpeed;
} else {
money += 10;
self.state = 'leaving';
if (self.targetTable) {
self.targetTable.occupied = false;
self.targetTable.customer = null;
self.targetTable.orderPlaced = false;
self.targetTable.orderedFoodType = -1; // Reset food type
}
// Clear reservation
if (self.targetTableIndex >= 0) {
tableReservations[self.targetTableIndex] = false;
}
}
} else if (self.state === 'leaving') {
self.y += customerSpeed;
if (self.y > 2800) {
// Clear reservation before destroying
if (self.targetTableIndex >= 0) {
tableReservations[self.targetTableIndex] = false;
}
self.destroy();
var index = customers.indexOf(self);
if (index > -1) customers.splice(index, 1);
}
} else if (self.state === 'seated') {
self.waitTime++;
if (self.waitTime > 120) {
// 2 seconds
self.targetTable.orderPlaced = true;
self.targetTable.orderedFoodType = self.foodType; // Set the food type on table
self.state = 'waiting';
}
}
};
return self;
});
var Table = Container.expand(function () {
var self = Container.call(this);
var tableGraphics = self.attachAsset('table', {
anchorX: 0.5,
anchorY: 0.5
});
var chairLeft = self.attachAsset('chair', {
anchorX: 0.5,
anchorY: 0.5,
x: -80,
y: 0
});
var chairRight = self.attachAsset('chair', {
anchorX: 0.5,
anchorY: 0.5,
x: 80,
y: 0
});
self.occupied = false;
self.customer = null;
self.food = null;
self.orderPlaced = false;
self.foodDelivered = false;
self.orderedFoodType = -1; // Store which food type was ordered
self.tableNumber = -1; // Table number for tracking
// Create table number text
self.numberText = new Text2('', {
size: 50,
fill: 0xFFFFFF
});
self.numberText.anchor.set(0.5, 0.5);
self.addChild(self.numberText);
// Method to set table number
self.setTableNumber = function (number) {
self.tableNumber = number;
self.numberText.setText('' + number);
};
return self;
});
var Waiter = Container.expand(function () {
var self = Container.call(this);
var waiterGraphics = self.attachAsset('waiter', {
anchorX: 0.5,
anchorY: 0.5
});
self.state = 'idle'; // idle, goingToTable, goingToKitchen, deliveringFood
self.targetTable = null;
self.hasFood = false;
self.food = null;
self.carryingFoodType = -1; // Track which food type waiter is carrying
self.targetTableIndex = -1; // Track which table the order/food is for
self.servingTableIndex = -1; // Track which table is being served until order is complete
self.update = function () {
if (self.state === 'idle') {
// If currently serving a table, check for ready food for that table
if (self.servingTableIndex >= 0 && foodReady && !foodBeingDelivered && currentOrderTableIndex === self.servingTableIndex) {
self.state = 'goingToKitchen';
} else if (self.servingTableIndex < 0) {
// Only take new orders when not serving any table
// Check for tables with orders
for (var i = 0; i < tables.length; i++) {
if (tables[i].orderPlaced && !orderTaken[i]) {
self.state = 'goingToTable';
self.targetTable = tables[i];
self.targetTableIndex = i;
self.servingTableIndex = i; // Start serving this table
// Log which table number is being served
console.log('Waiter serving table number: ' + tables[i].tableNumber);
break;
}
}
}
} else if (self.state === 'goingToTable') {
var dx = self.targetTable.x - self.x;
var dy = self.targetTable.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 5) {
self.x += dx / dist * waiterSpeed;
self.y += dy / dist * waiterSpeed;
} else {
orderTaken[self.targetTableIndex] = true;
self.carryingFoodType = self.targetTable.orderedFoodType; // Remember the food type
self.state = 'goingToKitchen';
chefHasOrder = true;
}
} else if (self.state === 'goingToKitchen') {
var dx = kitchenX - self.x;
var dy = kitchenY - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 5) {
self.x += dx / dist * waiterSpeed;
self.y += dy / dist * waiterSpeed;
} else {
// Pass order details to chef through global variables
if (chefHasOrder && self.carryingFoodType >= 0) {
currentOrderFoodType = self.carryingFoodType;
currentOrderTableIndex = self.targetTableIndex;
self.state = 'idle'; // Go idle after passing order to chef
}
if (foodReady && !self.hasFood && currentOrderTableIndex === self.servingTableIndex) {
self.hasFood = true;
foodReady = false;
foodBeingDelivered = true;
self.carryingFoodType = currentOrderFoodType; // Remember which food type
self.targetTableIndex = currentOrderTableIndex; // Remember target table
self.food = self.attachAsset('food', {
anchorX: 0.5,
anchorY: 0.5,
y: -40,
tint: foodColors[self.carryingFoodType] // Color based on food type
});
// Deliver to the specific table that ordered this food
if (self.targetTableIndex >= 0 && self.targetTableIndex < tables.length) {
self.targetTable = tables[self.targetTableIndex];
self.state = 'deliveringFood';
}
}
}
} else if (self.state === 'deliveringFood') {
var dx = self.targetTable.x - self.x;
var dy = self.targetTable.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 5) {
self.x += dx / dist * waiterSpeed;
self.y += dy / dist * waiterSpeed;
} else {
if (self.food) {
self.food.destroy();
self.food = null;
}
self.hasFood = false;
foodBeingDelivered = false;
self.targetTable.foodDelivered = true;
self.targetTable.food = self.targetTable.attachAsset('food', {
anchorX: 0.5,
anchorY: 0.5,
y: -20,
tint: foodColors[self.carryingFoodType] // Show correct food color
});
if (self.targetTable.customer) {
self.targetTable.customer.state = 'eating';
}
self.servingTableIndex = -1; // Order complete, can serve another table
self.state = 'idle';
self.targetTable = null;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xF5DEB3
});
/****
* Game Code
****/
// Game variables
var money = storage.money || 0;
var restaurantLevel = storage.restaurantLevel || 1;
var tableCount = storage.tableCount || 2;
var tableReservations = []; // Track which tables are reserved by customers
// Food types
var foodTypes = ['pizza', 'burger', 'pasta', 'salad', 'soup'];
var foodColors = [0xff6347, 0x8b4513, 0xffa500, 0x32cd32, 0xffd700];
// Speed variables (lower is faster)
var customerSpeed = 3;
var waiterSpeed = 4;
var cookingSpeed = 180; // 3 seconds at 60fps
// Game state
var tables = [];
var customers = [];
var orderTaken = [];
var chefHasOrder = false;
var foodReady = false;
var foodBeingDelivered = false;
var currentOrderFoodType = -1; // Track current order food type
var currentOrderTableIndex = -1; // Track current order table index
// Positions
var kitchenX = 1024;
var kitchenY = 400;
var registerX = 1024;
var registerY = 2400;
// UI Elements
var moneyText = new Text2('Money: $0', {
size: 60,
fill: 0x000000
});
moneyText.anchor.set(0.5, 0);
LK.gui.top.addChild(moneyText);
// Create kitchen
var kitchen = game.addChild(LK.getAsset('kitchen', {
anchorX: 0.5,
anchorY: 0.5,
x: kitchenX,
y: kitchenY
}));
// Create register
var register = game.addChild(LK.getAsset('register', {
anchorX: 0.5,
anchorY: 0.5,
x: registerX,
y: registerY
}));
// Create chef
var chef = game.addChild(new Chef());
chef.x = kitchenX;
chef.y = kitchenY;
// Create waiter
var waiter = game.addChild(new Waiter());
waiter.x = 1024;
waiter.y = 1366;
// Create initial tables
function createTable(index) {
var table = game.addChild(new Table());
var row = Math.floor(index / 2);
var col = index % 2;
table.x = 600 + col * 400;
table.y = 800 + row * 300;
table.setTableNumber(index + 1); // Set table number (1-based)
tables.push(table);
orderTaken.push(false);
tableReservations.push(false); // Initialize reservation status
}
for (var i = 0; i < tableCount; i++) {
createTable(i);
}
// Upgrade speed button
var upgradeButton = game.addChild(LK.getAsset('upgradeButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 500,
y: 2200
}));
var upgradeText = new Text2('Upgrade Speed $50', {
size: 40,
fill: 0xFFFFFF
});
upgradeText.anchor.set(0.5, 0.5);
upgradeText.x = 500;
upgradeText.y = 2200;
game.addChild(upgradeText);
upgradeButton.down = function () {
if (money >= 50) {
money -= 50;
restaurantLevel++;
customerSpeed = Math.max(2, customerSpeed - 0.5);
waiterSpeed = Math.max(2, waiterSpeed - 0.5);
cookingSpeed = Math.max(60, cookingSpeed - 20);
storage.restaurantLevel = restaurantLevel;
storage.money = money;
LK.effects.flashObject(upgradeButton, 0x00FF00, 500);
}
};
// Add table button
var addTableButton = game.addChild(LK.getAsset('addTableButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 1500,
y: 2200
}));
var addTableText = new Text2('Add Table $100', {
size: 40,
fill: 0xFFFFFF
});
addTableText.anchor.set(0.5, 0.5);
addTableText.x = 1500;
addTableText.y = 2200;
game.addChild(addTableText);
addTableButton.down = function () {
if (money >= 100 && tables.length < 8) {
money -= 100;
createTable(tables.length);
tableCount++;
storage.tableCount = tableCount;
storage.money = money;
LK.effects.flashObject(addTableButton, 0x00FF00, 500);
}
};
// Customer spawn timer
var customerSpawnTimer = 0;
// Game update
game.update = function () {
// Update money display
moneyText.setText('Money: $' + money);
// Spawn customers
customerSpawnTimer++;
if (customerSpawnTimer > 300) {
// Every 5 seconds
customerSpawnTimer = 0;
// Check if there are waiting customers first
var hasWaitingCustomer = false;
for (var j = 0; j < customers.length; j++) {
if (customers[j].state === 'entering' && !customers[j].targetTable) {
hasWaitingCustomer = true;
// Try to assign a table to waiting customer
for (var k = 0; k < tables.length; k++) {
if (!tables[k].occupied && !tables[k].customer && !tableReservations[k]) {
customers[j].targetTable = tables[k];
customers[j].targetTableIndex = k;
tableReservations[k] = true; // Reserve the table
break;
}
}
break;
}
}
// Only spawn new customer if no one is waiting
if (!hasWaitingCustomer) {
var customer = game.addChild(new Customer());
customer.x = 1024;
customer.y = -50;
customers.push(customer);
// Try to find available table
for (var i = 0; i < tables.length; i++) {
if (!tables[i].occupied && !tables[i].customer && !tableReservations[i]) {
customer.targetTable = tables[i];
customer.targetTableIndex = i;
tableReservations[i] = true; // Reserve the table
break;
}
}
// If no table available, customer will wait
}
}
// Save periodically
if (LK.ticks % 300 === 0) {
storage.money = money;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -231,10 +231,11 @@
// Pass order details to chef through global variables
if (chefHasOrder && self.carryingFoodType >= 0) {
currentOrderFoodType = self.carryingFoodType;
currentOrderTableIndex = self.targetTableIndex;
+ self.state = 'idle'; // Go idle after passing order to chef
}
- if (foodReady && !self.hasFood) {
+ if (foodReady && !self.hasFood && currentOrderTableIndex === self.servingTableIndex) {
self.hasFood = true;
foodReady = false;
foodBeingDelivered = true;
self.carryingFoodType = currentOrderFoodType; // Remember which food type
@@ -249,11 +250,8 @@
if (self.targetTableIndex >= 0 && self.targetTableIndex < tables.length) {
self.targetTable = tables[self.targetTableIndex];
self.state = 'deliveringFood';
}
- } else if (self.servingTableIndex < 0) {
- // Only go idle if not serving a table
- self.state = 'idle';
}
}
} else if (self.state === 'deliveringFood') {
var dx = self.targetTable.x - self.x;
Chair - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Chef - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Müşteri - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Bayan Müşteri - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Müşteri - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Garson - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Üstten görünüm table - Yazısız - Gerçekçi. In-Game asset. 2d. High contrast. No shadows
Masa ve sandalyesiz - üstten görünüm restaurant gerçekçi - yazısız. In-Game asset. 2d. High contrast. No shadows
Mutfak - üstten görünüm - gerçekçi - yazısız. In-Game asset. 2d. High contrast. No shadows
Üstten Bakış Yazar Kasa - Yazısız - Gerçekçi. In-Game asset. 2d. High contrast. No shadows
Yemek - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Burger - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Curry - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
dumpling - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
pasta - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Pizza - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
salad - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Soup - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Steak - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Tabakta Sushi - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Tabakta Taco - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
İçindeki içecekler görünen, meşrubat dolabı, gerçekçi - yazısız. In-Game asset. 2d. High contrast. No shadows
Ayran - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
caffee - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Cola - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Fanta - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
İcetea - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
OrangeJuice - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Maden suyu - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows
Su şişesi - Gerçekçi - Yazısız. In-Game asset. 2d. High contrast. No shadows