/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var AnimalBlock = Container.expand(function (animalType) {
var self = Container.call(this);
// Store animal type
self.animalType = animalType;
// Create block graphics based on animal type
var blockColors = {
'pango': 0x4A90E2,
'squirrel': 0x8B4513,
'piggy': 0xFFB6C1,
'fox': 0xFF6347,
'rabbit': 0xF5F5DC
};
var blockAsset = animalType + 'Block';
var blockGraphics = self.attachAsset(blockAsset, {
anchorX: 0.5,
anchorY: 0.5
});
// Add 3D effect with shadow
var shadowBlock = self.attachAsset(blockAsset, {
anchorX: 0.5,
anchorY: 0.5,
x: 10,
y: 10,
alpha: 0.3,
tint: 0x000000
});
// Animation state
self.isAnimating = false;
self.originalScale = 1.0;
// Tap handler
self.down = function (x, y, obj) {
if (self.isAnimating) return;
self.isAnimating = true;
// Play tap sound
LK.getSound('blockTap').play();
// Bounce animation
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: self.originalScale,
scaleY: self.originalScale
}, {
duration: 150,
easing: tween.bounceOut,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
}
});
// Color flash effect
var originalTint = blockGraphics.tint;
blockGraphics.tint = 0xFFFFFF;
tween(blockGraphics, {
tint: originalTint
}, {
duration: 200,
easing: tween.easeOut
});
// Trigger score increase
LK.setScore(LK.getScore() + 10);
updateScore();
// Play chime sound randomly
if (Math.random() < 0.3) {
LK.getSound('chime').play();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game variables
var blocks = [];
var animalTypes = ['pango', 'squirrel', 'piggy', 'fox', 'rabbit'];
var scoreText;
// Initialize score display
function setupScore() {
scoreText = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
}
// Update score display
function updateScore() {
scoreText.setText('Score: ' + LK.getScore());
}
// Create and position blocks
function createBlocks() {
var gridCols = 3;
var gridRows = Math.ceil(animalTypes.length / gridCols);
var blockSpacing = 400;
var startX = (2048 - (gridCols - 1) * blockSpacing) / 2;
var startY = (2732 - (gridRows - 1) * blockSpacing) / 2;
for (var i = 0; i < animalTypes.length; i++) {
var col = i % gridCols;
var row = Math.floor(i / gridCols);
var block = new AnimalBlock(animalTypes[i]);
block.x = startX + col * blockSpacing;
block.y = startY + row * blockSpacing;
blocks.push(block);
game.addChild(block);
// Add entrance animation
block.alpha = 0;
block.scaleX = 0.1;
block.scaleY = 0.1;
tween(block, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 500 + i * 100,
easing: tween.bounceOut
});
}
}
// Add floating animation to blocks
function addFloatingAnimation() {
for (var i = 0; i < blocks.length; i++) {
var block = blocks[i];
var delay = i * 200;
var originalY = block.y;
// Create subtle floating motion
LK.setTimeout(function (b, origY) {
return function () {
floatBlock(b, origY);
};
}(block, originalY), delay);
}
}
function floatBlock(block, originalY) {
tween(block, {
y: originalY - 20
}, {
duration: 2000 + Math.random() * 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(block, {
y: originalY + 10
}, {
duration: 2000 + Math.random() * 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
floatBlock(block, originalY);
}
});
}
});
}
// Game initialization
setupScore();
createBlocks();
// Start floating animations after blocks are created
LK.setTimeout(function () {
addFloatingAnimation();
}, 1000);
// Play background music
LK.playMusic('backgroundMusic');
// Game update loop
game.update = function () {
// Check for win condition (optional - could be score-based)
if (LK.getScore() >= 500) {
LK.showYouWin();
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var AnimalBlock = Container.expand(function (animalType) {
var self = Container.call(this);
// Store animal type
self.animalType = animalType;
// Create block graphics based on animal type
var blockColors = {
'pango': 0x4A90E2,
'squirrel': 0x8B4513,
'piggy': 0xFFB6C1,
'fox': 0xFF6347,
'rabbit': 0xF5F5DC
};
var blockAsset = animalType + 'Block';
var blockGraphics = self.attachAsset(blockAsset, {
anchorX: 0.5,
anchorY: 0.5
});
// Add 3D effect with shadow
var shadowBlock = self.attachAsset(blockAsset, {
anchorX: 0.5,
anchorY: 0.5,
x: 10,
y: 10,
alpha: 0.3,
tint: 0x000000
});
// Animation state
self.isAnimating = false;
self.originalScale = 1.0;
// Tap handler
self.down = function (x, y, obj) {
if (self.isAnimating) return;
self.isAnimating = true;
// Play tap sound
LK.getSound('blockTap').play();
// Bounce animation
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: self.originalScale,
scaleY: self.originalScale
}, {
duration: 150,
easing: tween.bounceOut,
onFinish: function onFinish() {
self.isAnimating = false;
}
});
}
});
// Color flash effect
var originalTint = blockGraphics.tint;
blockGraphics.tint = 0xFFFFFF;
tween(blockGraphics, {
tint: originalTint
}, {
duration: 200,
easing: tween.easeOut
});
// Trigger score increase
LK.setScore(LK.getScore() + 10);
updateScore();
// Play chime sound randomly
if (Math.random() < 0.3) {
LK.getSound('chime').play();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game variables
var blocks = [];
var animalTypes = ['pango', 'squirrel', 'piggy', 'fox', 'rabbit'];
var scoreText;
// Initialize score display
function setupScore() {
scoreText = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
}
// Update score display
function updateScore() {
scoreText.setText('Score: ' + LK.getScore());
}
// Create and position blocks
function createBlocks() {
var gridCols = 3;
var gridRows = Math.ceil(animalTypes.length / gridCols);
var blockSpacing = 400;
var startX = (2048 - (gridCols - 1) * blockSpacing) / 2;
var startY = (2732 - (gridRows - 1) * blockSpacing) / 2;
for (var i = 0; i < animalTypes.length; i++) {
var col = i % gridCols;
var row = Math.floor(i / gridCols);
var block = new AnimalBlock(animalTypes[i]);
block.x = startX + col * blockSpacing;
block.y = startY + row * blockSpacing;
blocks.push(block);
game.addChild(block);
// Add entrance animation
block.alpha = 0;
block.scaleX = 0.1;
block.scaleY = 0.1;
tween(block, {
alpha: 1,
scaleX: 1,
scaleY: 1
}, {
duration: 500 + i * 100,
easing: tween.bounceOut
});
}
}
// Add floating animation to blocks
function addFloatingAnimation() {
for (var i = 0; i < blocks.length; i++) {
var block = blocks[i];
var delay = i * 200;
var originalY = block.y;
// Create subtle floating motion
LK.setTimeout(function (b, origY) {
return function () {
floatBlock(b, origY);
};
}(block, originalY), delay);
}
}
function floatBlock(block, originalY) {
tween(block, {
y: originalY - 20
}, {
duration: 2000 + Math.random() * 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(block, {
y: originalY + 10
}, {
duration: 2000 + Math.random() * 1000,
easing: tween.easeInOut,
onFinish: function onFinish() {
floatBlock(block, originalY);
}
});
}
});
}
// Game initialization
setupScore();
createBlocks();
// Start floating animations after blocks are created
LK.setTimeout(function () {
addFloatingAnimation();
}, 1000);
// Play background music
LK.playMusic('backgroundMusic');
// Game update loop
game.update = function () {
// Check for win condition (optional - could be score-based)
if (LK.getScore() >= 500) {
LK.showYouWin();
}
};