/****
* Plugins
****/
var storage = LK.import("@upit/storage.v1");
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var FinishFruit = Container.expand(function () {
var self = Container.call(this);
self.speed = -3;
self.lastX = 0;
self.lastIntersecting = false;
self.number = 2; // Will be set when created
self.fruitGraphics = null; // Will be set based on number
self.setNumber = function (num) {
self.number = num;
// Remove existing graphics if any
if (self.fruitGraphics) {
self.removeChild(self.fruitGraphics);
}
// Add appropriate fruit asset based on number
var assetName = 'fruit' + num;
self.fruitGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
};
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
var Fruit = Container.expand(function () {
var self = Container.call(this);
var fruitGraphics = self.attachAsset('fruit', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityY = 0;
self.gravity = 0.8;
self.jumpPower = -18;
self.isOnGround = false;
self.lastY = 0;
self.jumpCount = 0;
self.maxJumps = 3;
self.jump = function () {
if (self.jumpCount < self.maxJumps) {
self.velocityY = self.jumpPower;
self.jumpCount++;
if (self.jumpCount === 1) {
self.isOnGround = false;
}
LK.getSound('jump').play();
}
};
self.update = function () {
self.lastY = self.y;
self.velocityY += self.gravity;
self.y += self.velocityY;
// No ground collision safety - let fruit fall through
};
return self;
});
var JuiceDrop = Container.expand(function () {
var self = Container.call(this);
var dropGraphics = self.attachAsset('juiceDrop', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -4;
self.lastX = 0;
self.lastIntersecting = false;
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
var Knife = Container.expand(function () {
var self = Container.call(this);
var knifeGraphics = self.attachAsset('knife', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -8;
self.lastX = 0;
self.lastIntersecting = false;
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
var MrPatates = Container.expand(function () {
var self = Container.call(this);
var patatesGraphics = self.attachAsset('mrPatates', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -2;
self.lastX = 0;
self.lastIntersecting = false;
self.isDead = false;
self.velocityY = 0;
self.update = function () {
if (self.isDead) return;
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -3;
self.lastX = 0;
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var bg = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
}));
var fruit = game.addChild(new Fruit());
fruit.x = 600;
fruit.y = 2260;
var platforms = [];
var knives = [];
var juiceDrops = [];
var gameSpeed = 1;
var distanceTraveled = 0;
var isGameRunning = true;
var finishFruits = [];
var finishFruitsSpawned = false;
var mrPatates = null;
var mrPatatesSpawned = false;
var bossMode = false;
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var distanceTxt = new Text2('Distance: 0m', {
size: 50,
fill: 0xFFFFFF
});
distanceTxt.anchor.set(0, 0);
distanceTxt.x = 150;
distanceTxt.y = 100;
LK.gui.topLeft.addChild(distanceTxt);
// Initialize some platforms
function createPlatform(x, y) {
var platform = new Platform();
platform.x = x;
platform.y = y;
platforms.push(platform);
game.addChild(platform);
return platform;
}
function createKnife(x, y) {
var knife = new Knife();
knife.x = x;
knife.y = y;
knife.lastIntersecting = knife.intersects(fruit);
knives.push(knife);
game.addChild(knife);
return knife;
}
function createJuiceDrop(x, y) {
var drop = new JuiceDrop();
drop.x = x;
drop.y = y;
drop.lastIntersecting = drop.intersects(fruit);
juiceDrops.push(drop);
game.addChild(drop);
return drop;
}
function spawnFinishFruits() {
// Create fruits with numbers 2, 3, 4, 5 in sequential order side by side
var fruitNumbers = [2, 3, 4, 5];
var startX = 2200;
var yPosition = 1800; // Same Y position for all fruits to be side by side
var platformY = yPosition + 120; // Platform below the fruits
for (var i = 0; i < fruitNumbers.length; i++) {
var finishFruit = new FinishFruit();
finishFruit.setNumber(fruitNumbers[i]);
finishFruit.x = startX + i * 180; // Slightly more spacing for better visibility
finishFruit.y = yPosition;
finishFruit.lastIntersecting = finishFruit.intersects(fruit);
finishFruits.push(finishFruit);
game.addChild(finishFruit);
// Create platform beneath each finish fruit
createPlatform(startX + i * 180, platformY);
}
}
// Create initial platforms
createPlatform(600, 2300);
createPlatform(900, 2200);
createPlatform(1200, 2100);
createPlatform(1500, 2000);
createPlatform(1800, 1900);
// Touch controls
game.down = function (x, y, obj) {
if (isGameRunning) {
fruit.jump();
}
};
function checkPlatformCollisions() {
for (var i = 0; i < platforms.length; i++) {
var platform = platforms[i];
var fruitBottom = fruit.y + 40;
var fruitTop = fruit.y - 40;
var fruitLeft = fruit.x - 40;
var fruitRight = fruit.x + 40;
var platformTop = platform.y - 15;
var platformBottom = platform.y + 15;
var platformLeft = platform.x - 100;
var platformRight = platform.x + 100;
// Check if fruit is landing on platform from above
if (fruit.velocityY > 0 && fruitBottom >= platformTop && fruitTop <= platformBottom && fruitRight >= platformLeft && fruitLeft <= platformRight) {
fruit.y = platformTop - 40;
fruit.velocityY = 0;
fruit.isOnGround = true;
fruit.jumpCount = 0;
break;
}
}
}
function spawnObstacles() {
// Don't spawn obstacles during boss fight
if (bossMode) return;
// Spawn platforms
if (LK.ticks % Math.max(60, 120 - Math.floor(distanceTraveled / 20)) == 0) {
var platformY = 1500 + Math.random() * 800;
createPlatform(2200, platformY);
}
// Spawn knives
var knifeSpawnRate = 90;
if (LK.ticks % Math.max(knifeSpawnRate, 150 - Math.floor(distanceTraveled / 5)) == 0) {
var knifeY = 1400 + Math.random() * 1000;
createKnife(2200, knifeY);
}
// Spawn juice drops on platforms
if (LK.ticks % Math.max(120, 180 - Math.floor(distanceTraveled / 8)) == 0) {
// Find a platform to spawn juice drop on
if (platforms.length > 0) {
var randomPlatform = platforms[Math.floor(Math.random() * platforms.length)];
var dropY = randomPlatform.y - 80; // Spawn above the platform
createJuiceDrop(randomPlatform.x, dropY);
}
}
}
function updateGameSpeed() {
gameSpeed = 1 + Math.floor(distanceTraveled / 50) * 0.2;
// Update speeds for all moving objects
for (var i = 0; i < platforms.length; i++) {
platforms[i].speed = -3 * gameSpeed;
}
for (var i = 0; i < knives.length; i++) {
knives[i].speed = -8 * gameSpeed;
}
for (var i = 0; i < juiceDrops.length; i++) {
juiceDrops[i].speed = -4 * gameSpeed;
}
for (var i = 0; i < finishFruits.length; i++) {
finishFruits[i].speed = -3 * gameSpeed;
}
}
game.update = function () {
if (!isGameRunning) return;
// Update distance
distanceTraveled += 0.1 * gameSpeed;
distanceTxt.setText('Distance: ' + Math.floor(distanceTraveled) + 'm');
// Update game speed
updateGameSpeed();
// Check platform collisions
checkPlatformCollisions();
// Spawn new obstacles
spawnObstacles();
// Update and clean up platforms
for (var i = platforms.length - 1; i >= 0; i--) {
var platform = platforms[i];
if (platform.lastX >= -200 && platform.x < -200) {
platform.destroy();
platforms.splice(i, 1);
}
}
// Update and clean up knives
for (var i = knives.length - 1; i >= 0; i--) {
var knife = knives[i];
// Check collision with fruit
var currentIntersecting = knife.intersects(fruit);
if (!knife.lastIntersecting && currentIntersecting) {
// Hit by knife - game over
LK.getSound('hit').play();
LK.effects.flashScreen(0xff0000, 1000);
isGameRunning = false;
LK.showGameOver();
return;
}
knife.lastIntersecting = currentIntersecting;
// Clean up off-screen knives
if (knife.lastX >= -200 && knife.x < -200) {
knife.destroy();
knives.splice(i, 1);
}
}
// Update and clean up juice drops
for (var i = juiceDrops.length - 1; i >= 0; i--) {
var drop = juiceDrops[i];
// Check collection
var currentIntersecting = drop.intersects(fruit);
if (!drop.lastIntersecting && currentIntersecting) {
// Collected juice drop
LK.setScore(LK.getScore() + 10);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('collect').play();
drop.destroy();
juiceDrops.splice(i, 1);
continue;
}
drop.lastIntersecting = currentIntersecting;
// Clean up off-screen drops
if (drop.lastX >= -200 && drop.x < -200) {
drop.destroy();
juiceDrops.splice(i, 1);
}
}
// Update and clean up finish fruits
for (var i = finishFruits.length - 1; i >= 0; i--) {
var finishFruit = finishFruits[i];
// Check collection
var currentIntersecting = finishFruit.intersects(fruit);
if (!finishFruit.lastIntersecting && currentIntersecting) {
// Collected finish fruit
LK.setScore(LK.getScore() + 50);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('collect').play();
finishFruit.destroy();
finishFruits.splice(i, 1);
continue;
}
finishFruit.lastIntersecting = currentIntersecting;
// Clean up off-screen finish fruits
if (finishFruit.lastX >= -200 && finishFruit.x < -200) {
finishFruit.destroy();
finishFruits.splice(i, 1);
}
}
// Check win condition - all finish fruits collected
if (finishFruitsSpawned && finishFruits.length === 0) {
isGameRunning = false;
// Show "Devamı gelecek" message for 2 seconds before win
var continueText = new Text2('Devamı gelecek', {
size: 120,
fill: 0xFFFFFF
});
continueText.anchor.set(0.5, 0.5);
continueText.x = 1024; // Center of screen
continueText.y = 1366; // Center of screen
game.addChild(continueText);
// Use tween to create 2-second delay, then show win
tween({}, {}, {
duration: 2000,
onFinish: function onFinish() {
continueText.destroy();
LK.showYouWin();
}
});
return;
}
// Spawn Mr.Patates at distance 123
if (distanceTraveled >= 123 && !mrPatatesSpawned) {
mrPatates = new MrPatates();
mrPatates.x = fruit.x + 300; // Spawn closer to character, visible on screen
mrPatates.y = fruit.y; // Same Y position as character to be visible
mrPatates.lastIntersecting = mrPatates.intersects(fruit);
game.addChild(mrPatates);
mrPatatesSpawned = true;
// Create speech text
var speechText = new Text2('Kardeşlerin elimde!', {
size: 80,
fill: 0xff0000
});
speechText.anchor.set(0.5, 0.5);
speechText.x = mrPatates.x;
speechText.y = mrPatates.y - 150;
game.addChild(speechText);
// Start Mr.Patates jumping down sequence after 2 seconds
LK.setTimeout(function () {
// Remove speech text
speechText.destroy();
// Make Mr.Patates jump down
mrPatates.velocityY = 5;
mrPatates.speed = 0; // Stop horizontal movement
}, 2000);
}
// Mr.Patates falling logic
if (mrPatates && !mrPatates.isDead) {
// Make Mr.Patates fall down
if (mrPatates.velocityY) {
mrPatates.y += mrPatates.velocityY;
mrPatates.velocityY += 0.8; // Gravity
}
// Clean up Mr.Patates when he falls off screen
if (mrPatates.y > 2800) {
mrPatates.destroy();
mrPatates = null;
}
}
// Check win condition at distance 200 (if no boss fight or boss defeated)
if (distanceTraveled >= 200 && !finishFruitsSpawned) {
spawnFinishFruits();
finishFruitsSpawned = true;
}
// Check if fruit fell to ground or off screen
if (fruit.y > 2500) {
isGameRunning = false;
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
// Add bonus points for distance
if (LK.ticks % 60 == 0) {
LK.setScore(LK.getScore() + Math.floor(gameSpeed));
scoreTxt.setText('Score: ' + LK.getScore());
}
};
// Start background music
LK.playMusic('bgmusic'); /****
* Plugins
****/
var storage = LK.import("@upit/storage.v1");
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var FinishFruit = Container.expand(function () {
var self = Container.call(this);
self.speed = -3;
self.lastX = 0;
self.lastIntersecting = false;
self.number = 2; // Will be set when created
self.fruitGraphics = null; // Will be set based on number
self.setNumber = function (num) {
self.number = num;
// Remove existing graphics if any
if (self.fruitGraphics) {
self.removeChild(self.fruitGraphics);
}
// Add appropriate fruit asset based on number
var assetName = 'fruit' + num;
self.fruitGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
};
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
var Fruit = Container.expand(function () {
var self = Container.call(this);
var fruitGraphics = self.attachAsset('fruit', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocityY = 0;
self.gravity = 0.8;
self.jumpPower = -18;
self.isOnGround = false;
self.lastY = 0;
self.jumpCount = 0;
self.maxJumps = 3;
self.jump = function () {
if (self.jumpCount < self.maxJumps) {
self.velocityY = self.jumpPower;
self.jumpCount++;
if (self.jumpCount === 1) {
self.isOnGround = false;
}
LK.getSound('jump').play();
}
};
self.update = function () {
self.lastY = self.y;
self.velocityY += self.gravity;
self.y += self.velocityY;
// No ground collision safety - let fruit fall through
};
return self;
});
var JuiceDrop = Container.expand(function () {
var self = Container.call(this);
var dropGraphics = self.attachAsset('juiceDrop', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -4;
self.lastX = 0;
self.lastIntersecting = false;
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
var Knife = Container.expand(function () {
var self = Container.call(this);
var knifeGraphics = self.attachAsset('knife', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -8;
self.lastX = 0;
self.lastIntersecting = false;
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
var MrPatates = Container.expand(function () {
var self = Container.call(this);
var patatesGraphics = self.attachAsset('mrPatates', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -2;
self.lastX = 0;
self.lastIntersecting = false;
self.isDead = false;
self.velocityY = 0;
self.update = function () {
if (self.isDead) return;
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -3;
self.lastX = 0;
self.update = function () {
self.lastX = self.x;
self.x += self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var bg = game.addChild(LK.getAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
}));
var fruit = game.addChild(new Fruit());
fruit.x = 600;
fruit.y = 2260;
var platforms = [];
var knives = [];
var juiceDrops = [];
var gameSpeed = 1;
var distanceTraveled = 0;
var isGameRunning = true;
var finishFruits = [];
var finishFruitsSpawned = false;
var mrPatates = null;
var mrPatatesSpawned = false;
var bossMode = false;
// UI Elements
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var distanceTxt = new Text2('Distance: 0m', {
size: 50,
fill: 0xFFFFFF
});
distanceTxt.anchor.set(0, 0);
distanceTxt.x = 150;
distanceTxt.y = 100;
LK.gui.topLeft.addChild(distanceTxt);
// Initialize some platforms
function createPlatform(x, y) {
var platform = new Platform();
platform.x = x;
platform.y = y;
platforms.push(platform);
game.addChild(platform);
return platform;
}
function createKnife(x, y) {
var knife = new Knife();
knife.x = x;
knife.y = y;
knife.lastIntersecting = knife.intersects(fruit);
knives.push(knife);
game.addChild(knife);
return knife;
}
function createJuiceDrop(x, y) {
var drop = new JuiceDrop();
drop.x = x;
drop.y = y;
drop.lastIntersecting = drop.intersects(fruit);
juiceDrops.push(drop);
game.addChild(drop);
return drop;
}
function spawnFinishFruits() {
// Create fruits with numbers 2, 3, 4, 5 in sequential order side by side
var fruitNumbers = [2, 3, 4, 5];
var startX = 2200;
var yPosition = 1800; // Same Y position for all fruits to be side by side
var platformY = yPosition + 120; // Platform below the fruits
for (var i = 0; i < fruitNumbers.length; i++) {
var finishFruit = new FinishFruit();
finishFruit.setNumber(fruitNumbers[i]);
finishFruit.x = startX + i * 180; // Slightly more spacing for better visibility
finishFruit.y = yPosition;
finishFruit.lastIntersecting = finishFruit.intersects(fruit);
finishFruits.push(finishFruit);
game.addChild(finishFruit);
// Create platform beneath each finish fruit
createPlatform(startX + i * 180, platformY);
}
}
// Create initial platforms
createPlatform(600, 2300);
createPlatform(900, 2200);
createPlatform(1200, 2100);
createPlatform(1500, 2000);
createPlatform(1800, 1900);
// Touch controls
game.down = function (x, y, obj) {
if (isGameRunning) {
fruit.jump();
}
};
function checkPlatformCollisions() {
for (var i = 0; i < platforms.length; i++) {
var platform = platforms[i];
var fruitBottom = fruit.y + 40;
var fruitTop = fruit.y - 40;
var fruitLeft = fruit.x - 40;
var fruitRight = fruit.x + 40;
var platformTop = platform.y - 15;
var platformBottom = platform.y + 15;
var platformLeft = platform.x - 100;
var platformRight = platform.x + 100;
// Check if fruit is landing on platform from above
if (fruit.velocityY > 0 && fruitBottom >= platformTop && fruitTop <= platformBottom && fruitRight >= platformLeft && fruitLeft <= platformRight) {
fruit.y = platformTop - 40;
fruit.velocityY = 0;
fruit.isOnGround = true;
fruit.jumpCount = 0;
break;
}
}
}
function spawnObstacles() {
// Don't spawn obstacles during boss fight
if (bossMode) return;
// Spawn platforms
if (LK.ticks % Math.max(60, 120 - Math.floor(distanceTraveled / 20)) == 0) {
var platformY = 1500 + Math.random() * 800;
createPlatform(2200, platformY);
}
// Spawn knives
var knifeSpawnRate = 90;
if (LK.ticks % Math.max(knifeSpawnRate, 150 - Math.floor(distanceTraveled / 5)) == 0) {
var knifeY = 1400 + Math.random() * 1000;
createKnife(2200, knifeY);
}
// Spawn juice drops on platforms
if (LK.ticks % Math.max(120, 180 - Math.floor(distanceTraveled / 8)) == 0) {
// Find a platform to spawn juice drop on
if (platforms.length > 0) {
var randomPlatform = platforms[Math.floor(Math.random() * platforms.length)];
var dropY = randomPlatform.y - 80; // Spawn above the platform
createJuiceDrop(randomPlatform.x, dropY);
}
}
}
function updateGameSpeed() {
gameSpeed = 1 + Math.floor(distanceTraveled / 50) * 0.2;
// Update speeds for all moving objects
for (var i = 0; i < platforms.length; i++) {
platforms[i].speed = -3 * gameSpeed;
}
for (var i = 0; i < knives.length; i++) {
knives[i].speed = -8 * gameSpeed;
}
for (var i = 0; i < juiceDrops.length; i++) {
juiceDrops[i].speed = -4 * gameSpeed;
}
for (var i = 0; i < finishFruits.length; i++) {
finishFruits[i].speed = -3 * gameSpeed;
}
}
game.update = function () {
if (!isGameRunning) return;
// Update distance
distanceTraveled += 0.1 * gameSpeed;
distanceTxt.setText('Distance: ' + Math.floor(distanceTraveled) + 'm');
// Update game speed
updateGameSpeed();
// Check platform collisions
checkPlatformCollisions();
// Spawn new obstacles
spawnObstacles();
// Update and clean up platforms
for (var i = platforms.length - 1; i >= 0; i--) {
var platform = platforms[i];
if (platform.lastX >= -200 && platform.x < -200) {
platform.destroy();
platforms.splice(i, 1);
}
}
// Update and clean up knives
for (var i = knives.length - 1; i >= 0; i--) {
var knife = knives[i];
// Check collision with fruit
var currentIntersecting = knife.intersects(fruit);
if (!knife.lastIntersecting && currentIntersecting) {
// Hit by knife - game over
LK.getSound('hit').play();
LK.effects.flashScreen(0xff0000, 1000);
isGameRunning = false;
LK.showGameOver();
return;
}
knife.lastIntersecting = currentIntersecting;
// Clean up off-screen knives
if (knife.lastX >= -200 && knife.x < -200) {
knife.destroy();
knives.splice(i, 1);
}
}
// Update and clean up juice drops
for (var i = juiceDrops.length - 1; i >= 0; i--) {
var drop = juiceDrops[i];
// Check collection
var currentIntersecting = drop.intersects(fruit);
if (!drop.lastIntersecting && currentIntersecting) {
// Collected juice drop
LK.setScore(LK.getScore() + 10);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('collect').play();
drop.destroy();
juiceDrops.splice(i, 1);
continue;
}
drop.lastIntersecting = currentIntersecting;
// Clean up off-screen drops
if (drop.lastX >= -200 && drop.x < -200) {
drop.destroy();
juiceDrops.splice(i, 1);
}
}
// Update and clean up finish fruits
for (var i = finishFruits.length - 1; i >= 0; i--) {
var finishFruit = finishFruits[i];
// Check collection
var currentIntersecting = finishFruit.intersects(fruit);
if (!finishFruit.lastIntersecting && currentIntersecting) {
// Collected finish fruit
LK.setScore(LK.getScore() + 50);
scoreTxt.setText('Score: ' + LK.getScore());
LK.getSound('collect').play();
finishFruit.destroy();
finishFruits.splice(i, 1);
continue;
}
finishFruit.lastIntersecting = currentIntersecting;
// Clean up off-screen finish fruits
if (finishFruit.lastX >= -200 && finishFruit.x < -200) {
finishFruit.destroy();
finishFruits.splice(i, 1);
}
}
// Check win condition - all finish fruits collected
if (finishFruitsSpawned && finishFruits.length === 0) {
isGameRunning = false;
// Show "Devamı gelecek" message for 2 seconds before win
var continueText = new Text2('Devamı gelecek', {
size: 120,
fill: 0xFFFFFF
});
continueText.anchor.set(0.5, 0.5);
continueText.x = 1024; // Center of screen
continueText.y = 1366; // Center of screen
game.addChild(continueText);
// Use tween to create 2-second delay, then show win
tween({}, {}, {
duration: 2000,
onFinish: function onFinish() {
continueText.destroy();
LK.showYouWin();
}
});
return;
}
// Spawn Mr.Patates at distance 123
if (distanceTraveled >= 123 && !mrPatatesSpawned) {
mrPatates = new MrPatates();
mrPatates.x = fruit.x + 300; // Spawn closer to character, visible on screen
mrPatates.y = fruit.y; // Same Y position as character to be visible
mrPatates.lastIntersecting = mrPatates.intersects(fruit);
game.addChild(mrPatates);
mrPatatesSpawned = true;
// Create speech text
var speechText = new Text2('Kardeşlerin elimde!', {
size: 80,
fill: 0xff0000
});
speechText.anchor.set(0.5, 0.5);
speechText.x = mrPatates.x;
speechText.y = mrPatates.y - 150;
game.addChild(speechText);
// Start Mr.Patates jumping down sequence after 2 seconds
LK.setTimeout(function () {
// Remove speech text
speechText.destroy();
// Make Mr.Patates jump down
mrPatates.velocityY = 5;
mrPatates.speed = 0; // Stop horizontal movement
}, 2000);
}
// Mr.Patates falling logic
if (mrPatates && !mrPatates.isDead) {
// Make Mr.Patates fall down
if (mrPatates.velocityY) {
mrPatates.y += mrPatates.velocityY;
mrPatates.velocityY += 0.8; // Gravity
}
// Clean up Mr.Patates when he falls off screen
if (mrPatates.y > 2800) {
mrPatates.destroy();
mrPatates = null;
}
}
// Check win condition at distance 200 (if no boss fight or boss defeated)
if (distanceTraveled >= 200 && !finishFruitsSpawned) {
spawnFinishFruits();
finishFruitsSpawned = true;
}
// Check if fruit fell to ground or off screen
if (fruit.y > 2500) {
isGameRunning = false;
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
// Add bonus points for distance
if (LK.ticks % 60 == 0) {
LK.setScore(LK.getScore() + Math.floor(gameSpeed));
scoreTxt.setText('Score: ' + LK.getScore());
}
};
// Start background music
LK.playMusic('bgmusic');
yürüyen insan portakal. In-Game asset. 2d. High contrast. No shadows
bıçak . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
platform . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
meyve suyu kutu. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
banana human. In-Game asset. 2d. High contrast. No shadows
kiwi human. In-Game asset. 2d. High contrast. No shadows
cucumber human. In-Game asset. 2d. High contrast. No shadows
Mr patates human. In-Game asset. 2d. High contrast. No shadows