/**** * 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();
}
};