/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Animal = Container.expand(function (type) { var self = Container.call(this); self.animalType = type; var graphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.moveSpeed = 2; self.directionX = Math.random() > 0.5 ? 1 : -1; self.directionY = Math.random() > 0.5 ? 1 : -1; self.changeDirectionTimer = 0; self.update = function () { self.changeDirectionTimer++; if (self.changeDirectionTimer > 120) { self.directionX = Math.random() > 0.5 ? 1 : -1; self.directionY = Math.random() > 0.5 ? 1 : -1; self.changeDirectionTimer = 0; } self.x += self.directionX * self.moveSpeed; self.y += self.directionY * self.moveSpeed; if (self.x < 50) self.directionX = 1; if (self.x > 1998) self.directionX = -1; if (self.y < 50) self.directionY = 1; if (self.y > 2682) self.directionY = -1; }; return self; }); var Peacock = Container.expand(function () { var self = Container.call(this); self.body = self.attachAsset('peacock', { anchorX: 0.5, anchorY: 0.5 }); self.beak = self.attachAsset('peacockBeak', { anchorX: 0.5, anchorY: 0.5, x: 60, y: -20 }); self.belly = self.attachAsset('peacockBelly', { anchorX: 0.5, anchorY: 0.5, alpha: 0.7, y: 30 }); self.fullness = 0; self.maxFullness = 20; self.baseSpeed = 4; self.currentSpeed = self.baseSpeed; self.isBeakOpen = false; self.blinkTimer = 0; self.isSleeping = false; self.update = function () { var drowsinessLevel = self.fullness / self.maxFullness; self.currentSpeed = self.baseSpeed * (1 - drowsinessLevel * 0.7); self.blinkTimer++; var blinkFrequency = 180 - drowsinessLevel * 120; if (self.blinkTimer > blinkFrequency) { self.blink(); self.blinkTimer = 0; } if (self.fullness >= self.maxFullness && !self.isSleeping) { self.fallAsleep(); } }; self.blink = function () { self.body.scaleY = 0.8; tween(self.body, { scaleY: 1 }, { duration: 200 }); }; self.openBeak = function () { if (!self.isBeakOpen) { self.isBeakOpen = true; tween(self.beak, { scaleY: 1.5 }, { duration: 100 }); } }; self.closeBeak = function () { if (self.isBeakOpen) { self.isBeakOpen = false; tween(self.beak, { scaleY: 1 }, { duration: 100 }); } }; self.eatAnimal = function (animal) { self.fullness++; var bellySizeIncrease = 1 + self.fullness * 0.1; tween(self.belly, { scaleX: bellySizeIncrease, scaleY: bellySizeIncrease }, { duration: 300 }); var swallowedAnimal = new SwallowedAnimal(animal.animalType); swallowedAnimal.x = Math.random() * 80 - 40; swallowedAnimal.y = Math.random() * 60 - 30; self.belly.addChild(swallowedAnimal); LK.getSound('chomp').play(); var points = 10; if (animal.animalType === 'lion') points = 20; if (animal.animalType === 'shark') points = 15; LK.setScore(LK.getScore() + points); }; self.fallAsleep = function () { self.isSleeping = true; tween(self, { alpha: 0.8 }, { duration: 1000 }); LK.setTimeout(function () { LK.showGameOver(); }, 2000); }; return self; }); var SwallowedAnimal = Container.expand(function (type) { var self = Container.call(this); var graphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5, alpha: 0.6 }); self.complaintTimer = 0; self.complaintText = null; var complaints = ["Let me out!", "This is awful!", "Help me!", "I'm trapped!", "So dark in here!"]; self.update = function () { self.complaintTimer++; if (self.complaintTimer > 180 && !self.complaintText) { var complaint = complaints[Math.floor(Math.random() * complaints.length)]; self.complaintText = new Text2(complaint, { size: 30, fill: 0xFFFFFF }); self.complaintText.anchor.set(0.5, 0.5); self.complaintText.x = self.x + Math.random() * 60 - 30; self.complaintText.y = self.y - 40; self.parent.addChild(self.complaintText); LK.getSound('complaint').play(); tween(self.complaintText, { alpha: 0 }, { duration: 2000, onFinish: function onFinish() { if (self.complaintText && self.complaintText.parent) { self.complaintText.parent.removeChild(self.complaintText); } self.complaintText = null; self.complaintTimer = 0; } }); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var peacock = game.addChild(new Peacock()); peacock.x = 1024; peacock.y = 1366; var animals = []; var animalTypes = ['lion', 'snake', 'shark', 'cow']; var spawnTimer = 0; var bed = LK.getAsset('bed', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 2600 }); game.addChild(bed); var scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var fullnessText = new Text2('Fullness: 0/20', { size: 50, fill: 0xFFFFFF }); fullnessText.anchor.set(0, 0); fullnessText.x = 50; fullnessText.y = 100; LK.gui.topLeft.addChild(fullnessText); var dragNode = null; game.down = function (x, y, obj) { if (!peacock.isSleeping) { dragNode = peacock; peacock.openBeak(); } }; game.move = function (x, y, obj) { if (dragNode && !peacock.isSleeping) { dragNode.x = x; dragNode.y = y; } }; game.up = function (x, y, obj) { if (dragNode) { peacock.closeBeak(); dragNode = null; } }; game.update = function () { if (peacock.isSleeping) return; spawnTimer++; if (spawnTimer > 120 && animals.length < 8) { var animalType = animalTypes[Math.floor(Math.random() * animalTypes.length)]; var animal = new Animal(animalType); animal.x = Math.random() * 1800 + 100; animal.y = Math.random() * 2400 + 100; animals.push(animal); game.addChild(animal); spawnTimer = 0; } for (var i = animals.length - 1; i >= 0; i--) { var animal = animals[i]; if (peacock.isBeakOpen && peacock.intersects(animal)) { peacock.eatAnimal(animal); animal.destroy(); animals.splice(i, 1); continue; } } scoreText.setText('Score: ' + LK.getScore()); fullnessText.setText('Fullness: ' + peacock.fullness + '/' + peacock.maxFullness); if (peacock.fullness >= peacock.maxFullness && !peacock.isSleeping) { peacock.y = Math.min(peacock.y + 2, 2600); } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Animal = Container.expand(function (type) {
var self = Container.call(this);
self.animalType = type;
var graphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
self.moveSpeed = 2;
self.directionX = Math.random() > 0.5 ? 1 : -1;
self.directionY = Math.random() > 0.5 ? 1 : -1;
self.changeDirectionTimer = 0;
self.update = function () {
self.changeDirectionTimer++;
if (self.changeDirectionTimer > 120) {
self.directionX = Math.random() > 0.5 ? 1 : -1;
self.directionY = Math.random() > 0.5 ? 1 : -1;
self.changeDirectionTimer = 0;
}
self.x += self.directionX * self.moveSpeed;
self.y += self.directionY * self.moveSpeed;
if (self.x < 50) self.directionX = 1;
if (self.x > 1998) self.directionX = -1;
if (self.y < 50) self.directionY = 1;
if (self.y > 2682) self.directionY = -1;
};
return self;
});
var Peacock = Container.expand(function () {
var self = Container.call(this);
self.body = self.attachAsset('peacock', {
anchorX: 0.5,
anchorY: 0.5
});
self.beak = self.attachAsset('peacockBeak', {
anchorX: 0.5,
anchorY: 0.5,
x: 60,
y: -20
});
self.belly = self.attachAsset('peacockBelly', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.7,
y: 30
});
self.fullness = 0;
self.maxFullness = 20;
self.baseSpeed = 4;
self.currentSpeed = self.baseSpeed;
self.isBeakOpen = false;
self.blinkTimer = 0;
self.isSleeping = false;
self.update = function () {
var drowsinessLevel = self.fullness / self.maxFullness;
self.currentSpeed = self.baseSpeed * (1 - drowsinessLevel * 0.7);
self.blinkTimer++;
var blinkFrequency = 180 - drowsinessLevel * 120;
if (self.blinkTimer > blinkFrequency) {
self.blink();
self.blinkTimer = 0;
}
if (self.fullness >= self.maxFullness && !self.isSleeping) {
self.fallAsleep();
}
};
self.blink = function () {
self.body.scaleY = 0.8;
tween(self.body, {
scaleY: 1
}, {
duration: 200
});
};
self.openBeak = function () {
if (!self.isBeakOpen) {
self.isBeakOpen = true;
tween(self.beak, {
scaleY: 1.5
}, {
duration: 100
});
}
};
self.closeBeak = function () {
if (self.isBeakOpen) {
self.isBeakOpen = false;
tween(self.beak, {
scaleY: 1
}, {
duration: 100
});
}
};
self.eatAnimal = function (animal) {
self.fullness++;
var bellySizeIncrease = 1 + self.fullness * 0.1;
tween(self.belly, {
scaleX: bellySizeIncrease,
scaleY: bellySizeIncrease
}, {
duration: 300
});
var swallowedAnimal = new SwallowedAnimal(animal.animalType);
swallowedAnimal.x = Math.random() * 80 - 40;
swallowedAnimal.y = Math.random() * 60 - 30;
self.belly.addChild(swallowedAnimal);
LK.getSound('chomp').play();
var points = 10;
if (animal.animalType === 'lion') points = 20;
if (animal.animalType === 'shark') points = 15;
LK.setScore(LK.getScore() + points);
};
self.fallAsleep = function () {
self.isSleeping = true;
tween(self, {
alpha: 0.8
}, {
duration: 1000
});
LK.setTimeout(function () {
LK.showGameOver();
}, 2000);
};
return self;
});
var SwallowedAnimal = Container.expand(function (type) {
var self = Container.call(this);
var graphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.6
});
self.complaintTimer = 0;
self.complaintText = null;
var complaints = ["Let me out!", "This is awful!", "Help me!", "I'm trapped!", "So dark in here!"];
self.update = function () {
self.complaintTimer++;
if (self.complaintTimer > 180 && !self.complaintText) {
var complaint = complaints[Math.floor(Math.random() * complaints.length)];
self.complaintText = new Text2(complaint, {
size: 30,
fill: 0xFFFFFF
});
self.complaintText.anchor.set(0.5, 0.5);
self.complaintText.x = self.x + Math.random() * 60 - 30;
self.complaintText.y = self.y - 40;
self.parent.addChild(self.complaintText);
LK.getSound('complaint').play();
tween(self.complaintText, {
alpha: 0
}, {
duration: 2000,
onFinish: function onFinish() {
if (self.complaintText && self.complaintText.parent) {
self.complaintText.parent.removeChild(self.complaintText);
}
self.complaintText = null;
self.complaintTimer = 0;
}
});
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var peacock = game.addChild(new Peacock());
peacock.x = 1024;
peacock.y = 1366;
var animals = [];
var animalTypes = ['lion', 'snake', 'shark', 'cow'];
var spawnTimer = 0;
var bed = LK.getAsset('bed', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2600
});
game.addChild(bed);
var scoreText = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var fullnessText = new Text2('Fullness: 0/20', {
size: 50,
fill: 0xFFFFFF
});
fullnessText.anchor.set(0, 0);
fullnessText.x = 50;
fullnessText.y = 100;
LK.gui.topLeft.addChild(fullnessText);
var dragNode = null;
game.down = function (x, y, obj) {
if (!peacock.isSleeping) {
dragNode = peacock;
peacock.openBeak();
}
};
game.move = function (x, y, obj) {
if (dragNode && !peacock.isSleeping) {
dragNode.x = x;
dragNode.y = y;
}
};
game.up = function (x, y, obj) {
if (dragNode) {
peacock.closeBeak();
dragNode = null;
}
};
game.update = function () {
if (peacock.isSleeping) return;
spawnTimer++;
if (spawnTimer > 120 && animals.length < 8) {
var animalType = animalTypes[Math.floor(Math.random() * animalTypes.length)];
var animal = new Animal(animalType);
animal.x = Math.random() * 1800 + 100;
animal.y = Math.random() * 2400 + 100;
animals.push(animal);
game.addChild(animal);
spawnTimer = 0;
}
for (var i = animals.length - 1; i >= 0; i--) {
var animal = animals[i];
if (peacock.isBeakOpen && peacock.intersects(animal)) {
peacock.eatAnimal(animal);
animal.destroy();
animals.splice(i, 1);
continue;
}
}
scoreText.setText('Score: ' + LK.getScore());
fullnessText.setText('Fullness: ' + peacock.fullness + '/' + peacock.maxFullness);
if (peacock.fullness >= peacock.maxFullness && !peacock.isSleeping) {
peacock.y = Math.min(peacock.y + 2, 2600);
}
};