/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Chicken = Container.expand(function () { var self = Container.call(this); var chickenGraphics = self.attachAsset('chicken', { anchorX: 0.5, anchorY: 0.5 }); self.hasEgg = true; self.egg = null; return self; }); var Egg = Container.expand(function () { var self = Container.call(this); var eggGraphics = self.attachAsset('egg', { anchorX: 0.5, anchorY: 0.5 }); self.isCollected = false; self.isDelivered = false; self.underChicken = null; return self; }); var Farmer = Container.expand(function () { var self = Container.call(this); var farmerGraphics = self.attachAsset('farmer', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.direction = 1; self.patrolPoints = []; self.currentPoint = 0; self.lastX = 0; self.lastY = 0; self.update = function () { // Store last position self.lastX = self.x; self.lastY = self.y; // Check if weasel has an egg and if farmer should chase if (weasel && weasel.hasEgg) { // Chase the weasel at a faster speed var chaseSpeed = self.speed * 1.5; var dx = weasel.x - self.x; var dy = weasel.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > chaseSpeed) { self.x += dx / distance * chaseSpeed; self.y += dy / distance * chaseSpeed; } } else if (self.patrolPoints.length > 0) { var targetPoint = self.patrolPoints[self.currentPoint]; // Move toward target point var dx = targetPoint.x - self.x; var dy = targetPoint.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > self.speed) { self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } else { // Point reached, move to next point self.currentPoint = (self.currentPoint + 1) % self.patrolPoints.length; } // Randomly change direction occasionally if (Math.random() < 0.005) { self.currentPoint = Math.floor(Math.random() * self.patrolPoints.length); } } }; return self; }); // Set farm background color var Weasel = Container.expand(function () { var self = Container.call(this); // Use an animated gif for the weasel var weaselGraphics = self.attachAsset('weasel_gif', { anchorX: 0.5, anchorY: 0.5 }); // If the gif asset is not available, fallback to static image if (!weaselGraphics) { weaselGraphics = self.attachAsset('weasel', { anchorX: 0.5, anchorY: 0.5 }); } self.speed = 10; // Increased from 5 to 10 for faster movement self.hasEgg = false; self.carryingEgg = null; self.targetX = undefined; self.targetY = undefined; self.lastX = 0; self.lastY = 0; self.update = function () { self.lastX = self.x; self.lastY = self.y; // Follow mouse click target if it exists if (self.targetX !== undefined && self.targetY !== undefined) { var dx = self.targetX - self.x; var dy = self.targetY - self.y; var distance = Math.sqrt(dx * dx + dy * dy); // If we're close enough to the target, stop moving if (distance < self.speed) { self.x = self.targetX; self.y = self.targetY; // Clear the target once reached self.targetX = undefined; self.targetY = undefined; } else { // Move toward the target self.x += dx / distance * self.speed; self.y += dy / distance * self.speed; } // Update egg position if carrying one if (self.hasEgg && self.carryingEgg) { self.carryingEgg.x = self.x; self.carryingEgg.y = self.y - 30; } } // Alert nearby chickens and farmer when near eggs if (eggs && chickens) { for (var i = 0; i < eggs.length; i++) { var egg = eggs[i]; if (!egg.isCollected && egg.underChicken) { // Calculate distance to egg var dx = self.x - egg.x; var dy = self.y - egg.y; var distance = Math.sqrt(dx * dx + dy * dy); // If close to an egg, make the chicken flutter if (distance < 150 && egg.underChicken) { // Make chicken flutter by adding a slight movement var chicken = egg.underChicken; if (LK.ticks % 10 === 0) { chicken.x += (Math.random() - 0.5) * 5; chicken.y += (Math.random() - 0.5) * 5; } } } } } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Set farm background color game.setBackgroundColor(0x7CFC00); // Game variables var gameWidth = 2048; var gameHeight = 2732; var score = 0; var weasel; var farmer; var chickens = []; var eggs = []; var coop; var exit; var dragNode = null; var isGameOver = false; var lastIntersectingFarmer = false; var totalEggs = 8; var eggsDelivered = 0; // Create chicken coop area coop = game.addChild(LK.getAsset('coop', { anchorX: 0.5, anchorY: 0.5, x: gameWidth / 2, y: gameHeight / 2, alpha: 0.3 })); // Create exit at bottom of screen exit = game.addChild(LK.getAsset('exit', { anchorX: 0.5, anchorY: 0.5, x: gameWidth / 2, y: gameHeight - 100 })); // Create score text (show total score, 10 points per egg) var scoreTxt = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Create best score text var bestScore = storage.bestScore || 0; var bestScoreTxt = new Text2('Best: ' + bestScore, { size: 60, fill: 0xFFFFFF }); bestScoreTxt.anchor.set(0.5, 0); bestScoreTxt.y = 80; // Position below the main score LK.gui.top.addChild(bestScoreTxt); // Create the player character (weasel) weasel = new Weasel(); weasel.x = gameWidth / 2; weasel.y = gameHeight - 200; weasel.lastX = weasel.x; weasel.lastY = weasel.y; game.addChild(weasel); // Create the farmer farmer = new Farmer(); farmer.x = gameWidth / 4; farmer.y = gameHeight / 3; farmer.lastX = farmer.x; farmer.lastY = farmer.y; game.addChild(farmer); // Set up farmer patrol points farmer.patrolPoints = [{ x: gameWidth / 4, y: gameHeight / 3 }, { x: 3 * gameWidth / 4, y: gameHeight / 3 }, { x: 3 * gameWidth / 4, y: 2 * gameHeight / 3 }, { x: gameWidth / 4, y: 2 * gameHeight / 3 }]; // Create chickens and eggs for (var i = 0; i < totalEggs; i++) { var chicken = new Chicken(); // Position chickens in a grid-like pattern var row = Math.floor(i / 4); var col = i % 4; chicken.x = (col + 1) * (gameWidth / 5); chicken.y = (row + 1) * (gameHeight / 4); game.addChild(chicken); chickens.push(chicken); // Create egg under chicken var egg = new Egg(); egg.x = chicken.x; egg.y = chicken.y; egg.underChicken = chicken; chicken.egg = egg; // Add egg to the game so it's visible game.addChild(egg); eggs.push(egg); } // Drag handling functions function handleMove(x, y, obj) { if (dragNode && !isGameOver) { dragNode.x = x; dragNode.y = y; // Check if weasel is carrying an egg if (weasel.hasEgg && weasel.carryingEgg) { weasel.carryingEgg.x = weasel.x; weasel.carryingEgg.y = weasel.y - 30; } } } // We don't need move handler since we're following clicks game.move = function (x, y, obj) {}; game.down = function (x, y, obj) { if (!isGameOver) { // Instead of setting dragNode, set a target position for the weasel to follow weasel.targetX = x; weasel.targetY = y; } }; game.up = function (x, y, obj) { dragNode = null; }; // Main game update logic game.update = function () { // Skip updates if game is over if (isGameOver) return; // Update farmer and weasel positions farmer.update(); weasel.update(); // Check for farmer collision var intersectingFarmer = weasel.intersects(farmer); if (!lastIntersectingFarmer && intersectingFarmer) { // Weasel got caught by farmer isGameOver = true; // Check if we should update best score if (score > (storage.bestScore || 0)) { storage.bestScore = score; bestScoreTxt.setText('Best: ' + storage.bestScore); } LK.getSound('caught').play(); LK.effects.flashScreen(0xFF0000, 1000); LK.showGameOver(); } lastIntersectingFarmer = intersectingFarmer; // Check for egg pickup for (var i = 0; i < eggs.length; i++) { var egg = eggs[i]; if (!egg.isCollected && egg.underChicken && weasel.intersects(egg.underChicken)) { // Weasel is near a chicken with an egg if (!weasel.hasEgg) { // Pick up the egg egg.isCollected = true; egg.underChicken.hasEgg = false; weasel.hasEgg = true; weasel.carryingEgg = egg; game.addChild(egg); // Move egg to top layer LK.getSound('pickup').play(); // When egg is taken, immediately alert the farmer by increasing his speed temporarily var oldSpeed = farmer.speed; farmer.speed = farmer.speed * 2; LK.setTimeout(function () { farmer.speed = oldSpeed; }, 3000); } } } // Check for egg delivery if (weasel.hasEgg && weasel.carryingEgg && weasel.intersects(exit)) { // Deliver the egg weasel.carryingEgg.isDelivered = true; weasel.hasEgg = false; // Remove the delivered egg if (weasel.carryingEgg.parent) { weasel.carryingEgg.parent.removeChild(weasel.carryingEgg); } eggsDelivered++; score += 10; LK.setScore(score); scoreTxt.setText("Score: " + score); LK.getSound('success').play(); // Check for win condition if (eggsDelivered >= totalEggs) { // All eggs delivered, reset eggs and continue game eggsDelivered = 0; scoreTxt.setText("Score: " + score); // Reset eggs and chickens for (var i = 0; i < eggs.length; i++) { var egg = eggs[i]; var chicken = chickens[i]; egg.isCollected = false; egg.isDelivered = false; egg.x = chicken.x; egg.y = chicken.y; egg.underChicken = chicken; chicken.hasEgg = true; chicken.egg = egg; // Add egg back to game if not present if (!egg.parent) { game.addChild(egg); } } LK.effects.flashScreen(0x00FF00, 1000); } weasel.carryingEgg = null; } // Make chickens occasionally look around (random movement) if (LK.ticks % 60 === 0) { for (var j = 0; j < chickens.length; j++) { if (Math.random() < 0.3) { var chicken = chickens[j]; var randomOffsetX = (Math.random() - 0.5) * 20; var randomOffsetY = (Math.random() - 0.5) * 20; tween(chicken, { x: chicken.x + randomOffsetX, y: chicken.y + randomOffsetY }, { duration: 500 }); } } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Chicken = Container.expand(function () {
var self = Container.call(this);
var chickenGraphics = self.attachAsset('chicken', {
anchorX: 0.5,
anchorY: 0.5
});
self.hasEgg = true;
self.egg = null;
return self;
});
var Egg = Container.expand(function () {
var self = Container.call(this);
var eggGraphics = self.attachAsset('egg', {
anchorX: 0.5,
anchorY: 0.5
});
self.isCollected = false;
self.isDelivered = false;
self.underChicken = null;
return self;
});
var Farmer = Container.expand(function () {
var self = Container.call(this);
var farmerGraphics = self.attachAsset('farmer', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.direction = 1;
self.patrolPoints = [];
self.currentPoint = 0;
self.lastX = 0;
self.lastY = 0;
self.update = function () {
// Store last position
self.lastX = self.x;
self.lastY = self.y;
// Check if weasel has an egg and if farmer should chase
if (weasel && weasel.hasEgg) {
// Chase the weasel at a faster speed
var chaseSpeed = self.speed * 1.5;
var dx = weasel.x - self.x;
var dy = weasel.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > chaseSpeed) {
self.x += dx / distance * chaseSpeed;
self.y += dy / distance * chaseSpeed;
}
} else if (self.patrolPoints.length > 0) {
var targetPoint = self.patrolPoints[self.currentPoint];
// Move toward target point
var dx = targetPoint.x - self.x;
var dy = targetPoint.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > self.speed) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
} else {
// Point reached, move to next point
self.currentPoint = (self.currentPoint + 1) % self.patrolPoints.length;
}
// Randomly change direction occasionally
if (Math.random() < 0.005) {
self.currentPoint = Math.floor(Math.random() * self.patrolPoints.length);
}
}
};
return self;
});
// Set farm background color
var Weasel = Container.expand(function () {
var self = Container.call(this);
// Use an animated gif for the weasel
var weaselGraphics = self.attachAsset('weasel_gif', {
anchorX: 0.5,
anchorY: 0.5
});
// If the gif asset is not available, fallback to static image
if (!weaselGraphics) {
weaselGraphics = self.attachAsset('weasel', {
anchorX: 0.5,
anchorY: 0.5
});
}
self.speed = 10; // Increased from 5 to 10 for faster movement
self.hasEgg = false;
self.carryingEgg = null;
self.targetX = undefined;
self.targetY = undefined;
self.lastX = 0;
self.lastY = 0;
self.update = function () {
self.lastX = self.x;
self.lastY = self.y;
// Follow mouse click target if it exists
if (self.targetX !== undefined && self.targetY !== undefined) {
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// If we're close enough to the target, stop moving
if (distance < self.speed) {
self.x = self.targetX;
self.y = self.targetY;
// Clear the target once reached
self.targetX = undefined;
self.targetY = undefined;
} else {
// Move toward the target
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
// Update egg position if carrying one
if (self.hasEgg && self.carryingEgg) {
self.carryingEgg.x = self.x;
self.carryingEgg.y = self.y - 30;
}
}
// Alert nearby chickens and farmer when near eggs
if (eggs && chickens) {
for (var i = 0; i < eggs.length; i++) {
var egg = eggs[i];
if (!egg.isCollected && egg.underChicken) {
// Calculate distance to egg
var dx = self.x - egg.x;
var dy = self.y - egg.y;
var distance = Math.sqrt(dx * dx + dy * dy);
// If close to an egg, make the chicken flutter
if (distance < 150 && egg.underChicken) {
// Make chicken flutter by adding a slight movement
var chicken = egg.underChicken;
if (LK.ticks % 10 === 0) {
chicken.x += (Math.random() - 0.5) * 5;
chicken.y += (Math.random() - 0.5) * 5;
}
}
}
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Set farm background color
game.setBackgroundColor(0x7CFC00);
// Game variables
var gameWidth = 2048;
var gameHeight = 2732;
var score = 0;
var weasel;
var farmer;
var chickens = [];
var eggs = [];
var coop;
var exit;
var dragNode = null;
var isGameOver = false;
var lastIntersectingFarmer = false;
var totalEggs = 8;
var eggsDelivered = 0;
// Create chicken coop area
coop = game.addChild(LK.getAsset('coop', {
anchorX: 0.5,
anchorY: 0.5,
x: gameWidth / 2,
y: gameHeight / 2,
alpha: 0.3
}));
// Create exit at bottom of screen
exit = game.addChild(LK.getAsset('exit', {
anchorX: 0.5,
anchorY: 0.5,
x: gameWidth / 2,
y: gameHeight - 100
}));
// Create score text (show total score, 10 points per egg)
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Create best score text
var bestScore = storage.bestScore || 0;
var bestScoreTxt = new Text2('Best: ' + bestScore, {
size: 60,
fill: 0xFFFFFF
});
bestScoreTxt.anchor.set(0.5, 0);
bestScoreTxt.y = 80; // Position below the main score
LK.gui.top.addChild(bestScoreTxt);
// Create the player character (weasel)
weasel = new Weasel();
weasel.x = gameWidth / 2;
weasel.y = gameHeight - 200;
weasel.lastX = weasel.x;
weasel.lastY = weasel.y;
game.addChild(weasel);
// Create the farmer
farmer = new Farmer();
farmer.x = gameWidth / 4;
farmer.y = gameHeight / 3;
farmer.lastX = farmer.x;
farmer.lastY = farmer.y;
game.addChild(farmer);
// Set up farmer patrol points
farmer.patrolPoints = [{
x: gameWidth / 4,
y: gameHeight / 3
}, {
x: 3 * gameWidth / 4,
y: gameHeight / 3
}, {
x: 3 * gameWidth / 4,
y: 2 * gameHeight / 3
}, {
x: gameWidth / 4,
y: 2 * gameHeight / 3
}];
// Create chickens and eggs
for (var i = 0; i < totalEggs; i++) {
var chicken = new Chicken();
// Position chickens in a grid-like pattern
var row = Math.floor(i / 4);
var col = i % 4;
chicken.x = (col + 1) * (gameWidth / 5);
chicken.y = (row + 1) * (gameHeight / 4);
game.addChild(chicken);
chickens.push(chicken);
// Create egg under chicken
var egg = new Egg();
egg.x = chicken.x;
egg.y = chicken.y;
egg.underChicken = chicken;
chicken.egg = egg;
// Add egg to the game so it's visible
game.addChild(egg);
eggs.push(egg);
}
// Drag handling functions
function handleMove(x, y, obj) {
if (dragNode && !isGameOver) {
dragNode.x = x;
dragNode.y = y;
// Check if weasel is carrying an egg
if (weasel.hasEgg && weasel.carryingEgg) {
weasel.carryingEgg.x = weasel.x;
weasel.carryingEgg.y = weasel.y - 30;
}
}
}
// We don't need move handler since we're following clicks
game.move = function (x, y, obj) {};
game.down = function (x, y, obj) {
if (!isGameOver) {
// Instead of setting dragNode, set a target position for the weasel to follow
weasel.targetX = x;
weasel.targetY = y;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game update logic
game.update = function () {
// Skip updates if game is over
if (isGameOver) return;
// Update farmer and weasel positions
farmer.update();
weasel.update();
// Check for farmer collision
var intersectingFarmer = weasel.intersects(farmer);
if (!lastIntersectingFarmer && intersectingFarmer) {
// Weasel got caught by farmer
isGameOver = true;
// Check if we should update best score
if (score > (storage.bestScore || 0)) {
storage.bestScore = score;
bestScoreTxt.setText('Best: ' + storage.bestScore);
}
LK.getSound('caught').play();
LK.effects.flashScreen(0xFF0000, 1000);
LK.showGameOver();
}
lastIntersectingFarmer = intersectingFarmer;
// Check for egg pickup
for (var i = 0; i < eggs.length; i++) {
var egg = eggs[i];
if (!egg.isCollected && egg.underChicken && weasel.intersects(egg.underChicken)) {
// Weasel is near a chicken with an egg
if (!weasel.hasEgg) {
// Pick up the egg
egg.isCollected = true;
egg.underChicken.hasEgg = false;
weasel.hasEgg = true;
weasel.carryingEgg = egg;
game.addChild(egg); // Move egg to top layer
LK.getSound('pickup').play();
// When egg is taken, immediately alert the farmer by increasing his speed temporarily
var oldSpeed = farmer.speed;
farmer.speed = farmer.speed * 2;
LK.setTimeout(function () {
farmer.speed = oldSpeed;
}, 3000);
}
}
}
// Check for egg delivery
if (weasel.hasEgg && weasel.carryingEgg && weasel.intersects(exit)) {
// Deliver the egg
weasel.carryingEgg.isDelivered = true;
weasel.hasEgg = false;
// Remove the delivered egg
if (weasel.carryingEgg.parent) {
weasel.carryingEgg.parent.removeChild(weasel.carryingEgg);
}
eggsDelivered++;
score += 10;
LK.setScore(score);
scoreTxt.setText("Score: " + score);
LK.getSound('success').play();
// Check for win condition
if (eggsDelivered >= totalEggs) {
// All eggs delivered, reset eggs and continue game
eggsDelivered = 0;
scoreTxt.setText("Score: " + score);
// Reset eggs and chickens
for (var i = 0; i < eggs.length; i++) {
var egg = eggs[i];
var chicken = chickens[i];
egg.isCollected = false;
egg.isDelivered = false;
egg.x = chicken.x;
egg.y = chicken.y;
egg.underChicken = chicken;
chicken.hasEgg = true;
chicken.egg = egg;
// Add egg back to game if not present
if (!egg.parent) {
game.addChild(egg);
}
}
LK.effects.flashScreen(0x00FF00, 1000);
}
weasel.carryingEgg = null;
}
// Make chickens occasionally look around (random movement)
if (LK.ticks % 60 === 0) {
for (var j = 0; j < chickens.length; j++) {
if (Math.random() < 0.3) {
var chicken = chickens[j];
var randomOffsetX = (Math.random() - 0.5) * 20;
var randomOffsetY = (Math.random() - 0.5) * 20;
tween(chicken, {
x: chicken.x + randomOffsetX,
y: chicken.y + randomOffsetY
}, {
duration: 500
});
}
}
}
};
its a chicken. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
egg. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
angry farmer with all body. In-Game asset. 2d. High contrast. No shadows
without egg
hole. In-Game asset. 2d. High contrast. No shadows
Çit. In-Game asset. 2d. High contrast. No shadows