/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Alien = Container.expand(function () { var self = Container.call(this); var alienGraphics = self.attachAsset('alien', { anchorX: 0.5, anchorY: 0.5 }); // Movement properties self.velocityX = (Math.random() - 0.5) * 4; self.velocityY = 0; self.gravity = 0.3; self.jumpCooldown = 0; self.isDragging = false; self.groundY = 2500; // Walking animation self.walkTimer = 0; self.originalScaleX = 1; self.update = function () { if (self.isDragging) return; // Apply gravity self.velocityY += self.gravity; // Update position self.x += self.velocityX; self.y += self.velocityY; // Ground collision if (self.y > self.groundY) { self.y = self.groundY; self.velocityY = 0; // Random jump if (self.jumpCooldown <= 0 && Math.random() < 0.02) { self.velocityY = -8 - Math.random() * 4; self.jumpCooldown = 60; } } if (self.jumpCooldown > 0) { self.jumpCooldown--; } // Bounce off screen edges if (self.x < 60) { self.x = 60; self.velocityX = Math.abs(self.velocityX); } if (self.x > 1988) { self.x = 1988; self.velocityX = -Math.abs(self.velocityX); } // Walking animation self.walkTimer += 0.2; alienGraphics.scaleX = self.originalScaleX + Math.sin(self.walkTimer) * 0.1; alienGraphics.scaleY = 1 + Math.cos(self.walkTimer * 1.5) * 0.05; // Change direction occasionally if (Math.random() < 0.005) { self.velocityX = (Math.random() - 0.5) * 4; } }; return self; }); var Basket = Container.expand(function () { var self = Container.call(this); var basketGraphics = self.attachAsset('basket', { anchorX: 0.5, anchorY: 1.0 }); var rimGraphics = self.attachAsset('basketRim', { anchorX: 0.5, anchorY: 0.5 }); rimGraphics.y = -basketGraphics.height + 15; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87ceeb }); /**** * Game Code ****/ // Game variables var aliens = []; var draggedAlien = null; var basket; var scoreTxt; var spawnTimer = 0; var maxAliens = 3; var aliensOnScreen = 0; // Create basket basket = game.addChild(new Basket()); basket.x = 1024; basket.y = 2600; // Create score display scoreTxt = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); scoreTxt.y = 150; // Function to spawn new alien function spawnAlien() { if (aliensOnScreen >= maxAliens) return; var alien = new Alien(); alien.x = 200 + Math.random() * 1600; alien.y = 1000 + Math.random() * 800; alien.groundY = 2000 + Math.random() * 500; aliens.push(alien); game.addChild(alien); aliensOnScreen++; LK.getSound('spawn').play(); } // Initial aliens spawnAlien(); spawnAlien(); // Touch handlers game.down = function (x, y, obj) { // Check if touching an alien for (var i = 0; i < aliens.length; i++) { var alien = aliens[i]; var bounds = alien.getBounds(); if (x >= bounds.x && x <= bounds.x + bounds.width && y >= bounds.y && y <= bounds.y + bounds.height) { draggedAlien = alien; alien.isDragging = true; break; } } }; game.move = function (x, y, obj) { if (draggedAlien) { draggedAlien.x = x; draggedAlien.y = y; } }; game.up = function (x, y, obj) { if (draggedAlien) { // Check if alien is dropped in basket var basketBounds = basket.getBounds(); if (draggedAlien.x >= basketBounds.x && draggedAlien.x <= basketBounds.x + basketBounds.width && draggedAlien.y >= basketBounds.y && draggedAlien.y <= basketBounds.y + basketBounds.height) { // Alien collected! LK.setScore(LK.getScore() + 10); scoreTxt.setText('Score: ' + LK.getScore()); // Flash effect LK.effects.flashObject(draggedAlien, 0xffff00, 300); // Remove alien var alienIndex = aliens.indexOf(draggedAlien); if (alienIndex > -1) { aliens.splice(alienIndex, 1); } draggedAlien.destroy(); aliensOnScreen--; LK.getSound('collect').play(); } else { // Alien not in basket, resume normal movement draggedAlien.isDragging = false; } draggedAlien = null; } }; // Main game loop game.update = function () { // Spawn new aliens periodically spawnTimer++; if (spawnTimer >= 180) { // Every 3 seconds spawnAlien(); spawnTimer = 0; // Increase difficulty over time if (LK.getScore() > 0 && LK.getScore() % 100 === 0) { maxAliens = Math.min(maxAliens + 1, 8); } } // Check for game over condition if (aliensOnScreen >= 15) { LK.showGameOver(); } // Update aliens for (var i = 0; i < aliens.length; i++) { aliens[i].update(); } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Alien = Container.expand(function () {
var self = Container.call(this);
var alienGraphics = self.attachAsset('alien', {
anchorX: 0.5,
anchorY: 0.5
});
// Movement properties
self.velocityX = (Math.random() - 0.5) * 4;
self.velocityY = 0;
self.gravity = 0.3;
self.jumpCooldown = 0;
self.isDragging = false;
self.groundY = 2500;
// Walking animation
self.walkTimer = 0;
self.originalScaleX = 1;
self.update = function () {
if (self.isDragging) return;
// Apply gravity
self.velocityY += self.gravity;
// Update position
self.x += self.velocityX;
self.y += self.velocityY;
// Ground collision
if (self.y > self.groundY) {
self.y = self.groundY;
self.velocityY = 0;
// Random jump
if (self.jumpCooldown <= 0 && Math.random() < 0.02) {
self.velocityY = -8 - Math.random() * 4;
self.jumpCooldown = 60;
}
}
if (self.jumpCooldown > 0) {
self.jumpCooldown--;
}
// Bounce off screen edges
if (self.x < 60) {
self.x = 60;
self.velocityX = Math.abs(self.velocityX);
}
if (self.x > 1988) {
self.x = 1988;
self.velocityX = -Math.abs(self.velocityX);
}
// Walking animation
self.walkTimer += 0.2;
alienGraphics.scaleX = self.originalScaleX + Math.sin(self.walkTimer) * 0.1;
alienGraphics.scaleY = 1 + Math.cos(self.walkTimer * 1.5) * 0.05;
// Change direction occasionally
if (Math.random() < 0.005) {
self.velocityX = (Math.random() - 0.5) * 4;
}
};
return self;
});
var Basket = Container.expand(function () {
var self = Container.call(this);
var basketGraphics = self.attachAsset('basket', {
anchorX: 0.5,
anchorY: 1.0
});
var rimGraphics = self.attachAsset('basketRim', {
anchorX: 0.5,
anchorY: 0.5
});
rimGraphics.y = -basketGraphics.height + 15;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87ceeb
});
/****
* Game Code
****/
// Game variables
var aliens = [];
var draggedAlien = null;
var basket;
var scoreTxt;
var spawnTimer = 0;
var maxAliens = 3;
var aliensOnScreen = 0;
// Create basket
basket = game.addChild(new Basket());
basket.x = 1024;
basket.y = 2600;
// Create score display
scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 150;
// Function to spawn new alien
function spawnAlien() {
if (aliensOnScreen >= maxAliens) return;
var alien = new Alien();
alien.x = 200 + Math.random() * 1600;
alien.y = 1000 + Math.random() * 800;
alien.groundY = 2000 + Math.random() * 500;
aliens.push(alien);
game.addChild(alien);
aliensOnScreen++;
LK.getSound('spawn').play();
}
// Initial aliens
spawnAlien();
spawnAlien();
// Touch handlers
game.down = function (x, y, obj) {
// Check if touching an alien
for (var i = 0; i < aliens.length; i++) {
var alien = aliens[i];
var bounds = alien.getBounds();
if (x >= bounds.x && x <= bounds.x + bounds.width && y >= bounds.y && y <= bounds.y + bounds.height) {
draggedAlien = alien;
alien.isDragging = true;
break;
}
}
};
game.move = function (x, y, obj) {
if (draggedAlien) {
draggedAlien.x = x;
draggedAlien.y = y;
}
};
game.up = function (x, y, obj) {
if (draggedAlien) {
// Check if alien is dropped in basket
var basketBounds = basket.getBounds();
if (draggedAlien.x >= basketBounds.x && draggedAlien.x <= basketBounds.x + basketBounds.width && draggedAlien.y >= basketBounds.y && draggedAlien.y <= basketBounds.y + basketBounds.height) {
// Alien collected!
LK.setScore(LK.getScore() + 10);
scoreTxt.setText('Score: ' + LK.getScore());
// Flash effect
LK.effects.flashObject(draggedAlien, 0xffff00, 300);
// Remove alien
var alienIndex = aliens.indexOf(draggedAlien);
if (alienIndex > -1) {
aliens.splice(alienIndex, 1);
}
draggedAlien.destroy();
aliensOnScreen--;
LK.getSound('collect').play();
} else {
// Alien not in basket, resume normal movement
draggedAlien.isDragging = false;
}
draggedAlien = null;
}
};
// Main game loop
game.update = function () {
// Spawn new aliens periodically
spawnTimer++;
if (spawnTimer >= 180) {
// Every 3 seconds
spawnAlien();
spawnTimer = 0;
// Increase difficulty over time
if (LK.getScore() > 0 && LK.getScore() % 100 === 0) {
maxAliens = Math.min(maxAliens + 1, 8);
}
}
// Check for game over condition
if (aliensOnScreen >= 15) {
LK.showGameOver();
}
// Update aliens
for (var i = 0; i < aliens.length; i++) {
aliens[i].update();
}
};