User prompt
Yeni bir tarla yeri açmak için 20 paramız olması lazım tarla açmamız için şuan olan tarlanın alt tarafındaki boş yere bir tuş ekle.
User prompt
Mısır ekme colddown süresini tarlaların üstünde göster
User prompt
Mısırları topladığımda tarlaya bidaha mısır ekmem için 5 saniye beklemem gerek.
User prompt
Mısırları biz ekmediğimiz sürece kendisi otomatik ekmesin
User prompt
Sadece ilk mısırların çıkma süresi 5 olsun sonra 1er saniye artsın çıkma süresi her ekimde.
User prompt
Please fix the bug: 'Uncaught TypeError: icon.containsPoint is not a function' in or related to this line: 'if (icon.containsPoint({' Line Number: 589
User prompt
Please fix the bug: 'Uncaught TypeError: game.cookArea.containsPoint is not a function' in or related to this line: 'if (game.cookArea.visible && game.cookArea.containsPoint({' Line Number: 906
User prompt
Please fix the bug: 'Uncaught TypeError: game.cornBox.containsPoint is not a function' in or related to this line: 'if (game.cornBox.visible && game.cornBox.containsPoint({' Line Number: 888
User prompt
Mısırların olma sürelerini yukarlarına yaz almaya hazır olduklarında ready yazsın üstlerinde.
User prompt
4 tane tarla olsun şuanlık
User prompt
Please fix the bug: 'Uncaught TypeError: game.orderArea.containsPoint is not a function' in or related to this line: 'if (game.orderArea.visible && game.orderArea.containsPoint({' Line Number: 853
User prompt
Tarla sayısını 4de düşür
User prompt
3 ekran olsun ekranlar arasında geçiş yapabileceğim yön tuşları olsun bunlara basınca sırasıyla tarla, mısır toplama ve satış yeri gelsin hepsi tek bir ekranda olmasın.
User prompt
Please fix the bug: 'Uncaught TypeError: f.containsPoint is not a function' in or related to this line: 'if (f.containsPoint({' Line Number: 718
User prompt
Please fix the bug: 'Uncaught TypeError: unlockBtnContainer.containsPoint is not a function' in or related to this line: 'if (unlockBtnContainer.containsPoint({' Line Number: 688
User prompt
Please fix the bug: 'Uncaught TypeError: unlockBtn.containsPoint is not a function' in or related to this line: 'if (unlockBtn.containsPoint({' Line Number: 685
Code edit (1 edits merged)
Please save this source code
User prompt
Mısır Satıcısı: Tarladan Tezgaha
Initial prompt
Yapacağımız oyun bir mısır satma oyunu olacak. Oyunun ilk ekranında tarla yerleri olacak. Bu tarla yerlerinden ilk başta 4 tane olacak. Sonra para ile alınabilecek 12 tane daha tarım yeri olacak. Tarım yerlerinden mısır ekeceğiz. Mısır tohumları olacak ilk başta bize 4 tane tohum verilicek. İlk ektiğimiz ürünler 5 saniyede oluşacak. Biz bu ürünleri tıklayarak alacağız. Ve diğer ekran geçişi yapacağız. Diğer ekranda geçiş yaptığımızda mısırları mısır üzerinden teker teker toplayarak bir kutunun içine koyacağız. Kutunun içine koyduğumuz mısırları pişirme yerine götüreceğiz.Müşteri olucak ve bizden rastgeli soslu mısır isticek.
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
// CookArea: Cooks raw corn, can be tapped to cook, then send to order area
var CookArea = Container.expand(function () {
var self = Container.call(this);
var cookAsset = self.attachAsset('cook', {
anchorX: 0.5,
anchorY: 0.5
});
cookAsset.width = 220;
cookAsset.height = 220;
self.rawCorn = 0;
self.cookedCorn = 0;
// Cooked corn icon
var cookedAsset = self.attachAsset('cooked', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
cookedAsset.width = 120;
cookedAsset.height = 120;
// Texts
var rawTxt = new Text2('0', {
size: 60,
fill: "#fff"
});
rawTxt.anchor.set(0.5, 0.2);
self.addChild(rawTxt);
var cookedTxt = new Text2('0', {
size: 60,
fill: 0xFFB347
});
cookedTxt.anchor.set(0.5, 0.8);
self.addChild(cookedTxt);
self.addRawCorn = function (n) {
self.rawCorn += n;
rawTxt.setText(self.rawCorn);
LK.effects.flashObject(cookAsset, 0xffff00, 200);
};
self.removeRawCorn = function (n) {
if (self.rawCorn >= n) {
self.rawCorn -= n;
rawTxt.setText(self.rawCorn);
return true;
}
return false;
};
self.addCookedCorn = function (n) {
self.cookedCorn += n;
cookedTxt.setText(self.cookedCorn);
cookedAsset.alpha = 1;
LK.effects.flashObject(cookedAsset, 0xffb347, 200);
};
self.removeCookedCorn = function (n) {
if (self.cookedCorn >= n) {
self.cookedCorn -= n;
cookedTxt.setText(self.cookedCorn);
if (self.cookedCorn === 0) cookedAsset.alpha = 0;
return true;
}
return false;
};
self.down = function (x, y, obj) {
if (self.rawCorn > 0) {
// Cook one corn (takes time)
self.removeRawCorn(1);
LK.effects.flashObject(cookAsset, 0xffb347, 200);
LK.setTimeout(function () {
self.addCookedCorn(1);
}, game.cookTime);
} else if (self.cookedCorn > 0) {
// Send cooked corn to order area
var globalCook = self.toGlobal({
x: 0,
y: 0
});
var orderPos = game.orderArea.getGlobalCenter();
var flyingCorn = LK.getAsset('cooked', {
anchorX: 0.5,
anchorY: 0.5,
x: globalCook.x,
y: globalCook.y,
width: 100,
height: 100
});
game.addChild(flyingCorn);
tween(flyingCorn, {
x: orderPos.x,
y: orderPos.y,
alpha: 0.2
}, {
duration: 500,
easing: tween.cubicOut,
onFinish: function onFinish() {
flyingCorn.destroy();
if (self.removeCookedCorn(1)) {
game.orderArea.addCorn(1);
}
}
});
}
};
self.getGlobalCenter = function () {
var pos = self.toGlobal({
x: 0,
y: 0
});
return {
x: pos.x,
y: pos.y
};
};
self.reset = function () {
self.rawCorn = 0;
self.cookedCorn = 0;
rawTxt.setText('0');
cookedTxt.setText('0');
cookedAsset.alpha = 0;
};
// Add containsPoint method to CookArea
self.containsPoint = function (point) {
// Convert global point to local coordinates of the CookArea
var localX = point.x - self.x;
var localY = point.y - self.y;
// cookAsset is centered at (0,0) with anchor 0.5,0.5
var w = cookAsset.width;
var h = cookAsset.height;
// Check if localX, localY is inside cookAsset bounds
return localX >= -w / 2 && localX <= w / 2 && localY >= -h / 2 && localY <= h / 2;
};
return self;
});
// CornBox: Stores harvested corn, can be tapped to send to cook area
var CornBox = Container.expand(function () {
var self = Container.call(this);
var boxAsset = self.attachAsset('box', {
anchorX: 0.5,
anchorY: 0.5
});
boxAsset.width = 220;
boxAsset.height = 220;
self.cornCount = 0;
// Corn count text
var cornTxt = new Text2('0', {
size: 80,
fill: 0xFFF700
});
cornTxt.anchor.set(0.5, 0.5);
self.addChild(cornTxt);
self.addCorn = function (n) {
self.cornCount += n;
cornTxt.setText(self.cornCount);
LK.effects.flashObject(boxAsset, 0xffff00, 200);
};
self.removeCorn = function (n) {
if (self.cornCount >= n) {
self.cornCount -= n;
cornTxt.setText(self.cornCount);
return true;
}
return false;
};
self.down = function (x, y, obj) {
if (self.cornCount > 0) {
// Animate corn to cook area
var globalBox = self.toGlobal({
x: 0,
y: 0
});
var cookPos = game.cookArea.getGlobalCenter();
var flyingCorn = LK.getAsset('corn', {
anchorX: 0.5,
anchorY: 0.5,
x: globalBox.x,
y: globalBox.y,
width: 100,
height: 100
});
game.addChild(flyingCorn);
tween(flyingCorn, {
x: cookPos.x,
y: cookPos.y,
alpha: 0.2
}, {
duration: 500,
easing: tween.cubicOut,
onFinish: function onFinish() {
flyingCorn.destroy();
if (self.removeCorn(1)) {
game.cookArea.addRawCorn(1);
}
}
});
}
};
self.getGlobalCenter = function () {
var pos = self.toGlobal({
x: 0,
y: 0
});
return {
x: pos.x,
y: pos.y
};
};
self.reset = function () {
self.cornCount = 0;
cornTxt.setText('0');
};
// Add containsPoint method to CornBox
self.containsPoint = function (point) {
// Convert global point to local coordinates of the CornBox
var localX = point.x - self.x;
var localY = point.y - self.y;
// boxAsset is centered at (0,0) with anchor 0.5,0.5
var w = boxAsset.width;
var h = boxAsset.height;
// Check if localX, localY is inside boxAsset bounds
return localX >= -w / 2 && localX <= w / 2 && localY >= -h / 2 && localY <= h / 2;
};
return self;
});
// CornField: Represents a single field where corn can be planted, grown, and harvested
var CornField = Container.expand(function () {
var self = Container.call(this);
// States: 'empty', 'growing', 'ready'
self.state = 'empty';
self.index = 0; // set by game
self.cornType = null; // for future upgrades
// Field asset
var fieldAsset = self.attachAsset('field', {
anchorX: 0.5,
anchorY: 0.5
});
fieldAsset.width = 320;
fieldAsset.height = 320;
// Corn asset (hidden unless growing/ready)
var cornAsset = self.attachAsset('corn', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
cornAsset.width = 180;
cornAsset.height = 180;
// Grow time/ready text above corn
var growTxt = new Text2('', {
size: 60,
fill: "#fff"
});
growTxt.anchor.set(0.5, 1);
growTxt.x = 0;
growTxt.y = -120;
self.addChild(growTxt);
// Cooldown text above field (for replant cooldown)
var cooldownTxt = new Text2('', {
size: 60,
fill: 0xFF4444
});
cooldownTxt.anchor.set(0.5, 1);
cooldownTxt.x = 0;
cooldownTxt.y = -180;
self.addChild(cooldownTxt);
// Track grow start time for countdown
self._growStart = null;
self._growEnd = null;
// Show field as locked if not unlocked
var lockAsset = self.attachAsset('lock', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
lockAsset.width = 120;
lockAsset.height = 120;
// Track how many times this field has been planted
self.plantCount = 0;
// Plant corn if field is empty
self.down = function (x, y, obj) {
if (self.state === 'empty' && !self.locked) {
if (self._replantCooldown) {
// Show cooldown visually
LK.effects.flashObject(fieldAsset, 0xff0000, 200);
return;
}
self.plant();
} else if (self.locked) {
// Try to unlock if enough coins
if (game.coins >= game.unlockCost) {
game.coins -= game.unlockCost;
self.unlock();
game.updateCoins();
} else {
LK.effects.flashObject(lockAsset, 0xff0000, 500);
}
} else if (self.state === 'ready') {
self.harvest();
}
};
self.plant = function () {
self.state = 'growing';
cornAsset.alpha = 1;
cornAsset.scaleX = 0.5;
cornAsset.scaleY = 0.5;
tween(cornAsset, {
scaleX: 1,
scaleY: 1
}, {
duration: 400,
easing: tween.easeOut
});
// Calculate grow time: 5s for first, +1s for each subsequent plant
if (typeof self.plantCount !== "number") self.plantCount = 0;
var growTime = 5000 + self.plantCount * 1000;
self.plantCount++;
// Start grow timer
self._growStart = Date.now();
self._growEnd = self._growStart + growTime;
growTxt.setText(Math.ceil(growTime / 1000));
self.growTimeout = LK.setTimeout(function () {
self.state = 'ready';
self._growStart = null;
self._growEnd = null;
growTxt.setText('ready');
LK.effects.flashObject(cornAsset, 0xffff00, 400);
}, growTime);
};
self.harvest = function () {
if (self.state !== 'ready') return;
self.state = 'empty';
cornAsset.alpha = 0;
growTxt.setText('');
self._growStart = null;
self._growEnd = null;
// Animate corn flying to box
var globalCorn = self.toGlobal({
x: 0,
y: 0
});
var boxPos = game.cornBox.getGlobalCenter();
var flyingCorn = LK.getAsset('corn', {
anchorX: 0.5,
anchorY: 0.5,
x: globalCorn.x,
y: globalCorn.y,
width: 120,
height: 120
});
game.addChild(flyingCorn);
tween(flyingCorn, {
x: boxPos.x,
y: boxPos.y,
alpha: 0.2
}, {
duration: 600,
easing: tween.cubicOut,
onFinish: function onFinish() {
flyingCorn.destroy();
game.cornBox.addCorn(1);
}
});
// Start replant cooldown: prevent planting for 5 seconds
self._replantCooldown = true;
cooldownTxt.setText('5');
var cooldownLeft = 5;
self._replantCooldownTimer = LK.setInterval(function () {
cooldownLeft--;
if (cooldownLeft > 0) {
cooldownTxt.setText('' + cooldownLeft);
} else {
LK.clearInterval(self._replantCooldownTimer);
self._replantCooldown = false;
cooldownTxt.setText('');
}
}, 1000);
};
self.locked = false;
self.lock = function () {
self.locked = true;
lockAsset.alpha = 1;
cornAsset.alpha = 0;
self.state = 'empty';
};
self.unlock = function () {
self.locked = false;
lockAsset.alpha = 0;
};
self.setLocked = function (locked) {
if (locked) self.lock();else self.unlock();
};
self.reset = function () {
self.state = 'empty';
cornAsset.alpha = 0;
if (self.growTimeout) LK.clearTimeout(self.growTimeout);
growTxt.setText('');
self._growStart = null;
self._growEnd = null;
self.plantCount = 0;
if (self._replantCooldownTimer) LK.clearInterval(self._replantCooldownTimer);
self._replantCooldown = false;
cooldownTxt.setText('');
};
// Update method for grow/ready text
self.update = function () {
if (self.state === 'growing' && self._growStart && self._growEnd) {
var now = Date.now();
var remain = Math.max(0, Math.ceil((self._growEnd - now) / 1000));
if (remain > 0) {
growTxt.setText(remain);
} else {
growTxt.setText('ready');
}
} else if (self.state === 'ready') {
growTxt.setText('ready');
} else {
growTxt.setText('');
}
// Show/hide cooldown text depending on replant cooldown
if (self._replantCooldown) {
// cooldownTxt is already updated in the interval
cooldownTxt.visible = true;
} else {
cooldownTxt.visible = false;
}
};
// Add containsPoint method to CornField
self.containsPoint = function (point) {
// Convert global point to local coordinates of the field
var localX = point.x - self.x;
var localY = point.y - self.y;
// fieldAsset is centered at (0,0) with anchor 0.5,0.5
var w = fieldAsset.width;
var h = fieldAsset.height;
// Check if localX, localY is inside fieldAsset bounds
return localX >= -w / 2 && localX <= w / 2 && localY >= -h / 2 && localY <= h / 2;
};
return self;
});
// OrderArea: Handles customer orders, sauces, and delivery
var OrderArea = Container.expand(function () {
var self = Container.call(this);
var orderAsset = self.attachAsset('order', {
anchorX: 0.5,
anchorY: 0.5
});
orderAsset.width = 260;
orderAsset.height = 260;
self.cornCount = 0;
self.currentOrder = null;
self.sauces = ['ketchup', 'mayonnaise', 'cheese'];
self.selectedSauces = [];
// Corn icon
var cornAsset = self.attachAsset('cooked', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
cornAsset.width = 120;
cornAsset.height = 120;
// Order text
var orderTxt = new Text2('', {
size: 50,
fill: "#fff"
});
orderTxt.anchor.set(0.5, 0.1);
self.addChild(orderTxt);
// Sauce icons
self.sauceIcons = [];
for (var i = 0; i < self.sauces.length; i++) {
var s = self.sauces[i];
var icon = self.attachAsset(s, {
anchorX: 0.5,
anchorY: 0.5,
x: -60 + i * 60,
y: 80,
alpha: 0.5
});
icon.width = 60;
icon.height = 60;
icon.sauce = s;
// Add containsPoint method to each sauce icon
icon.containsPoint = function (point) {
// point is relative to OrderArea, icon.x/y is relative to OrderArea
var localX = point.x - icon.x;
var localY = point.y - icon.y;
var w = icon.width,
h = icon.height;
return localX >= -w / 2 && localX <= w / 2 && localY >= -h / 2 && localY <= h / 2;
};
self.sauceIcons.push(icon);
}
// Delivery button
var deliverBtn = self.attachAsset('deliver', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 120,
alpha: 0.7
});
deliverBtn.width = 100;
deliverBtn.height = 60;
// Add corn to order area
self.addCorn = function (n) {
self.cornCount += n;
cornAsset.alpha = 1;
LK.effects.flashObject(cornAsset, 0xffb347, 200);
self.updateOrderText();
};
self.removeCorn = function (n) {
if (self.cornCount >= n) {
self.cornCount -= n;
if (self.cornCount === 0) cornAsset.alpha = 0;
self.updateOrderText();
return true;
}
return false;
};
self.updateOrderText = function () {
if (!self.currentOrder) {
orderTxt.setText('');
return;
}
var txt = 'Sipariş: ';
for (var i = 0; i < self.currentOrder.sauces.length; i++) {
txt += self.currentOrder.sauces[i];
if (i < self.currentOrder.sauces.length - 1) txt += ', ';
}
orderTxt.setText(txt);
};
self.newOrder = function () {
// Random sauces (1-3)
var n = 1 + Math.floor(Math.random() * self.sauces.length);
var sauces = [];
var used = {};
while (sauces.length < n) {
var idx = Math.floor(Math.random() * self.sauces.length);
var s = self.sauces[idx];
if (!used[s]) {
sauces.push(s);
used[s] = true;
}
}
self.currentOrder = {
sauces: sauces
};
self.selectedSauces = [];
self.updateOrderText();
for (var i = 0; i < self.sauceIcons.length; i++) {
self.sauceIcons[i].alpha = 0.5;
}
};
// Sauce selection
self.sauceDown = function (sauce) {
if (!self.currentOrder) return;
if (self.selectedSauces.length >= self.currentOrder.sauces.length) return;
if (self.selectedSauces.indexOf(sauce) !== -1) return;
self.selectedSauces.push(sauce);
for (var i = 0; i < self.sauceIcons.length; i++) {
if (self.sauceIcons[i].sauce === sauce) {
self.sauceIcons[i].alpha = 1;
}
}
};
// Deliver order
self.deliver = function () {
if (!self.currentOrder) return;
if (self.cornCount < 1) return;
// Check sauces
var ok = true;
for (var i = 0; i < self.currentOrder.sauces.length; i++) {
if (self.selectedSauces.indexOf(self.currentOrder.sauces[i]) === -1) {
ok = false;
break;
}
}
if (ok && self.selectedSauces.length === self.currentOrder.sauces.length) {
// Success
self.removeCorn(1);
LK.effects.flashObject(orderAsset, 0x00ff00, 400);
game.coins += game.orderReward;
game.updateCoins();
self.currentOrder = null;
self.selectedSauces = [];
LK.setTimeout(function () {
self.newOrder();
}, 800);
} else {
// Wrong sauces
LK.effects.flashObject(orderAsset, 0xff0000, 400);
self.selectedSauces = [];
for (var i = 0; i < self.sauceIcons.length; i++) {
self.sauceIcons[i].alpha = 0.5;
}
}
};
// Event handling
self.down = function (x, y, obj) {
// Check if sauce icon tapped
for (var i = 0; i < self.sauceIcons.length; i++) {
var icon = self.sauceIcons[i];
if (icon.containsPoint({
x: x - self.x,
y: y - self.y
})) {
self.sauceDown(icon.sauce);
return;
}
}
// Check if deliver button tapped
if (deliverBtn.containsPoint({
x: x - self.x,
y: y - self.y
})) {
self.deliver();
return;
}
};
self.getGlobalCenter = function () {
var pos = self.toGlobal({
x: 0,
y: 0
});
return {
x: pos.x,
y: pos.y
};
};
self.reset = function () {
self.cornCount = 0;
self.currentOrder = null;
self.selectedSauces = [];
cornAsset.alpha = 0;
self.updateOrderText();
for (var i = 0; i < self.sauceIcons.length; i++) {
self.sauceIcons[i].alpha = 0.5;
}
};
// Add containsPoint method to OrderArea
self.containsPoint = function (point) {
// Convert global point to local coordinates of the OrderArea
var localX = point.x - self.x;
var localY = point.y - self.y;
// orderAsset is centered at (0,0) with anchor 0.5,0.5
var w = orderAsset.width;
var h = orderAsset.height;
// Check if localX, localY is inside orderAsset bounds
return localX >= -w / 2 && localX <= w / 2 && localY >= -h / 2 && localY <= h / 2;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2e7d32
});
/****
* Game Code
****/
// --- Game constants ---
game.cornGrowTime = 5000; // ms
game.cookTime = 2000; // ms
game.orderReward = 5;
game.unlockCost = 20;
game.maxFields = 4;
// --- Game state ---
game.coins = storage.coins || 10;
game.unlockedFields = 4;
// --- UI: Coins display ---
var coinsTxt = new Text2(game.coins + '₺', {
size: 90,
fill: 0xFFFDE7
});
coinsTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(coinsTxt);
game.updateCoins = function () {
coinsTxt.setText(game.coins + '₺');
storage.coins = game.coins;
storage.unlockedFields = game.unlockedFields;
};
// --- Screen management ---
game.screens = ['field', 'boxcook', 'order'];
game.currentScreen = 0; // 0: field, 1: box/cook, 2: order
// --- Field grid ---
game.fields = [];
var fieldRows = 2;
var fieldCols = 2;
var fieldSpacing = 340;
var fieldStartX = 400;
var fieldStartY = 600;
function updateFieldGrid() {
// Determine grid size based on unlocked fields
var n = game.unlockedFields;
if (n <= 4) {
fieldRows = 2;
fieldCols = 2;
} else if (n <= 9) {
fieldRows = 3;
fieldCols = 3;
} else {
fieldRows = 4;
fieldCols = 4;
}
}
function layoutFields() {
updateFieldGrid();
for (var i = 0; i < game.maxFields; i++) {
var row = Math.floor(i / fieldCols);
var col = i % fieldCols;
var x = fieldStartX + col * fieldSpacing;
var y = fieldStartY + row * fieldSpacing;
game.fields[i].x = x;
game.fields[i].y = y;
}
}
// Create fields
for (var i = 0; i < game.maxFields; i++) {
var field = new CornField();
field.index = i;
game.addChild(field);
game.fields.push(field);
}
function updateFieldLocks() {
for (var i = 0; i < game.maxFields; i++) {
if (i < game.unlockedFields) {
game.fields[i].setLocked(false);
} else {
game.fields[i].setLocked(true);
}
}
}
updateFieldLocks();
layoutFields();
// --- Corn Box ---
game.cornBox = new CornBox();
game.cornBox.x = 2048 - 300;
game.cornBox.y = 700;
game.addChild(game.cornBox);
// --- Cook Area ---
game.cookArea = new CookArea();
game.cookArea.x = 2048 - 300;
game.cookArea.y = 1100;
game.addChild(game.cookArea);
// --- Order Area ---
game.orderArea = new OrderArea();
game.orderArea.x = 2048 - 300;
game.orderArea.y = 1550;
game.addChild(game.orderArea);
game.orderArea.newOrder();
// --- Unlock Button ---
// Place unlock button below the last unlocked field if possible
var unlockBtnContainer = new Container();
var unlockBtn = LK.getAsset('unlock', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 100,
alpha: 0.8
});
unlockBtnContainer.addChild(unlockBtn);
game.addChild(unlockBtnContainer);
var unlockTxt = new Text2('Tarla Aç (' + game.unlockCost + '₺)', {
size: 50,
fill: "#fff"
});
unlockTxt.anchor.set(0.5, 0.5);
game.addChild(unlockTxt);
// Add containsPoint method to unlockBtnContainer
unlockBtnContainer.containsPoint = function (point) {
// Convert global point to local coordinates of the container
var localX = point.x - unlockBtnContainer.x;
var localY = point.y - unlockBtnContainer.y;
// unlockBtn is centered at (0,0) with anchor 0.5,0.5
var w = unlockBtn.width;
var h = unlockBtn.height;
// Check if localX, localY is inside unlockBtn bounds
return localX >= -w / 2 && localX <= w / 2 && localY >= -h / 2 && localY <= h / 2;
};
// Update unlock button position and text
function updateUnlockBtn() {
// Find the last unlocked field and position the button below it
if (game.unlockedFields >= game.maxFields) {
unlockBtn.alpha = 0.3;
unlockBtnContainer.visible = false;
unlockTxt.setText('Tüm Tarlalar Açık');
unlockTxt.visible = false;
return;
}
var lastIdx = game.unlockedFields - 1;
if (lastIdx >= 0 && lastIdx < game.fields.length) {
var lastField = game.fields[lastIdx];
unlockBtnContainer.x = lastField.x;
unlockBtnContainer.y = lastField.y + 220;
unlockTxt.x = unlockBtnContainer.x;
unlockTxt.y = unlockBtnContainer.y;
unlockBtnContainer.visible = true;
unlockTxt.visible = true;
} else {
// fallback: place at default
unlockBtnContainer.x = 2048 / 2;
unlockBtnContainer.y = 2000;
unlockTxt.x = unlockBtnContainer.x;
unlockTxt.y = unlockBtnContainer.y;
unlockBtnContainer.visible = true;
unlockTxt.visible = true;
}
unlockBtn.alpha = 0.8;
unlockTxt.setText('Tarla Aç (' + game.unlockCost + '₺)');
}
updateUnlockBtn();
// --- Screen navigation buttons ---
var leftBtn = LK.getAsset('unlock', {
anchorX: 0.5,
anchorY: 0.5,
width: 120,
height: 120,
x: 120,
y: 2732 / 2,
alpha: 0.7
});
var rightBtn = LK.getAsset('unlock', {
anchorX: 0.5,
anchorY: 0.5,
width: 120,
height: 120,
x: 2048 - 120,
y: 2732 / 2,
alpha: 0.7
});
game.addChild(leftBtn);
game.addChild(rightBtn);
// Add containsPoint for nav buttons
leftBtn.containsPoint = function (point) {
var localX = point.x - leftBtn.x;
var localY = point.y - leftBtn.y;
var w = leftBtn.width,
h = leftBtn.height;
return localX >= -w / 2 && localX <= w / 2 && localY >= -h / 2 && localY <= h / 2;
};
rightBtn.containsPoint = function (point) {
var localX = point.x - rightBtn.x;
var localY = point.y - rightBtn.y;
var w = rightBtn.width,
h = rightBtn.height;
return localX >= -w / 2 && localX <= w / 2 && localY >= -h / 2 && localY <= h / 2;
};
// Nav button text
var leftTxt = new Text2('<', {
size: 90,
fill: "#fff"
});
leftTxt.anchor.set(0.5, 0.5);
leftTxt.x = leftBtn.x;
leftTxt.y = leftBtn.y;
game.addChild(leftTxt);
var rightTxt = new Text2('>', {
size: 90,
fill: "#fff"
});
rightTxt.anchor.set(0.5, 0.5);
rightTxt.x = rightBtn.x;
rightTxt.y = rightBtn.y;
game.addChild(rightTxt);
// --- Screen show/hide logic ---
function updateScreenVisibility() {
// 0: field, 1: boxcook, 2: order
var showField = game.currentScreen === 0;
var showBoxCook = game.currentScreen === 1;
var showOrder = game.currentScreen === 2;
// Fields
for (var i = 0; i < game.fields.length; i++) {
game.fields[i].visible = showField;
}
unlockBtnContainer.visible = showField;
unlockTxt.visible = showField;
// Box & Cook
game.cornBox.visible = showBoxCook;
game.cookArea.visible = showBoxCook;
// Order
game.orderArea.visible = showOrder;
// Nav buttons always visible
leftBtn.visible = true;
rightBtn.visible = true;
leftTxt.visible = true;
rightTxt.visible = true;
}
updateScreenVisibility();
// --- Touch handling ---
game.down = function (x, y, obj) {
// Navigation buttons
if (leftBtn.containsPoint({
x: x,
y: y
})) {
game.currentScreen = (game.currentScreen + 2) % 3;
updateScreenVisibility();
return;
}
if (rightBtn.containsPoint({
x: x,
y: y
})) {
game.currentScreen = (game.currentScreen + 1) % 3;
updateScreenVisibility();
return;
}
// Per-screen input
if (game.currentScreen === 0) {
// Field screen
if (unlockBtnContainer.visible && unlockBtnContainer.containsPoint({
x: x,
y: y
})) {
if (game.coins >= game.unlockCost && game.unlockedFields < game.maxFields) {
game.coins -= game.unlockCost;
game.unlockedFields += 1;
game.updateCoins();
updateFieldLocks();
layoutFields();
updateUnlockBtn();
} else {
LK.effects.flashObject(unlockBtn, 0xff0000, 400);
}
return;
}
for (var i = 0; i < game.fields.length; i++) {
var f = game.fields[i];
if (f.visible && f.containsPoint({
x: x,
y: y
})) {
f.down(x - f.x, y - f.y, obj);
return;
}
}
} else if (game.currentScreen === 1) {
// Box & Cook screen
if (game.cornBox.visible && game.cornBox.containsPoint({
x: x,
y: y
})) {
game.cornBox.down(x - game.cornBox.x, y - game.cornBox.y, obj);
return;
}
if (game.cookArea.visible && game.cookArea.containsPoint({
x: x,
y: y
})) {
game.cookArea.down(x - game.cookArea.x, y - game.cookArea.y, obj);
return;
}
} else if (game.currentScreen === 2) {
// Order screen
if (game.orderArea.visible && game.orderArea.containsPoint({
x: x,
y: y
})) {
game.orderArea.down(x - game.orderArea.x, y - game.orderArea.y, obj);
return;
}
}
};
// --- Game update ---
game.update = function () {
// Update all fields for grow/ready text
for (var i = 0; i < game.fields.length; i++) {
if (game.fields[i].visible) {
if (typeof game.fields[i].update === "function") {
game.fields[i].update();
}
}
}
// No automatic planting: Corn only grows when planted by the player
};
// --- Reset function for new game ---
game.resetGame = function () {
game.coins = 10;
game.unlockedFields = 4;
game.updateCoins();
updateFieldLocks();
layoutFields();
updateUnlockBtn();
for (var i = 0; i < game.fields.length; i++) {
game.fields[i].reset();
}
game.cornBox.reset();
game.cookArea.reset();
game.orderArea.reset();
game.orderArea.newOrder();
// Reset to first screen and update visibility
game.currentScreen = 0;
updateScreenVisibility();
};
// --- Asset definitions (for static analysis) ---
// These are not real code, but LK will auto-create these assets as used above:
// field: green box, corn: yellow ellipse, lock: gray lock, box: brown box, cook: pot, cooked: orange ellipse, order: tray, ketchup/mayonnaise/cheese: colored circles, deliver: blue button, unlock: green button
// --- End of code --- ===================================================================
--- original.js
+++ change.js
@@ -754,12 +754,10 @@
game.orderArea.y = 1550;
game.addChild(game.orderArea);
game.orderArea.newOrder();
// --- Unlock Button ---
-// Wrap unlockBtn asset in a Container to provide containsPoint
+// Place unlock button below the last unlocked field if possible
var unlockBtnContainer = new Container();
-unlockBtnContainer.x = 2048 - 300;
-unlockBtnContainer.y = 2000;
var unlockBtn = LK.getAsset('unlock', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
@@ -772,10 +770,8 @@
size: 50,
fill: "#fff"
});
unlockTxt.anchor.set(0.5, 0.5);
-unlockTxt.x = unlockBtnContainer.x;
-unlockTxt.y = unlockBtnContainer.y;
game.addChild(unlockTxt);
// Add containsPoint method to unlockBtnContainer
unlockBtnContainer.containsPoint = function (point) {
// Convert global point to local coordinates of the container
@@ -786,16 +782,38 @@
var h = unlockBtn.height;
// Check if localX, localY is inside unlockBtn bounds
return localX >= -w / 2 && localX <= w / 2 && localY >= -h / 2 && localY <= h / 2;
};
+// Update unlock button position and text
function updateUnlockBtn() {
+ // Find the last unlocked field and position the button below it
if (game.unlockedFields >= game.maxFields) {
unlockBtn.alpha = 0.3;
+ unlockBtnContainer.visible = false;
unlockTxt.setText('Tüm Tarlalar Açık');
+ unlockTxt.visible = false;
+ return;
+ }
+ var lastIdx = game.unlockedFields - 1;
+ if (lastIdx >= 0 && lastIdx < game.fields.length) {
+ var lastField = game.fields[lastIdx];
+ unlockBtnContainer.x = lastField.x;
+ unlockBtnContainer.y = lastField.y + 220;
+ unlockTxt.x = unlockBtnContainer.x;
+ unlockTxt.y = unlockBtnContainer.y;
+ unlockBtnContainer.visible = true;
+ unlockTxt.visible = true;
} else {
- unlockBtn.alpha = 0.8;
- unlockTxt.setText('Tarla Aç (' + game.unlockCost + '₺)');
+ // fallback: place at default
+ unlockBtnContainer.x = 2048 / 2;
+ unlockBtnContainer.y = 2000;
+ unlockTxt.x = unlockBtnContainer.x;
+ unlockTxt.y = unlockBtnContainer.y;
+ unlockBtnContainer.visible = true;
+ unlockTxt.visible = true;
}
+ unlockBtn.alpha = 0.8;
+ unlockTxt.setText('Tarla Aç (' + game.unlockCost + '₺)');
}
updateUnlockBtn();
// --- Screen navigation buttons ---
var leftBtn = LK.getAsset('unlock', {
Mısır. In-Game asset. 2d. High contrast. No shadows
Arkaplanı sil
Arkaplanı sil
Arkaplanı olmasın.
Arkaplanı sil
Tahta arkaplan. In-Game asset. 2d. High contrast. No shadows
Arkaplanı sil
Cadde arka planı. In-Game asset. 2d. High contrast. No shadows
Konuşma balonu. In-Game asset. 2d. High contrast. No shadows
Ketçap kutusu. In-Game asset. 2d. High contrast. No shadows
Mayonez kutusu. In-Game asset. 2d. High contrast. No shadows
Dökülmüş ketçap. In-Game asset. 2d. High contrast. No shadows
Dökülmüş mayonez. In-Game asset. 2d. High contrast. No shadows
Delete hand
Türkiye bayrağı. In-Game asset. 2d. High contrast. No shadows
İngiliz bayrağı. In-Game asset. 2d. High contrast. No shadows
Fransa bayrağı. In-Game asset. 2d. High contrast. No shadows