/****
* Classes
****/
// Cookie collectible
var Cookie = Container.expand(function () {
var self = Container.call(this);
var cookieAsset = self.attachAsset('cookie', {
anchorX: 0.5,
anchorY: 0.5
});
// Track last intersecting state for collision detection
self.lastWasIntersecting = false;
return self;
});
// Player-controlled box
var PlayerBox = Container.expand(function () {
var self = Container.call(this);
var box = self.attachAsset('playerBox', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
// Trap box (bear trap, ends game on collision)
var TrapBox = Container.expand(function () {
var self = Container.call(this);
var trapAsset = self.attachAsset('bearTrap', {
anchorX: 0.5,
anchorY: 0.5
});
// Track last intersecting state for collision detection
self.lastWasIntersecting = false;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xc8f7c5
});
/****
* Game Code
****/
// Square, gray, bear trap-like asset for trap boxes
// --- START SCREEN LOGIC ---
var gameStarted = false;
var startScreen = new Container();
var startBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2,
width: 2048,
height: 2732
});
startBg.alpha = 0.12;
startScreen.addChild(startBg);
var titleText = new Text2("Kurabiye Hırsızı", {
size: 120,
fill: 0x2D2D2D
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 900;
startScreen.addChild(titleText);
var playButton = new Container();
var btnBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
width: 500,
height: 180
});
btnBg.tint = 0x83de44;
playButton.addChild(btnBg);
var btnText = new Text2("Oyna", {
size: 90,
fill: 0xFFFFFF
});
btnText.anchor.set(0.5, 0.5);
btnText.x = 0;
btnText.y = 0;
playButton.addChild(btnText);
playButton.x = 2048 / 2;
playButton.y = 1400;
startScreen.addChild(playButton);
// --- HELP ICON AND POPUP ---
var helpIcon = new Container();
var helpBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
width: 120,
height: 120
});
helpBg.tint = 0x83de44;
helpIcon.addChild(helpBg);
var helpText = new Text2("?", {
size: 90,
fill: 0xffffff
});
helpText.anchor.set(0.5, 0.5);
helpText.x = 0;
helpText.y = 0;
helpIcon.addChild(helpText);
helpIcon.x = 2048 - 120 - 40; // Top right, with margin
helpIcon.y = 120 + 40;
helpIcon.interactive = true;
startScreen.addChild(helpIcon);
// Help popup (hidden by default)
var helpPopup = new Container();
var popupBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
width: 1200,
height: 600
});
popupBg.tint = 0xffffff;
popupBg.alpha = 0.98;
helpPopup.addChild(popupBg);
var popupText = new Text2("Oyunda bir kurabiye fabrikasının bahçesindesin. Bahçede canlı olan kurabiyeleri yakala ve kazan. Dikkat! Tuzaklara yakalanma.", {
size: 60,
fill: 0x2D2D2D,
align: "center",
wordWrap: true,
wordWrapWidth: 1100
});
popupText.anchor.set(0.5, 0.5);
popupText.x = 0;
popupText.y = -40;
helpPopup.addChild(popupText);
// Close button
var closeBtn = new Container();
var closeBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
width: 200,
height: 90
});
closeBg.tint = 0x83de44;
closeBtn.addChild(closeBg);
var closeTxt = new Text2("Kapat", {
size: 50,
fill: 0xffffff
});
closeTxt.anchor.set(0.5, 0.5);
closeTxt.x = 0;
closeTxt.y = 0;
closeBtn.addChild(closeTxt);
closeBtn.x = 0;
closeBtn.y = 220;
closeBtn.interactive = true;
helpPopup.addChild(closeBtn);
helpPopup.x = 2048 / 2;
helpPopup.y = 2732 / 2;
helpPopup.visible = false;
startScreen.addChild(helpPopup);
// Show popup on help icon tap
helpIcon.down = function (x, y, obj) {
helpPopup.visible = true;
helpIcon.visible = false;
};
// Hide popup on close
closeBtn.down = function (x, y, obj) {
helpPopup.visible = false;
helpIcon.visible = true;
};
game.addChild(startScreen);
// Only allow game logic after start
function startGame() {
if (gameStarted) return;
gameStarted = true;
// Hide help icon and popup if present
if (typeof helpIcon !== "undefined") helpIcon.visible = false;
if (typeof helpPopup !== "undefined") helpPopup.visible = false;
startScreen.destroy();
// Now run the rest of the game setup
setupGame();
}
// Touch/click on play button
playButton.down = function (x, y, obj) {
startGame();
};
playButton.interactive = true;
// --- GAME LOGIC MOVED TO FUNCTION ---
function setupGame() {
// Add a centered, vertical road as background
var roadWidth = 500;
var roadHeight = 2732;
var verticalRoadBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(verticalRoadBg);
// Player box
player = new PlayerBox();
game.addChild(player);
// Center player in the middle of the screen
player.x = 2048 / 2;
player.y = 2732 / 2;
// Add 10 cookies at random positions (not overlapping player or outside road)
cookies = [];
var cookieCount = 10;
for (var i = 0; i < cookieCount; i++) {
var cookie = new Cookie();
// Place cookies within the road area, not overlapping player
var placed = false;
while (!placed) {
// Road is centered, width = 500, height = 2732
var minX = 2048 / 2 - 250 + cookie.width / 2 + 20;
var maxX = 2048 / 2 + 250 - cookie.width / 2 - 20;
var minY = cookie.height / 2 + 40;
var maxY = 2732 - cookie.height / 2 - 40;
// Bias: 70% chance to spawn near left or right edge, 30% random
var edgeBias = Math.random();
if (edgeBias < 0.35) {
// Left edge: 0-20% of road width
var edgeMinX = minX;
var edgeMaxX = minX + (maxX - minX) * 0.2;
cookie.x = Math.floor(Math.random() * (edgeMaxX - edgeMinX)) + edgeMinX;
} else if (edgeBias < 0.7) {
// Right edge: 80-100% of road width
var edgeMinX = maxX - (maxX - minX) * 0.2;
var edgeMaxX = maxX;
cookie.x = Math.floor(Math.random() * (edgeMaxX - edgeMinX)) + edgeMinX;
} else {
// Anywhere on the road
cookie.x = Math.floor(Math.random() * (maxX - minX)) + minX;
}
cookie.y = Math.floor(Math.random() * (maxY - minY)) + minY;
// Avoid placing on player
var dx = cookie.x - player.x;
var dy = cookie.y - player.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 200) {
placed = true;
}
}
cookies.push(cookie);
game.addChild(cookie);
}
// Add 5 random trap boxes (not overlapping player or cookies)
trapBoxes = [];
var trapCount = 5;
for (var t = 0; t < trapCount; t++) {
var trap = new TrapBox();
var placedTrap = false;
while (!placedTrap) {
// Place within road area
var minX = 2048 / 2 - 250 + trap.width / 2 + 20;
var maxX = 2048 / 2 + 250 - trap.width / 2 - 20;
var minY = trap.height / 2 + 40;
var maxY = 2732 - trap.height / 2 - 40;
trap.x = Math.floor(Math.random() * (maxX - minX)) + minX;
trap.y = Math.floor(Math.random() * (maxY - minY)) + minY;
// Avoid player
var dx = trap.x - player.x;
var dy = trap.y - player.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 250) continue;
// Avoid cookies
var overlap = false;
for (var ci = 0; ci < cookies.length; ci++) {
var cdx = trap.x - cookies[ci].x;
var cdy = trap.y - cookies[ci].y;
var cdist = Math.sqrt(cdx * cdx + cdy * cdy);
if (cdist < 180) {
overlap = true;
break;
}
}
if (!overlap) placedTrap = true;
}
trapBoxes.push(trap);
game.addChild(trap);
}
}
// Dragging logic
var dragNode = null;
var offsetX = 0;
var offsetY = 0;
// Helper: clamp value between min and max
function clamp(val, min, max) {
if (val < min) {
return min;
}
if (val > max) {
return max;
}
return val;
}
// Touch/mouse down: start dragging if on player
game.down = function (x, y, obj) {
if (!gameStarted) return;
// Check if touch is inside player box
var dx = x - player.x;
var dy = y - player.y;
var halfW = player.children[0].width / 2;
var halfH = player.children[0].height / 2;
if (dx >= -halfW && dx <= halfW && dy >= -halfH && dy <= halfH) {
dragNode = player;
offsetX = player.x - x;
offsetY = player.y - y;
}
};
// Touch/mouse up: stop dragging
game.up = function (x, y, obj) {
if (!gameStarted) return;
dragNode = null;
};
// Touch/mouse move: move player if dragging
game.move = function (x, y, obj) {
if (!gameStarted) return;
if (dragNode === player) {
// Clamp player inside game area (leave 10px margin)
var halfW = player.children[0].width / 2;
var halfH = player.children[0].height / 2;
var targetX = clamp(x + offsetX, halfW + 10, 2048 - halfW - 10);
var targetY = clamp(y + offsetY, halfH + 10, 2732 - halfH - 10);
// Move slowly towards the target position (lower lerp factor = slower)
var lerpFactor = 0.15;
player.x = player.x + (targetX - player.x) * lerpFactor;
player.y = player.y + (targetY - player.y) * lerpFactor;
}
};
// Main game update loop
game.update = function () {
if (!gameStarted) return;
// Check for cookie collection
var collected = 0;
for (var i = cookies.length - 1; i >= 0; i--) {
var cookie = cookies[i];
// Only check if not already collected (cookie still in game)
if (cookie.parent && !cookie.collected) {
// Cookie movement: move slowly away from player
var dx = cookie.x - player.x;
var dy = cookie.y - player.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 1) {
// Normalize direction
var moveSpeed = 1.2; // very slow
var moveX = dx / dist * moveSpeed;
var moveY = dy / dist * moveSpeed;
cookie.x += moveX;
cookie.y += moveY;
// Clamp inside road area
var minX = 2048 / 2 - 250 + cookie.width / 2 + 20;
var maxX = 2048 / 2 + 250 - cookie.width / 2 - 20;
var minY = cookie.height / 2 + 40;
var maxY = 2732 - cookie.height / 2 - 40;
cookie.x = clamp(cookie.x, minX, maxX);
cookie.y = clamp(cookie.y, minY, maxY);
}
var isIntersecting = player.intersects(cookie);
if (!cookie.lastWasIntersecting && isIntersecting) {
// Collect cookie
cookie.collected = true;
cookie.destroy();
cookies.splice(i, 1);
}
cookie.lastWasIntersecting = isIntersecting;
}
}
// Win if all cookies collected
if (cookies.length === 0) {
LK.showYouWin();
}
// Check for collision with trap boxes
for (var t = 0; t < trapBoxes.length; t++) {
var trap = trapBoxes[t];
var isTrapIntersecting = player.intersects(trap);
if (!trap.lastWasIntersecting && isTrapIntersecting) {
LK.showGameOver();
return;
}
trap.lastWasIntersecting = isTrapIntersecting;
}
}; /****
* Classes
****/
// Cookie collectible
var Cookie = Container.expand(function () {
var self = Container.call(this);
var cookieAsset = self.attachAsset('cookie', {
anchorX: 0.5,
anchorY: 0.5
});
// Track last intersecting state for collision detection
self.lastWasIntersecting = false;
return self;
});
// Player-controlled box
var PlayerBox = Container.expand(function () {
var self = Container.call(this);
var box = self.attachAsset('playerBox', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
// Trap box (bear trap, ends game on collision)
var TrapBox = Container.expand(function () {
var self = Container.call(this);
var trapAsset = self.attachAsset('bearTrap', {
anchorX: 0.5,
anchorY: 0.5
});
// Track last intersecting state for collision detection
self.lastWasIntersecting = false;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xc8f7c5
});
/****
* Game Code
****/
// Square, gray, bear trap-like asset for trap boxes
// --- START SCREEN LOGIC ---
var gameStarted = false;
var startScreen = new Container();
var startBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2,
width: 2048,
height: 2732
});
startBg.alpha = 0.12;
startScreen.addChild(startBg);
var titleText = new Text2("Kurabiye Hırsızı", {
size: 120,
fill: 0x2D2D2D
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 900;
startScreen.addChild(titleText);
var playButton = new Container();
var btnBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
width: 500,
height: 180
});
btnBg.tint = 0x83de44;
playButton.addChild(btnBg);
var btnText = new Text2("Oyna", {
size: 90,
fill: 0xFFFFFF
});
btnText.anchor.set(0.5, 0.5);
btnText.x = 0;
btnText.y = 0;
playButton.addChild(btnText);
playButton.x = 2048 / 2;
playButton.y = 1400;
startScreen.addChild(playButton);
// --- HELP ICON AND POPUP ---
var helpIcon = new Container();
var helpBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
width: 120,
height: 120
});
helpBg.tint = 0x83de44;
helpIcon.addChild(helpBg);
var helpText = new Text2("?", {
size: 90,
fill: 0xffffff
});
helpText.anchor.set(0.5, 0.5);
helpText.x = 0;
helpText.y = 0;
helpIcon.addChild(helpText);
helpIcon.x = 2048 - 120 - 40; // Top right, with margin
helpIcon.y = 120 + 40;
helpIcon.interactive = true;
startScreen.addChild(helpIcon);
// Help popup (hidden by default)
var helpPopup = new Container();
var popupBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
width: 1200,
height: 600
});
popupBg.tint = 0xffffff;
popupBg.alpha = 0.98;
helpPopup.addChild(popupBg);
var popupText = new Text2("Oyunda bir kurabiye fabrikasının bahçesindesin. Bahçede canlı olan kurabiyeleri yakala ve kazan. Dikkat! Tuzaklara yakalanma.", {
size: 60,
fill: 0x2D2D2D,
align: "center",
wordWrap: true,
wordWrapWidth: 1100
});
popupText.anchor.set(0.5, 0.5);
popupText.x = 0;
popupText.y = -40;
helpPopup.addChild(popupText);
// Close button
var closeBtn = new Container();
var closeBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
width: 200,
height: 90
});
closeBg.tint = 0x83de44;
closeBtn.addChild(closeBg);
var closeTxt = new Text2("Kapat", {
size: 50,
fill: 0xffffff
});
closeTxt.anchor.set(0.5, 0.5);
closeTxt.x = 0;
closeTxt.y = 0;
closeBtn.addChild(closeTxt);
closeBtn.x = 0;
closeBtn.y = 220;
closeBtn.interactive = true;
helpPopup.addChild(closeBtn);
helpPopup.x = 2048 / 2;
helpPopup.y = 2732 / 2;
helpPopup.visible = false;
startScreen.addChild(helpPopup);
// Show popup on help icon tap
helpIcon.down = function (x, y, obj) {
helpPopup.visible = true;
helpIcon.visible = false;
};
// Hide popup on close
closeBtn.down = function (x, y, obj) {
helpPopup.visible = false;
helpIcon.visible = true;
};
game.addChild(startScreen);
// Only allow game logic after start
function startGame() {
if (gameStarted) return;
gameStarted = true;
// Hide help icon and popup if present
if (typeof helpIcon !== "undefined") helpIcon.visible = false;
if (typeof helpPopup !== "undefined") helpPopup.visible = false;
startScreen.destroy();
// Now run the rest of the game setup
setupGame();
}
// Touch/click on play button
playButton.down = function (x, y, obj) {
startGame();
};
playButton.interactive = true;
// --- GAME LOGIC MOVED TO FUNCTION ---
function setupGame() {
// Add a centered, vertical road as background
var roadWidth = 500;
var roadHeight = 2732;
var verticalRoadBg = LK.getAsset('verticalRoad', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(verticalRoadBg);
// Player box
player = new PlayerBox();
game.addChild(player);
// Center player in the middle of the screen
player.x = 2048 / 2;
player.y = 2732 / 2;
// Add 10 cookies at random positions (not overlapping player or outside road)
cookies = [];
var cookieCount = 10;
for (var i = 0; i < cookieCount; i++) {
var cookie = new Cookie();
// Place cookies within the road area, not overlapping player
var placed = false;
while (!placed) {
// Road is centered, width = 500, height = 2732
var minX = 2048 / 2 - 250 + cookie.width / 2 + 20;
var maxX = 2048 / 2 + 250 - cookie.width / 2 - 20;
var minY = cookie.height / 2 + 40;
var maxY = 2732 - cookie.height / 2 - 40;
// Bias: 70% chance to spawn near left or right edge, 30% random
var edgeBias = Math.random();
if (edgeBias < 0.35) {
// Left edge: 0-20% of road width
var edgeMinX = minX;
var edgeMaxX = minX + (maxX - minX) * 0.2;
cookie.x = Math.floor(Math.random() * (edgeMaxX - edgeMinX)) + edgeMinX;
} else if (edgeBias < 0.7) {
// Right edge: 80-100% of road width
var edgeMinX = maxX - (maxX - minX) * 0.2;
var edgeMaxX = maxX;
cookie.x = Math.floor(Math.random() * (edgeMaxX - edgeMinX)) + edgeMinX;
} else {
// Anywhere on the road
cookie.x = Math.floor(Math.random() * (maxX - minX)) + minX;
}
cookie.y = Math.floor(Math.random() * (maxY - minY)) + minY;
// Avoid placing on player
var dx = cookie.x - player.x;
var dy = cookie.y - player.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 200) {
placed = true;
}
}
cookies.push(cookie);
game.addChild(cookie);
}
// Add 5 random trap boxes (not overlapping player or cookies)
trapBoxes = [];
var trapCount = 5;
for (var t = 0; t < trapCount; t++) {
var trap = new TrapBox();
var placedTrap = false;
while (!placedTrap) {
// Place within road area
var minX = 2048 / 2 - 250 + trap.width / 2 + 20;
var maxX = 2048 / 2 + 250 - trap.width / 2 - 20;
var minY = trap.height / 2 + 40;
var maxY = 2732 - trap.height / 2 - 40;
trap.x = Math.floor(Math.random() * (maxX - minX)) + minX;
trap.y = Math.floor(Math.random() * (maxY - minY)) + minY;
// Avoid player
var dx = trap.x - player.x;
var dy = trap.y - player.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 250) continue;
// Avoid cookies
var overlap = false;
for (var ci = 0; ci < cookies.length; ci++) {
var cdx = trap.x - cookies[ci].x;
var cdy = trap.y - cookies[ci].y;
var cdist = Math.sqrt(cdx * cdx + cdy * cdy);
if (cdist < 180) {
overlap = true;
break;
}
}
if (!overlap) placedTrap = true;
}
trapBoxes.push(trap);
game.addChild(trap);
}
}
// Dragging logic
var dragNode = null;
var offsetX = 0;
var offsetY = 0;
// Helper: clamp value between min and max
function clamp(val, min, max) {
if (val < min) {
return min;
}
if (val > max) {
return max;
}
return val;
}
// Touch/mouse down: start dragging if on player
game.down = function (x, y, obj) {
if (!gameStarted) return;
// Check if touch is inside player box
var dx = x - player.x;
var dy = y - player.y;
var halfW = player.children[0].width / 2;
var halfH = player.children[0].height / 2;
if (dx >= -halfW && dx <= halfW && dy >= -halfH && dy <= halfH) {
dragNode = player;
offsetX = player.x - x;
offsetY = player.y - y;
}
};
// Touch/mouse up: stop dragging
game.up = function (x, y, obj) {
if (!gameStarted) return;
dragNode = null;
};
// Touch/mouse move: move player if dragging
game.move = function (x, y, obj) {
if (!gameStarted) return;
if (dragNode === player) {
// Clamp player inside game area (leave 10px margin)
var halfW = player.children[0].width / 2;
var halfH = player.children[0].height / 2;
var targetX = clamp(x + offsetX, halfW + 10, 2048 - halfW - 10);
var targetY = clamp(y + offsetY, halfH + 10, 2732 - halfH - 10);
// Move slowly towards the target position (lower lerp factor = slower)
var lerpFactor = 0.15;
player.x = player.x + (targetX - player.x) * lerpFactor;
player.y = player.y + (targetY - player.y) * lerpFactor;
}
};
// Main game update loop
game.update = function () {
if (!gameStarted) return;
// Check for cookie collection
var collected = 0;
for (var i = cookies.length - 1; i >= 0; i--) {
var cookie = cookies[i];
// Only check if not already collected (cookie still in game)
if (cookie.parent && !cookie.collected) {
// Cookie movement: move slowly away from player
var dx = cookie.x - player.x;
var dy = cookie.y - player.y;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist > 1) {
// Normalize direction
var moveSpeed = 1.2; // very slow
var moveX = dx / dist * moveSpeed;
var moveY = dy / dist * moveSpeed;
cookie.x += moveX;
cookie.y += moveY;
// Clamp inside road area
var minX = 2048 / 2 - 250 + cookie.width / 2 + 20;
var maxX = 2048 / 2 + 250 - cookie.width / 2 - 20;
var minY = cookie.height / 2 + 40;
var maxY = 2732 - cookie.height / 2 - 40;
cookie.x = clamp(cookie.x, minX, maxX);
cookie.y = clamp(cookie.y, minY, maxY);
}
var isIntersecting = player.intersects(cookie);
if (!cookie.lastWasIntersecting && isIntersecting) {
// Collect cookie
cookie.collected = true;
cookie.destroy();
cookies.splice(i, 1);
}
cookie.lastWasIntersecting = isIntersecting;
}
}
// Win if all cookies collected
if (cookies.length === 0) {
LK.showYouWin();
}
// Check for collision with trap boxes
for (var t = 0; t < trapBoxes.length; t++) {
var trap = trapBoxes[t];
var isTrapIntersecting = player.intersects(trap);
if (!trap.lastWasIntersecting && isTrapIntersecting) {
LK.showGameOver();
return;
}
trap.lastWasIntersecting = isTrapIntersecting;
}
};
Bana biraz sinsi gülüş atan, siyah şapkası ve giysisi olan bir kurabiye çiz (Asil dursun) .. In-Game asset. 2d. High contrast. No shadows
Bana tatlı üzerinde bir yüz olan kurabiye çiz. In-Game asset. 2d. High contrast. No shadows
Bana demirden yapılmış paslı bir ayı kapanı yap . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat