/**** * 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