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