Code edit (1 edits merged)
Please save this source code
User prompt
Magical Tea Party
Initial prompt
Toca tea party π«βοΈ (2011). Help blossom π©·, bubbles π, and buttercup π have a tea party π«? Tap on the cake to eat it, tap on the teapot to pour tea for the cups, tap on the gift to open it, they be party horns, kazoos, and a doll inside gifts
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Cake = Container.expand(function () {
var self = Container.call(this);
var cakeGraphics = self.attachAsset('cake', {
anchorX: 0.5,
anchorY: 0.5
});
self.eaten = false;
self.down = function (x, y, obj) {
if (self.eaten) return;
self.eaten = true;
LK.getSound('eat').play();
tween(cakeGraphics, {
scaleX: 0,
scaleY: 0,
alpha: 0
}, {
duration: 500,
easing: tween.easeIn,
onFinish: function onFinish() {
self.eaten = false;
cakeGraphics.scaleX = 1;
cakeGraphics.scaleY = 1;
cakeGraphics.alpha = 1;
}
});
// Make nearest character eat
var nearestCharacter = null;
var minDistance = Infinity;
for (var i = 0; i < characters.length; i++) {
var character = characters[i];
var distance = Math.sqrt(Math.pow(character.x - self.x, 2) + Math.pow(character.y - self.y, 2));
if (distance < minDistance) {
minDistance = distance;
nearestCharacter = character;
}
}
if (nearestCharacter) {
nearestCharacter.playEatAnimation();
}
};
return self;
});
var Character = Container.expand(function (characterColor, name) {
var self = Container.call(this);
var body = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 1,
color: characterColor
});
self.name = name;
self.isEating = false;
self.playEatAnimation = function () {
if (self.isEating) return;
self.isEating = true;
tween(body, {
scaleY: 0.8
}, {
duration: 200,
easing: tween.easeInOut
});
tween(body, {
scaleY: 1
}, {
duration: 200,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.isEating = false;
}
});
LK.getSound('cheer').play();
};
return self;
});
var GiftBox = Container.expand(function () {
var self = Container.call(this);
var boxGraphics = self.attachAsset('giftbox', {
anchorX: 0.5,
anchorY: 0.5
});
self.opened = false;
self.down = function (x, y, obj) {
if (self.opened) return;
self.opened = true;
LK.getSound('unwrap').play();
// Box opening animation
tween(boxGraphics, {
scaleY: 0.1,
alpha: 0.5
}, {
duration: 300,
easing: tween.easeIn,
onFinish: function onFinish() {
// Create random gift
var giftTypes = ['horn', 'kazoo', 'doll'];
var randomGift = giftTypes[Math.floor(Math.random() * giftTypes.length)];
var gift = self.addChild(LK.getAsset(randomGift, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0,
scaleY: 0
}));
// Gift pop-out animation
tween(gift, {
scaleX: 1,
scaleY: 1
}, {
duration: 500,
easing: tween.bounceOut
});
// Reset box after delay
LK.setTimeout(function () {
gift.destroy();
self.opened = false;
boxGraphics.scaleY = 1;
boxGraphics.alpha = 1;
}, 3000);
}
});
};
return self;
});
var TeaCup = Container.expand(function () {
var self = Container.call(this);
var cupGraphics = self.attachAsset('teacup', {
anchorX: 0.5,
anchorY: 0.5
});
self.filled = false;
self.tea = null;
self.steamParticles = [];
self.fill = function () {
if (self.filled) return;
self.filled = true;
// Add tea inside cup
self.tea = self.addChild(LK.getAsset('teacup', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.3,
y: 10,
tint: 0x8B4513
}));
// Add steam effect
for (var i = 0; i < 3; i++) {
var steam = self.addChild(LK.getAsset('steam', {
anchorX: 0.5,
anchorY: 0.5,
x: (i - 1) * 15,
y: -20,
alpha: 0.7
}));
self.steamParticles.push(steam);
// Animate steam
var _animateSteam = function animateSteam(steamObj) {
tween(steamObj, {
y: steamObj.y - 50,
alpha: 0
}, {
duration: 2000,
easing: tween.easeOut,
onFinish: function onFinish() {
steamObj.y = -20;
steamObj.alpha = 0.7;
_animateSteam(steamObj);
}
});
};
_animateSteam(steam);
}
};
return self;
});
var TeaPot = Container.expand(function () {
var self = Container.call(this);
var potGraphics = self.attachAsset('teapot', {
anchorX: 0.5,
anchorY: 0.5
});
self.pouring = false;
self.down = function (x, y, obj) {
if (self.pouring) return;
self.pouring = true;
LK.getSound('pour').play();
tween(potGraphics, {
rotation: 0.5
}, {
duration: 300,
easing: tween.easeOut
});
tween(potGraphics, {
rotation: 0
}, {
duration: 300,
easing: tween.easeIn,
onFinish: function onFinish() {
self.pouring = false;
}
});
// Fill nearby empty cups
for (var i = 0; i < teacups.length; i++) {
var cup = teacups[i];
if (!cup.filled) {
cup.fill();
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var characters = [];
var cakes = [];
var teacups = [];
var giftboxes = [];
// Create table
var table = game.addChild(LK.getAsset('table', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1400
}));
var tablecloth = game.addChild(LK.getAsset('tablecloth', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1400
}));
// Create chairs and characters
var chairPositions = [{
x: 1024,
y: 1800
},
// Bottom
{
x: 600,
y: 1200
},
// Left
{
x: 1448,
y: 1200
} // Right
];
var characterColors = [0xFF69B4, 0x98FB98, 0xFFB6C1];
var characterNames = ['Blossom', 'Bubbles', 'Buttercup'];
for (var i = 0; i < 3; i++) {
var chair = game.addChild(LK.getAsset('chair', {
anchorX: 0.5,
anchorY: 0.5,
x: chairPositions[i].x,
y: chairPositions[i].y
}));
var character = game.addChild(new Character(characterColors[i], characterNames[i]));
character.x = chairPositions[i].x;
character.y = chairPositions[i].y - 50;
characters.push(character);
}
// Create teapot at center of table
var teapot = game.addChild(new TeaPot());
teapot.x = 1024;
teapot.y = 1300;
// Create teacups around table
var cupPositions = [{
x: 900,
y: 1200
}, {
x: 1148,
y: 1200
}, {
x: 1024,
y: 1500
}];
for (var i = 0; i < 3; i++) {
var teacup = game.addChild(new TeaCup());
teacup.x = cupPositions[i].x;
teacup.y = cupPositions[i].y;
teacups.push(teacup);
}
// Create cakes on table
var cakePositions = [{
x: 800,
y: 1350
}, {
x: 1248,
y: 1350
}, {
x: 1024,
y: 1200
}];
for (var i = 0; i < 3; i++) {
var cake = game.addChild(new Cake());
cake.x = cakePositions[i].x;
cake.y = cakePositions[i].y;
cakes.push(cake);
}
// Create gift boxes around the scene
var giftPositions = [{
x: 300,
y: 1600
}, {
x: 1748,
y: 1600
}, {
x: 1024,
y: 2200
}, {
x: 200,
y: 1000
}, {
x: 1848,
y: 1000
}];
for (var i = 0; i < 5; i++) {
var giftbox = game.addChild(new GiftBox());
giftbox.x = giftPositions[i].x;
giftbox.y = giftPositions[i].y;
giftboxes.push(giftbox);
}
// Add title text
var titleText = new Text2('Magical Tea Party', {
size: 120,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 100;
game.update = function () {
// Game runs continuously without win/lose conditions
// All interactions are handled by individual object event handlers
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Cake = Container.expand(function () {
var self = Container.call(this);
var cakeGraphics = self.attachAsset('cake', {
anchorX: 0.5,
anchorY: 0.5
});
self.eaten = false;
self.down = function (x, y, obj) {
if (self.eaten) return;
self.eaten = true;
LK.getSound('eat').play();
tween(cakeGraphics, {
scaleX: 0,
scaleY: 0,
alpha: 0
}, {
duration: 500,
easing: tween.easeIn,
onFinish: function onFinish() {
self.eaten = false;
cakeGraphics.scaleX = 1;
cakeGraphics.scaleY = 1;
cakeGraphics.alpha = 1;
}
});
// Make nearest character eat
var nearestCharacter = null;
var minDistance = Infinity;
for (var i = 0; i < characters.length; i++) {
var character = characters[i];
var distance = Math.sqrt(Math.pow(character.x - self.x, 2) + Math.pow(character.y - self.y, 2));
if (distance < minDistance) {
minDistance = distance;
nearestCharacter = character;
}
}
if (nearestCharacter) {
nearestCharacter.playEatAnimation();
}
};
return self;
});
var Character = Container.expand(function (characterColor, name) {
var self = Container.call(this);
var body = self.attachAsset('character', {
anchorX: 0.5,
anchorY: 1,
color: characterColor
});
self.name = name;
self.isEating = false;
self.playEatAnimation = function () {
if (self.isEating) return;
self.isEating = true;
tween(body, {
scaleY: 0.8
}, {
duration: 200,
easing: tween.easeInOut
});
tween(body, {
scaleY: 1
}, {
duration: 200,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.isEating = false;
}
});
LK.getSound('cheer').play();
};
return self;
});
var GiftBox = Container.expand(function () {
var self = Container.call(this);
var boxGraphics = self.attachAsset('giftbox', {
anchorX: 0.5,
anchorY: 0.5
});
self.opened = false;
self.down = function (x, y, obj) {
if (self.opened) return;
self.opened = true;
LK.getSound('unwrap').play();
// Box opening animation
tween(boxGraphics, {
scaleY: 0.1,
alpha: 0.5
}, {
duration: 300,
easing: tween.easeIn,
onFinish: function onFinish() {
// Create random gift
var giftTypes = ['horn', 'kazoo', 'doll'];
var randomGift = giftTypes[Math.floor(Math.random() * giftTypes.length)];
var gift = self.addChild(LK.getAsset(randomGift, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0,
scaleY: 0
}));
// Gift pop-out animation
tween(gift, {
scaleX: 1,
scaleY: 1
}, {
duration: 500,
easing: tween.bounceOut
});
// Reset box after delay
LK.setTimeout(function () {
gift.destroy();
self.opened = false;
boxGraphics.scaleY = 1;
boxGraphics.alpha = 1;
}, 3000);
}
});
};
return self;
});
var TeaCup = Container.expand(function () {
var self = Container.call(this);
var cupGraphics = self.attachAsset('teacup', {
anchorX: 0.5,
anchorY: 0.5
});
self.filled = false;
self.tea = null;
self.steamParticles = [];
self.fill = function () {
if (self.filled) return;
self.filled = true;
// Add tea inside cup
self.tea = self.addChild(LK.getAsset('teacup', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.3,
y: 10,
tint: 0x8B4513
}));
// Add steam effect
for (var i = 0; i < 3; i++) {
var steam = self.addChild(LK.getAsset('steam', {
anchorX: 0.5,
anchorY: 0.5,
x: (i - 1) * 15,
y: -20,
alpha: 0.7
}));
self.steamParticles.push(steam);
// Animate steam
var _animateSteam = function animateSteam(steamObj) {
tween(steamObj, {
y: steamObj.y - 50,
alpha: 0
}, {
duration: 2000,
easing: tween.easeOut,
onFinish: function onFinish() {
steamObj.y = -20;
steamObj.alpha = 0.7;
_animateSteam(steamObj);
}
});
};
_animateSteam(steam);
}
};
return self;
});
var TeaPot = Container.expand(function () {
var self = Container.call(this);
var potGraphics = self.attachAsset('teapot', {
anchorX: 0.5,
anchorY: 0.5
});
self.pouring = false;
self.down = function (x, y, obj) {
if (self.pouring) return;
self.pouring = true;
LK.getSound('pour').play();
tween(potGraphics, {
rotation: 0.5
}, {
duration: 300,
easing: tween.easeOut
});
tween(potGraphics, {
rotation: 0
}, {
duration: 300,
easing: tween.easeIn,
onFinish: function onFinish() {
self.pouring = false;
}
});
// Fill nearby empty cups
for (var i = 0; i < teacups.length; i++) {
var cup = teacups[i];
if (!cup.filled) {
cup.fill();
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var characters = [];
var cakes = [];
var teacups = [];
var giftboxes = [];
// Create table
var table = game.addChild(LK.getAsset('table', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1400
}));
var tablecloth = game.addChild(LK.getAsset('tablecloth', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1400
}));
// Create chairs and characters
var chairPositions = [{
x: 1024,
y: 1800
},
// Bottom
{
x: 600,
y: 1200
},
// Left
{
x: 1448,
y: 1200
} // Right
];
var characterColors = [0xFF69B4, 0x98FB98, 0xFFB6C1];
var characterNames = ['Blossom', 'Bubbles', 'Buttercup'];
for (var i = 0; i < 3; i++) {
var chair = game.addChild(LK.getAsset('chair', {
anchorX: 0.5,
anchorY: 0.5,
x: chairPositions[i].x,
y: chairPositions[i].y
}));
var character = game.addChild(new Character(characterColors[i], characterNames[i]));
character.x = chairPositions[i].x;
character.y = chairPositions[i].y - 50;
characters.push(character);
}
// Create teapot at center of table
var teapot = game.addChild(new TeaPot());
teapot.x = 1024;
teapot.y = 1300;
// Create teacups around table
var cupPositions = [{
x: 900,
y: 1200
}, {
x: 1148,
y: 1200
}, {
x: 1024,
y: 1500
}];
for (var i = 0; i < 3; i++) {
var teacup = game.addChild(new TeaCup());
teacup.x = cupPositions[i].x;
teacup.y = cupPositions[i].y;
teacups.push(teacup);
}
// Create cakes on table
var cakePositions = [{
x: 800,
y: 1350
}, {
x: 1248,
y: 1350
}, {
x: 1024,
y: 1200
}];
for (var i = 0; i < 3; i++) {
var cake = game.addChild(new Cake());
cake.x = cakePositions[i].x;
cake.y = cakePositions[i].y;
cakes.push(cake);
}
// Create gift boxes around the scene
var giftPositions = [{
x: 300,
y: 1600
}, {
x: 1748,
y: 1600
}, {
x: 1024,
y: 2200
}, {
x: 200,
y: 1000
}, {
x: 1848,
y: 1000
}];
for (var i = 0; i < 5; i++) {
var giftbox = game.addChild(new GiftBox());
giftbox.x = giftPositions[i].x;
giftbox.y = giftPositions[i].y;
giftboxes.push(giftbox);
}
// Add title text
var titleText = new Text2('Magical Tea Party', {
size: 120,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0);
LK.gui.top.addChild(titleText);
titleText.y = 100;
game.update = function () {
// Game runs continuously without win/lose conditions
// All interactions are handled by individual object event handlers
};