User prompt
3. Levelde dişçi modu açılsın 4. Levele gelene kadar
User prompt
Please fix the bug: 'TypeError: Cannot use 'in' operator to search for 'y' in null' in or related to this line: 'tween(draggedFood, {' Line Number: 533
User prompt
Ve oyuna eğlence ekle
User prompt
Oyunu daha da geliştir çok daha
User prompt
Ve ana menüyü geri ekle
User prompt
Ana menü hala var sadece yemekleri artır
User prompt
Tmm ozaman bu tarz ekleme yap
User prompt
Ve menü ve tüm yiyecekleri göreceğimiz tusları ekle menüye
User prompt
Şu sistemi ekle ana menü olsun ana menü tuşuları
User prompt
Bunu gelismiş seviyelere tası
User prompt
Oyuna karakterin yürüyüp alma sistemi ekle
User prompt
Ana menüyü kaldır
User prompt
Ana menü ekle
User prompt
Karakterde olsun ve arkadaş veya aı ile oynayalım
Code edit (1 edits merged)
Please save this source code
User prompt
Sepete Dokunmadan
Initial prompt
Bana bir markette olduğumuz ve marketten aldığımız yemekleri deymeden market sepetine atmamız gerekiyor
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Character class (player or AI)
var Character = Container.expand(function () {
var self = Container.call(this);
// Use a food asset as character icon for now
var charAsset = self.attachAsset('food1', {
anchorX: 0.5,
anchorY: 0.5
});
self.isAI = false;
self.targetFood = null;
self.speed = 12; // AI speed
self.update = function () {
if (self.isAI && self.targetFood && !self.targetFood.isDragging) {
// Move AI character towards the target food
var dx = self.targetFood.x - self.x;
var dy = self.targetFood.y - self.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 10) {
self.x += dx / dist * Math.min(self.speed, dist);
self.y += dy / dist * Math.min(self.speed, dist);
} else {
// "Pick up" the food if close enough
if (!self.targetFood.isDragging && !draggedFood) {
self.targetFood.isDragging = true;
draggedFood = self.targetFood;
self.targetFood.dragOffsetX = 0;
self.targetFood.dragOffsetY = 0;
self.targetFood.aiOwner = self;
}
}
}
};
return self;
});
// Food class
var Food = Container.expand(function () {
var self = Container.call(this);
// Randomly pick a food type
var foodTypes = ['food1', 'food2', 'food3'];
var typeIndex = Math.floor(Math.random() * foodTypes.length);
var foodAsset = self.attachAsset(foodTypes[typeIndex], {
anchorX: 0.5,
anchorY: 0.5
});
// Used for drag logic
self.isDragging = false;
self.dragOffsetX = 0;
self.dragOffsetY = 0;
// Used for collision detection
self.update = function () {
// No movement unless being dragged
};
// Down event for starting drag
self.down = function (x, y, obj) {
if (draggedFood) return; // Only one drag at a time
self.isDragging = true;
draggedFood = self;
// Offset for smooth dragging
self.dragOffsetX = self.x - x;
self.dragOffsetY = self.y - y;
};
// Up event for releasing drag
self.up = function (x, y, obj) {
if (!self.isDragging) return;
self.isDragging = false;
draggedFood = null;
// On release, check if inside basket
if (self.intersects(basket)) {
// Success!
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
// Animate food into basket and remove
tween(self, {
x: basket.x,
y: basket.y
}, {
duration: 200,
easing: tween.easeIn,
onFinish: function onFinish() {
self.destroy();
foods.splice(foods.indexOf(self), 1);
spawnFood();
}
});
} else {
// If not in basket, animate back to shelf
tween(self, {
x: self.startX,
y: self.startY
}, {
duration: 250,
easing: tween.easeOut
});
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xf5f5dc // Light beige, market-like
});
/****
* Game Code
****/
// --- Game variables ---
// Market shelf (raf) - horizontal box
// Food items (3 types for variety)
// Basket (sepet)
var shelfY = 500; // Y position of shelf
var basketY = 2400; // Y position of basket
var foods = [];
var draggedFood = null;
var basket = null;
var shelf = null;
// Characters
var playerChar = null;
var aiChar = null;
// --- GUI: Score ---
var scoreTxt = new Text2('0', {
size: 120,
fill: "#222"
});
scoreTxt.anchor.set(0.5, 0);
// --- Add score text to GUI
LK.gui.top.addChild(scoreTxt);
// --- Add shelf ---
shelf = LK.getAsset('shelf', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: shelfY
});
game.addChild(shelf);
// --- Add basket ---
basket = LK.getAsset('basket', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: basketY
});
game.addChild(basket);
// --- Add player character ---
playerChar = new Character();
playerChar.x = 2048 / 2 - 300;
playerChar.y = basketY + 120;
playerChar.isAI = false;
game.addChild(playerChar);
// --- Add AI character ---
aiChar = new Character();
aiChar.x = 2048 / 2 + 300;
aiChar.y = basketY + 120;
aiChar.isAI = true;
game.addChild(aiChar);
// --- Spawn food ---
for (var i = 0; i < 3; i++) {
spawnFood();
}
game.inputEnabled = true;
// --- Add shelf, basket, characters, and foods only after game start! ---
// --- Spawn food ---
function spawnFood() {
// Place food randomly along the shelf, but not overlapping with other foods
var maxTries = 10;
var placed = false;
var food = null;
while (!placed && maxTries-- > 0) {
food = new Food();
// Random X within shelf width, with margin
var margin = 120;
var minX = shelf.x - shelf.width / 2 + margin;
var maxX = shelf.x + shelf.width / 2 - margin;
food.x = Math.floor(minX + Math.random() * (maxX - minX));
food.y = shelf.y - 100; // Just above shelf
food.startX = food.x;
food.startY = food.y;
// Check overlap with other foods
var overlap = false;
for (var i = 0; i < foods.length; i++) {
if (food.intersects(foods[i])) {
overlap = true;
break;
}
}
if (!overlap) {
placed = true;
}
}
if (food) {
foods.push(food);
game.addChild(food);
}
}
// --- Drag logic ---
game.move = function (x, y, obj) {
if (!game.inputEnabled) return;
if (draggedFood && draggedFood.isDragging) {
// Move food with finger, but clamp inside game area
var nx = x + draggedFood.dragOffsetX;
var ny = y + draggedFood.dragOffsetY;
// Clamp to game area
nx = Math.max(draggedFood.width / 2, Math.min(2048 - draggedFood.width / 2, nx));
ny = Math.max(draggedFood.height / 2, Math.min(2732 - draggedFood.height / 2, ny));
draggedFood.x = nx;
draggedFood.y = ny;
// Check collision with other foods (not self) or shelf
for (var i = 0; i < foods.length; i++) {
var f = foods[i];
if (f !== draggedFood && draggedFood.intersects(f)) {
// Fail: touched another food
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
// Check collision with shelf (if not above shelf)
if (draggedFood.y > shelf.y - shelf.height / 2 - draggedFood.height / 2 && draggedFood.y < shelf.y + shelf.height / 2 + draggedFood.height / 2 && Math.abs(draggedFood.x - shelf.x) < shelf.width / 2 + draggedFood.width / 2) {
// Fail: touched shelf
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
};
// Down: start drag if on a food
game.down = function (x, y, obj) {
if (!game.inputEnabled) return;
// Find topmost food under pointer
for (var i = foods.length - 1; i >= 0; i--) {
var f = foods[i];
// Simple hit test
var dx = x - f.x;
var dy = y - f.y;
var r = Math.max(f.width, f.height) / 2;
if (dx * dx + dy * dy < r * r) {
// Simulate down on food
f.down(x, y, obj);
break;
}
}
};
// Up: release drag
game.up = function (x, y, obj) {
if (!game.inputEnabled) return;
if (draggedFood) {
draggedFood.up(x, y, obj);
}
};
// --- Game update (not used for movement, but could be for future) ---
game.update = function () {
if (!game.inputEnabled) return;
// Update characters
if (playerChar) playerChar.update();
if (aiChar) aiChar.update();
// AI logic: if not dragging, pick a food to deliver
if (aiChar && !draggedFood) {
// Find a food not being dragged
for (var i = 0; i < foods.length; i++) {
if (!foods[i].isDragging) {
aiChar.targetFood = foods[i];
break;
}
}
}
// If AI is dragging a food, move it toward the basket
if (draggedFood && draggedFood.aiOwner === aiChar) {
// Move food toward basket
var dx = basket.x - draggedFood.x;
var dy = basket.y - draggedFood.y;
var dist = Math.sqrt(dx * dx + dy * dy);
var aiSpeed = 18;
if (dist > 20) {
draggedFood.x += dx / dist * Math.min(aiSpeed, dist);
draggedFood.y += dy / dist * Math.min(aiSpeed, dist);
} else {
// Drop food in basket
draggedFood.isDragging = false;
draggedFood.aiOwner = null;
// Score for AI (or just increment score for now)
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
tween(draggedFood, {
x: basket.x,
y: basket.y
}, {
duration: 180,
easing: tween.easeIn,
onFinish: function onFinish() {
if (foods.indexOf(draggedFood) !== -1) {
draggedFood.destroy();
foods.splice(foods.indexOf(draggedFood), 1);
spawnFood();
}
}
});
draggedFood = null;
aiChar.targetFood = null;
}
}
};
// --- Win condition (optional: e.g. 20 items) ---
/*
if (LK.getScore() >= 20) {
LK.showYouWin();
}
*/
// --- Prevent elements in top left 100x100 (handled by not placing anything there) --- ===================================================================
--- original.js
+++ change.js
@@ -132,103 +132,43 @@
size: 120,
fill: "#222"
});
scoreTxt.anchor.set(0.5, 0);
-// --- Main Menu ---
-var mainMenuContainer = new Container();
-var menuBg = LK.getAsset('shelf', {
+// --- Add score text to GUI
+LK.gui.top.addChild(scoreTxt);
+// --- Add shelf ---
+shelf = LK.getAsset('shelf', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
- y: 1200,
- width: 1200,
- height: 800,
- color: 0xf5f5dc
+ y: shelfY
});
-mainMenuContainer.addChild(menuBg);
-var titleText = new Text2("Sepete Dokunmadan", {
- size: 140,
- fill: 0x3E2723
-});
-titleText.anchor.set(0.5, 0);
-titleText.x = 2048 / 2;
-titleText.y = 900;
-mainMenuContainer.addChild(titleText);
-var descText = new Text2("Yemekleri başka ürüne veya rafa değdirmeden sepete at!", {
- size: 60,
- fill: "#222"
-});
-descText.anchor.set(0.5, 0);
-descText.x = 2048 / 2;
-descText.y = 1100;
-mainMenuContainer.addChild(descText);
-var startBtnBg = LK.getAsset('basket', {
+game.addChild(shelf);
+// --- Add basket ---
+basket = LK.getAsset('basket', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
- y: 1450,
- width: 420,
- height: 160,
- color: 0x7ed957
+ y: basketY
});
-mainMenuContainer.addChild(startBtnBg);
-var startBtnText = new Text2("Başla", {
- size: 100,
- fill: "#fff"
-});
-startBtnText.anchor.set(0.5, 0.5);
-startBtnText.x = 2048 / 2;
-startBtnText.y = 1450;
-mainMenuContainer.addChild(startBtnText);
-LK.gui.center.addChild(mainMenuContainer);
-// Disable game input until start
-game.inputEnabled = false;
-// Start button logic
-mainMenuContainer.down = function (x, y, obj) {
- // Only react if inside start button
- var dx = x - startBtnBg.x;
- var dy = y - startBtnBg.y;
- if (Math.abs(dx) < startBtnBg.width / 2 && Math.abs(dy) < startBtnBg.height / 2) {
- // Remove menu
- LK.gui.center.removeChild(mainMenuContainer);
- // Enable game input
- game.inputEnabled = true;
- // Add score text to GUI
- LK.gui.top.addChild(scoreTxt);
- // --- Add shelf ---
- shelf = LK.getAsset('shelf', {
- anchorX: 0.5,
- anchorY: 0.5,
- x: 2048 / 2,
- y: shelfY
- });
- game.addChild(shelf);
- // --- Add basket ---
- basket = LK.getAsset('basket', {
- anchorX: 0.5,
- anchorY: 0.5,
- x: 2048 / 2,
- y: basketY
- });
- game.addChild(basket);
- // --- Add player character ---
- playerChar = new Character();
- playerChar.x = 2048 / 2 - 300;
- playerChar.y = basketY + 120;
- playerChar.isAI = false;
- game.addChild(playerChar);
- // --- Add AI character ---
- aiChar = new Character();
- aiChar.x = 2048 / 2 + 300;
- aiChar.y = basketY + 120;
- aiChar.isAI = true;
- game.addChild(aiChar);
- // --- Spawn food ---
- for (var i = 0; i < 3; i++) {
- spawnFood();
- }
- }
-};
+game.addChild(basket);
+// --- Add player character ---
+playerChar = new Character();
+playerChar.x = 2048 / 2 - 300;
+playerChar.y = basketY + 120;
+playerChar.isAI = false;
+game.addChild(playerChar);
+// --- Add AI character ---
+aiChar = new Character();
+aiChar.x = 2048 / 2 + 300;
+aiChar.y = basketY + 120;
+aiChar.isAI = true;
+game.addChild(aiChar);
+// --- Spawn food ---
+for (var i = 0; i < 3; i++) {
+ spawnFood();
+}
+game.inputEnabled = true;
// --- Add shelf, basket, characters, and foods only after game start! ---
// --- Spawn food ---
function spawnFood() {
// Place food randomly along the shelf, but not overlapping with other foods