/**** * Classes ****/ // Flying Box Class var FlyingBox = Container.expand(function () { var self = Container.call(this); // Placeholder for the flying box graphics var boxGraphics = self.attachAsset('cat', { anchorX: 0.5, anchorY: 0.5 }); // Placeholder for box position self.x = Math.random() * 2048; self.y = Math.random() * 2732; // Placeholder for box speed self.speedX = Math.random() * 10 - 5; self.speedY = Math.random() * 10 - 5; // Method for updating the box position self._update_migrated = function () { self.x += self.speedX; self.y += self.speedY; // Bounce the box off the edges of the screen if (self.x < 0 || self.x > 2048) { self.speedX *= -1; } if (self.y < 0 || self.y > 2732) { self.speedY *= -1; } // Avoid obstacles for (var i = 0; i < obstacles.length; i++) { if (self.intersects(obstacles[i])) { self.speedX *= -1; self.speedY *= -1; } } }; }); // Food Class var Food = Container.expand(function () { var self = Container.call(this); // Placeholder for the food graphics var foodGraphics = self.attachAsset('puzzlePiece', { anchorX: 0.5, anchorY: 0.5 }); }); // Obstacle Class var Obstacle = Container.expand(function () { var self = Container.call(this); // Placeholder for the obstacle graphics var obstacleGraphics = self.attachAsset('cell', { anchorX: 0.5, anchorY: 0.5 }); }); // Puzzle Board Class var PuzzleBoard = Container.expand(function () { var self = Container.call(this); // Placeholder for the puzzle board graphics var boardGraphics = self.attachAsset('puzzleBoard', { anchorX: 0.5, anchorY: 0.5 }); // Placeholder for storing puzzle pieces self.pieces = []; // Placeholder for initializing puzzle pieces self.initPieces = function () { // Initialize puzzle pieces here }; // Placeholder for checking if the puzzle is solved self.isSolved = function () { return self.pieces.every(function (piece) { return piece.isInCorrectPosition(); }); }; }); // Assets will be automatically created based on usage in the code. // Puzzle Piece Class var PuzzlePiece = Container.expand(function () { var self = Container.call(this); // Placeholder for the puzzle piece graphics var pieceGraphics = self.attachAsset('puzzlePiece', { anchorX: 0.5, anchorY: 0.5 }); // Placeholder for piece position self.correctX = 0; self.correctY = 0; // Placeholder for checking if the piece is in the correct position self.isInCorrectPosition = function () { return self.x === self.correctX && self.y === self.correctY; }; }); // Restore Area Class var RestoreArea = Container.expand(function () { var self = Container.call(this); // Placeholder for the restore area graphics var restoreAreaGraphics = self.attachAsset('house', { anchorX: 0.5, anchorY: 0.5 }); }); // Snow Particle Class var SnowParticle = Container.expand(function () { var self = Container.call(this); // Create a simple white circle for the snow particle var particleGraphics = self.attachAsset('snowParticle', { anchorX: 0.5, anchorY: 0.5 }); // Set the initial position of the snow particle to a random x and a y off the top of the screen self.x = Math.random() * 2048; self.y = -100; // Set the speed of the snow particle to a random value for a more natural look self.speedY = Math.random() * 5 + 1; // Update the position of the snow particle every frame self._update_migrated = function () { self.y += self.speedY; // If the snow particle has moved off the bottom of the screen, reset its position to the top if (self.y > 2732) { self.y = -100; self.x = Math.random() * 2048; } }; }); // Tree Class var Tree = Container.expand(function () { var self = Container.call(this); // Placeholder for the tree graphics var treeGraphics = self.attachAsset('house', { anchorX: 0.5, anchorY: 0.5 }); }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ // Initialize flying boxes var flyingBoxes = []; for (var i = 0; i < 5; i++) { var flyingBox = game.addChild(new FlyingBox()); flyingBoxes.push(flyingBox); } // Initialize food var foods = []; for (var i = 0; i < 5; i++) { var food = game.addChild(new Food()); food.x = Math.random() * 2048; food.y = Math.random() * 2732; foods.push(food); } // Initialize restore areas var restoreAreas = []; for (var i = 0; i < 50; i++) { var restoreArea = game.addChild(new RestoreArea()); restoreArea.x = Math.random() * 2048; restoreArea.y = Math.random() * 2732; restoreAreas.push(restoreArea); } // Initialize obstacles var obstacles = []; for (var i = 0; i < 10; i++) { var obstacle = game.addChild(new Obstacle()); obstacle.x = Math.random() * 2048; obstacle.y = Math.random() * 2732; obstacles.push(obstacle); } // Initialize snow particles var snowParticles = []; for (var i = 0; i < 100; i++) { var snowParticle = game.addChild(new SnowParticle()); snowParticles.push(snowParticle); } var puzzleBoard = game.addChild(new PuzzleBoard()); puzzleBoard.initPieces(); // Center the puzzle board on the screen puzzleBoard.x = 2048 / 2 - puzzleBoard.width / 2; puzzleBoard.y = 2732 / 2 - puzzleBoard.height / 2; // Placeholder for the currently dragged puzzle piece var draggedPiece = null; // Event listener for dragging puzzle pieces game.on('down', function (x, y, obj) { var pos = game.toLocal(obj.global); // Check if a puzzle piece was clicked and set it as the dragged piece puzzleBoard.pieces.forEach(function (piece) { if (piece.containsPoint(pos)) { draggedPiece = piece; } }); }); game.on('move', function (x, y, obj) { if (draggedPiece) { var pos = game.toLocal(obj.global); draggedPiece.x = pos.x; draggedPiece.y = pos.y; } }); game.on('up', function (x, y, obj) { // Check if the dragged piece is in the correct position if (draggedPiece && draggedPiece.isInCorrectPosition()) { // Snap to correct position draggedPiece.x = draggedPiece.correctX; draggedPiece.y = draggedPiece.correctY; } draggedPiece = null; // Check if the puzzle is solved if (puzzleBoard.isSolved()) { LK.showGameOver(); // Show game over when the puzzle is solved } }); // Update function for game logic LK.on('tick', function () { // Update the flying boxes positions for (var i = 0; i < flyingBoxes.length; i++) { flyingBoxes[i]._update_migrated(); } // Update the snow particles for (var i = 0; i < snowParticles.length; i++) { snowParticles[i]._update_migrated(); } // Check if any of the flying boxes intersects with the puzzle board for (var i = 0; i < flyingBoxes.length; i++) { if (flyingBoxes[i].intersects(puzzleBoard)) { // Push the puzzle board in the direction of the flying box's movement puzzleBoard.x += flyingBoxes[i].speedX; puzzleBoard.y += flyingBoxes[i].speedY; } } // Check if any of the flying boxes intersects with the food for (var i = 0; i < flyingBoxes.length; i++) { for (var j = 0; j < foods.length; j++) { if (flyingBoxes[i].intersects(foods[j])) { // Double the size of the box flyingBoxes[i].scaleX *= 2; flyingBoxes[i].scaleY *= 2; // Increase the speed of the box flyingBoxes[i].speedX *= 1.5; flyingBoxes[i].speedY *= 1.5; // Remove the food from the game game.removeChild(foods[j]); foods.splice(j, 1); // Generate 5 trees for (var k = 0; k < 5; k++) { var tree = game.addChild(new Tree()); tree.x = Math.random() * 2048; tree.y = Math.random() * 2732; } break; } } } // Check if any of the flying boxes intersects with the restore area for (var i = 0; i < flyingBoxes.length; i++) { for (var j = 0; j < restoreAreas.length; j++) { if (flyingBoxes[i].intersects(restoreAreas[j])) { // Restore the speed of the box flyingBoxes[i].speedX = Math.random() * 10 - 5; flyingBoxes[i].speedY = Math.random() * 10 - 5; // Remove the restore area from the game game.removeChild(restoreAreas[j]); restoreAreas.splice(j, 1); break; } } } // Create a timer to generate food over time if (LK.ticks % 120 == 0 && LK.ticks <= 600) { // every 2 seconds for the first 10 seconds var food = game.addChild(new Food()); food.x = Math.random() * 2048; food.y = Math.random() * 2732; foods.push(food); } });
/****
* Classes
****/
// Flying Box Class
var FlyingBox = Container.expand(function () {
var self = Container.call(this);
// Placeholder for the flying box graphics
var boxGraphics = self.attachAsset('cat', {
anchorX: 0.5,
anchorY: 0.5
});
// Placeholder for box position
self.x = Math.random() * 2048;
self.y = Math.random() * 2732;
// Placeholder for box speed
self.speedX = Math.random() * 10 - 5;
self.speedY = Math.random() * 10 - 5;
// Method for updating the box position
self._update_migrated = function () {
self.x += self.speedX;
self.y += self.speedY;
// Bounce the box off the edges of the screen
if (self.x < 0 || self.x > 2048) {
self.speedX *= -1;
}
if (self.y < 0 || self.y > 2732) {
self.speedY *= -1;
}
// Avoid obstacles
for (var i = 0; i < obstacles.length; i++) {
if (self.intersects(obstacles[i])) {
self.speedX *= -1;
self.speedY *= -1;
}
}
};
});
// Food Class
var Food = Container.expand(function () {
var self = Container.call(this);
// Placeholder for the food graphics
var foodGraphics = self.attachAsset('puzzlePiece', {
anchorX: 0.5,
anchorY: 0.5
});
});
// Obstacle Class
var Obstacle = Container.expand(function () {
var self = Container.call(this);
// Placeholder for the obstacle graphics
var obstacleGraphics = self.attachAsset('cell', {
anchorX: 0.5,
anchorY: 0.5
});
});
// Puzzle Board Class
var PuzzleBoard = Container.expand(function () {
var self = Container.call(this);
// Placeholder for the puzzle board graphics
var boardGraphics = self.attachAsset('puzzleBoard', {
anchorX: 0.5,
anchorY: 0.5
});
// Placeholder for storing puzzle pieces
self.pieces = [];
// Placeholder for initializing puzzle pieces
self.initPieces = function () {
// Initialize puzzle pieces here
};
// Placeholder for checking if the puzzle is solved
self.isSolved = function () {
return self.pieces.every(function (piece) {
return piece.isInCorrectPosition();
});
};
});
// Assets will be automatically created based on usage in the code.
// Puzzle Piece Class
var PuzzlePiece = Container.expand(function () {
var self = Container.call(this);
// Placeholder for the puzzle piece graphics
var pieceGraphics = self.attachAsset('puzzlePiece', {
anchorX: 0.5,
anchorY: 0.5
});
// Placeholder for piece position
self.correctX = 0;
self.correctY = 0;
// Placeholder for checking if the piece is in the correct position
self.isInCorrectPosition = function () {
return self.x === self.correctX && self.y === self.correctY;
};
});
// Restore Area Class
var RestoreArea = Container.expand(function () {
var self = Container.call(this);
// Placeholder for the restore area graphics
var restoreAreaGraphics = self.attachAsset('house', {
anchorX: 0.5,
anchorY: 0.5
});
});
// Snow Particle Class
var SnowParticle = Container.expand(function () {
var self = Container.call(this);
// Create a simple white circle for the snow particle
var particleGraphics = self.attachAsset('snowParticle', {
anchorX: 0.5,
anchorY: 0.5
});
// Set the initial position of the snow particle to a random x and a y off the top of the screen
self.x = Math.random() * 2048;
self.y = -100;
// Set the speed of the snow particle to a random value for a more natural look
self.speedY = Math.random() * 5 + 1;
// Update the position of the snow particle every frame
self._update_migrated = function () {
self.y += self.speedY;
// If the snow particle has moved off the bottom of the screen, reset its position to the top
if (self.y > 2732) {
self.y = -100;
self.x = Math.random() * 2048;
}
};
});
// Tree Class
var Tree = Container.expand(function () {
var self = Container.call(this);
// Placeholder for the tree graphics
var treeGraphics = self.attachAsset('house', {
anchorX: 0.5,
anchorY: 0.5
});
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
// Initialize flying boxes
var flyingBoxes = [];
for (var i = 0; i < 5; i++) {
var flyingBox = game.addChild(new FlyingBox());
flyingBoxes.push(flyingBox);
}
// Initialize food
var foods = [];
for (var i = 0; i < 5; i++) {
var food = game.addChild(new Food());
food.x = Math.random() * 2048;
food.y = Math.random() * 2732;
foods.push(food);
}
// Initialize restore areas
var restoreAreas = [];
for (var i = 0; i < 50; i++) {
var restoreArea = game.addChild(new RestoreArea());
restoreArea.x = Math.random() * 2048;
restoreArea.y = Math.random() * 2732;
restoreAreas.push(restoreArea);
}
// Initialize obstacles
var obstacles = [];
for (var i = 0; i < 10; i++) {
var obstacle = game.addChild(new Obstacle());
obstacle.x = Math.random() * 2048;
obstacle.y = Math.random() * 2732;
obstacles.push(obstacle);
}
// Initialize snow particles
var snowParticles = [];
for (var i = 0; i < 100; i++) {
var snowParticle = game.addChild(new SnowParticle());
snowParticles.push(snowParticle);
}
var puzzleBoard = game.addChild(new PuzzleBoard());
puzzleBoard.initPieces();
// Center the puzzle board on the screen
puzzleBoard.x = 2048 / 2 - puzzleBoard.width / 2;
puzzleBoard.y = 2732 / 2 - puzzleBoard.height / 2;
// Placeholder for the currently dragged puzzle piece
var draggedPiece = null;
// Event listener for dragging puzzle pieces
game.on('down', function (x, y, obj) {
var pos = game.toLocal(obj.global);
// Check if a puzzle piece was clicked and set it as the dragged piece
puzzleBoard.pieces.forEach(function (piece) {
if (piece.containsPoint(pos)) {
draggedPiece = piece;
}
});
});
game.on('move', function (x, y, obj) {
if (draggedPiece) {
var pos = game.toLocal(obj.global);
draggedPiece.x = pos.x;
draggedPiece.y = pos.y;
}
});
game.on('up', function (x, y, obj) {
// Check if the dragged piece is in the correct position
if (draggedPiece && draggedPiece.isInCorrectPosition()) {
// Snap to correct position
draggedPiece.x = draggedPiece.correctX;
draggedPiece.y = draggedPiece.correctY;
}
draggedPiece = null;
// Check if the puzzle is solved
if (puzzleBoard.isSolved()) {
LK.showGameOver(); // Show game over when the puzzle is solved
}
});
// Update function for game logic
LK.on('tick', function () {
// Update the flying boxes positions
for (var i = 0; i < flyingBoxes.length; i++) {
flyingBoxes[i]._update_migrated();
}
// Update the snow particles
for (var i = 0; i < snowParticles.length; i++) {
snowParticles[i]._update_migrated();
}
// Check if any of the flying boxes intersects with the puzzle board
for (var i = 0; i < flyingBoxes.length; i++) {
if (flyingBoxes[i].intersects(puzzleBoard)) {
// Push the puzzle board in the direction of the flying box's movement
puzzleBoard.x += flyingBoxes[i].speedX;
puzzleBoard.y += flyingBoxes[i].speedY;
}
}
// Check if any of the flying boxes intersects with the food
for (var i = 0; i < flyingBoxes.length; i++) {
for (var j = 0; j < foods.length; j++) {
if (flyingBoxes[i].intersects(foods[j])) {
// Double the size of the box
flyingBoxes[i].scaleX *= 2;
flyingBoxes[i].scaleY *= 2;
// Increase the speed of the box
flyingBoxes[i].speedX *= 1.5;
flyingBoxes[i].speedY *= 1.5;
// Remove the food from the game
game.removeChild(foods[j]);
foods.splice(j, 1);
// Generate 5 trees
for (var k = 0; k < 5; k++) {
var tree = game.addChild(new Tree());
tree.x = Math.random() * 2048;
tree.y = Math.random() * 2732;
}
break;
}
}
}
// Check if any of the flying boxes intersects with the restore area
for (var i = 0; i < flyingBoxes.length; i++) {
for (var j = 0; j < restoreAreas.length; j++) {
if (flyingBoxes[i].intersects(restoreAreas[j])) {
// Restore the speed of the box
flyingBoxes[i].speedX = Math.random() * 10 - 5;
flyingBoxes[i].speedY = Math.random() * 10 - 5;
// Remove the restore area from the game
game.removeChild(restoreAreas[j]);
restoreAreas.splice(j, 1);
break;
}
}
}
// Create a timer to generate food over time
if (LK.ticks % 120 == 0 && LK.ticks <= 600) {
// every 2 seconds for the first 10 seconds
var food = game.addChild(new Food());
food.x = Math.random() * 2048;
food.y = Math.random() * 2732;
foods.push(food);
}
});