/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var MysteryBox = Container.expand(function () {
var self = Container.call(this);
self.state = 'closed'; // 'closed', 'shaking', 'opened'
self.toyType = null;
self.toy = null;
// Create box graphics
var boxGraphics = self.attachAsset('box', {
anchorX: 0.5,
anchorY: 0.5
});
var lidGraphics = self.attachAsset('boxLid', {
anchorX: 0.5,
anchorY: 1,
y: -150
});
self.boxGraphics = boxGraphics;
self.lidGraphics = lidGraphics;
self.shake = function () {
if (self.state !== 'closed') return;
self.state = 'shaking';
LK.getSound('shake').play();
// Shake animation
var originalX = self.x;
var shakeAmount = 10;
var shakeCount = 0;
var maxShakes = 8;
function doShake() {
if (shakeCount < maxShakes) {
self.x = originalX + (Math.random() - 0.5) * shakeAmount;
shakeCount++;
LK.setTimeout(doShake, 100);
} else {
self.x = originalX;
}
}
doShake();
};
self.open = function () {
if (self.state !== 'shaking') return;
self.state = 'opened';
LK.getSound('open').play();
// Animate lid opening
tween(self.lidGraphics, {
y: -250,
rotation: -0.5
}, {
duration: 500
});
// Create random toy
var toyTypes = ['cat', 'frog', 'monkey', 'partyBlower', 'jelly', 'radio'];
self.toyType = toyTypes[Math.floor(Math.random() * toyTypes.length)];
LK.setTimeout(function () {
self.createToy();
}, 300);
};
self.createToy = function () {
if (self.toy) return;
self.toy = self.addChild(new Toy(self.toyType));
self.toy.x = 0;
self.toy.y = 0;
};
self.down = function (x, y, obj) {
if (self.state === 'closed') {
self.shake();
} else if (self.state === 'shaking') {
self.open();
}
};
return self;
});
var Toy = Container.expand(function (toyType) {
var self = Container.call(this);
self.toyType = toyType;
self.isAnimating = false;
// Create toy graphics based on type
var toyGraphics = self.attachAsset(toyType, {
anchorX: 0.5,
anchorY: 0.5
});
self.toyGraphics = toyGraphics;
// Appear animation
toyGraphics.alpha = 0;
toyGraphics.scaleX = 0.1;
toyGraphics.scaleY = 0.1;
tween(toyGraphics, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.bounceOut
});
self.interact = function () {
if (self.isAnimating) return;
self.isAnimating = true;
switch (self.toyType) {
case 'cat':
LK.getSound('meow').play();
tween(self.toyGraphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200
});
tween(self.toyGraphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'frog':
LK.getSound('ribbit').play();
var originalY = self.toyGraphics.y;
tween(self.toyGraphics, {
y: originalY - 50
}, {
duration: 300,
easing: tween.easeOut
});
tween(self.toyGraphics, {
y: originalY
}, {
duration: 300,
easing: tween.bounceOut,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'monkey':
LK.getSound('monkey_sound').play();
var originalRotation = self.toyGraphics.rotation;
tween(self.toyGraphics, {
rotation: originalRotation + Math.PI * 2
}, {
duration: 800,
onFinish: function onFinish() {
self.toyGraphics.rotation = originalRotation;
self.isAnimating = false;
}
});
break;
case 'partyBlower':
LK.getSound('party_sound').play();
tween(self.toyGraphics, {
scaleX: 1.5
}, {
duration: 400
});
tween(self.toyGraphics, {
scaleX: 1
}, {
duration: 400,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'jelly':
LK.getSound('jelly_sound').play();
tween(self.toyGraphics, {
scaleY: 0.7,
scaleX: 1.2
}, {
duration: 200
});
tween(self.toyGraphics, {
scaleY: 1.2,
scaleX: 0.8
}, {
duration: 200
});
tween(self.toyGraphics, {
scaleY: 1,
scaleX: 1
}, {
duration: 200,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'radio':
LK.getSound('radio_sound').play();
LK.effects.flashObject(self.toyGraphics, 0xFFFF00, 1000);
LK.setTimeout(function () {
self.isAnimating = false;
}, 1000);
break;
}
};
self.down = function (x, y, obj) {
self.interact();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var boxes = [];
var boxPositions = [{
x: 400,
y: 500
}, {
x: 1000,
y: 400
}, {
x: 1600,
y: 600
}, {
x: 500,
y: 1200
}, {
x: 1200,
y: 1300
}, {
x: 1700,
y: 1100
}];
// Create title text
var titleText = new Text2('Surprise Box Adventure', {
size: 80,
fill: 0x2F4F4F
});
titleText.anchor.set(0.5, 0);
titleText.x = 1024;
titleText.y = 100;
game.addChild(titleText);
// Create instruction text
var instructionText = new Text2('Tap boxes to shake and open them!', {
size: 50,
fill: 0x4682B4
});
instructionText.anchor.set(0.5, 0);
instructionText.x = 1024;
instructionText.y = 200;
game.addChild(instructionText);
// Create mystery boxes
for (var i = 0; i < 6; i++) {
var box = new MysteryBox();
box.x = boxPositions[i].x;
box.y = boxPositions[i].y;
boxes.push(box);
game.addChild(box);
}
game.update = function () {
// Game runs continuously, no specific update logic needed for this game
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var MysteryBox = Container.expand(function () {
var self = Container.call(this);
self.state = 'closed'; // 'closed', 'shaking', 'opened'
self.toyType = null;
self.toy = null;
// Create box graphics
var boxGraphics = self.attachAsset('box', {
anchorX: 0.5,
anchorY: 0.5
});
var lidGraphics = self.attachAsset('boxLid', {
anchorX: 0.5,
anchorY: 1,
y: -150
});
self.boxGraphics = boxGraphics;
self.lidGraphics = lidGraphics;
self.shake = function () {
if (self.state !== 'closed') return;
self.state = 'shaking';
LK.getSound('shake').play();
// Shake animation
var originalX = self.x;
var shakeAmount = 10;
var shakeCount = 0;
var maxShakes = 8;
function doShake() {
if (shakeCount < maxShakes) {
self.x = originalX + (Math.random() - 0.5) * shakeAmount;
shakeCount++;
LK.setTimeout(doShake, 100);
} else {
self.x = originalX;
}
}
doShake();
};
self.open = function () {
if (self.state !== 'shaking') return;
self.state = 'opened';
LK.getSound('open').play();
// Animate lid opening
tween(self.lidGraphics, {
y: -250,
rotation: -0.5
}, {
duration: 500
});
// Create random toy
var toyTypes = ['cat', 'frog', 'monkey', 'partyBlower', 'jelly', 'radio'];
self.toyType = toyTypes[Math.floor(Math.random() * toyTypes.length)];
LK.setTimeout(function () {
self.createToy();
}, 300);
};
self.createToy = function () {
if (self.toy) return;
self.toy = self.addChild(new Toy(self.toyType));
self.toy.x = 0;
self.toy.y = 0;
};
self.down = function (x, y, obj) {
if (self.state === 'closed') {
self.shake();
} else if (self.state === 'shaking') {
self.open();
}
};
return self;
});
var Toy = Container.expand(function (toyType) {
var self = Container.call(this);
self.toyType = toyType;
self.isAnimating = false;
// Create toy graphics based on type
var toyGraphics = self.attachAsset(toyType, {
anchorX: 0.5,
anchorY: 0.5
});
self.toyGraphics = toyGraphics;
// Appear animation
toyGraphics.alpha = 0;
toyGraphics.scaleX = 0.1;
toyGraphics.scaleY = 0.1;
tween(toyGraphics, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 600,
easing: tween.bounceOut
});
self.interact = function () {
if (self.isAnimating) return;
self.isAnimating = true;
switch (self.toyType) {
case 'cat':
LK.getSound('meow').play();
tween(self.toyGraphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200
});
tween(self.toyGraphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 200,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'frog':
LK.getSound('ribbit').play();
var originalY = self.toyGraphics.y;
tween(self.toyGraphics, {
y: originalY - 50
}, {
duration: 300,
easing: tween.easeOut
});
tween(self.toyGraphics, {
y: originalY
}, {
duration: 300,
easing: tween.bounceOut,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'monkey':
LK.getSound('monkey_sound').play();
var originalRotation = self.toyGraphics.rotation;
tween(self.toyGraphics, {
rotation: originalRotation + Math.PI * 2
}, {
duration: 800,
onFinish: function onFinish() {
self.toyGraphics.rotation = originalRotation;
self.isAnimating = false;
}
});
break;
case 'partyBlower':
LK.getSound('party_sound').play();
tween(self.toyGraphics, {
scaleX: 1.5
}, {
duration: 400
});
tween(self.toyGraphics, {
scaleX: 1
}, {
duration: 400,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'jelly':
LK.getSound('jelly_sound').play();
tween(self.toyGraphics, {
scaleY: 0.7,
scaleX: 1.2
}, {
duration: 200
});
tween(self.toyGraphics, {
scaleY: 1.2,
scaleX: 0.8
}, {
duration: 200
});
tween(self.toyGraphics, {
scaleY: 1,
scaleX: 1
}, {
duration: 200,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
break;
case 'radio':
LK.getSound('radio_sound').play();
LK.effects.flashObject(self.toyGraphics, 0xFFFF00, 1000);
LK.setTimeout(function () {
self.isAnimating = false;
}, 1000);
break;
}
};
self.down = function (x, y, obj) {
self.interact();
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var boxes = [];
var boxPositions = [{
x: 400,
y: 500
}, {
x: 1000,
y: 400
}, {
x: 1600,
y: 600
}, {
x: 500,
y: 1200
}, {
x: 1200,
y: 1300
}, {
x: 1700,
y: 1100
}];
// Create title text
var titleText = new Text2('Surprise Box Adventure', {
size: 80,
fill: 0x2F4F4F
});
titleText.anchor.set(0.5, 0);
titleText.x = 1024;
titleText.y = 100;
game.addChild(titleText);
// Create instruction text
var instructionText = new Text2('Tap boxes to shake and open them!', {
size: 50,
fill: 0x4682B4
});
instructionText.anchor.set(0.5, 0);
instructionText.x = 1024;
instructionText.y = 200;
game.addChild(instructionText);
// Create mystery boxes
for (var i = 0; i < 6; i++) {
var box = new MysteryBox();
box.x = boxPositions[i].x;
box.y = boxPositions[i].y;
boxes.push(box);
game.addChild(box);
}
game.update = function () {
// Game runs continuously, no specific update logic needed for this game
};