/**** * Classes ****/ //var tween = LK.import("@upit/tween.v1"); // Enemy class var Enemy = Container.expand(function () { var self = Container.call(this); var enemyAsset = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.radius = enemyAsset.width / 2; self.speedY = 14 + Math.random() * 10; // Random fall speed // Set initial position self.x = 150 + Math.random() * (2048 - 300); self.y = -enemyAsset.height / 2; self.update = function () { self.y += self.speedY; }; return self; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerAsset = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.radius = playerAsset.width / 2; self.groundY = 2400; // Y position of the ground (bottom margin) // Set initial position self.x = 2048 / 2; self.y = self.groundY; // Call every frame self.update = function () { // No jump or gravity, player stays on ground }; // Move left by a fixed amount, clamp to screen self.moveLeft = function () { self.x -= 180; if (self.x < self.radius + 20) self.x = self.radius + 20; }; // Move right by a fixed amount, clamp to screen self.moveRight = function () { self.x += 180; if (self.x > 2048 - self.radius - 20) self.x = 2048 - self.radius - 20; }; return self; }); // Star class var Star = Container.expand(function () { var self = Container.call(this); var starAsset = self.attachAsset('star', { anchorX: 0.5, anchorY: 0.5 }); self.radius = starAsset.width / 2; self.speedY = 12 + Math.random() * 8; // Random fall speed // Set initial position self.x = 150 + Math.random() * (2048 - 300); self.y = -starAsset.height / 2; self.update = function () { self.y += self.speedY; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x888888 }); /**** * Game Code ****/ // Enemy: red box // Star: smaller white ellipse // Player character: yellow ellipse (star jumper) // Score display (top left, avoid 100x100 area) var scoreTxt = new Text2('0', { size: 110, fill: 0xFFF700 }); scoreTxt.anchor.set(0, 0); // Top left scoreTxt.x = 120; // Leave margin for menu scoreTxt.y = 40; LK.gui.top.addChild(scoreTxt); // Player instance var player = new Player(); game.addChild(player); // Add 'Left' and 'Right' text labels var leftLabel = new Text2('Left', { size: 100, fill: 0xffffff }); leftLabel.anchor.set(0.5, 1); leftLabel.x = 2048 * 0.18; leftLabel.y = 2732 - 80; game.addChild(leftLabel); var rightLabel = new Text2('Right', { size: 100, fill: 0xffffff }); rightLabel.anchor.set(0.5, 1); rightLabel.x = 2048 * 0.82; rightLabel.y = 2732 - 80; game.addChild(rightLabel); // Arrays for stars and enemies var stars = []; var enemies = []; // Timers for spawning var starSpawnTimer = 0; var enemySpawnTimer = 0; // Helper: spawn a star function spawnStar() { var star = new Star(); stars.push(star); game.addChild(star); } // Helper: spawn an enemy function spawnEnemy() { // Spawn two enemies for (var i = 0; i < 2; i++) { var enemy = new Enemy(); enemies.push(enemy); game.addChild(enemy); } } // Tap left/right screen to move player game.down = function (x, y, obj) { if (x < 2048 / 2) { player.moveLeft(); } else { player.moveRight(); } }; // Main update loop game.update = function () { // Update player player.update(); // Spawn stars starSpawnTimer--; if (starSpawnTimer <= 0) { spawnStar(); starSpawnTimer = 36 + Math.floor(Math.random() * 24); // 0.6-1.0s at 60fps } // Spawn enemies enemySpawnTimer--; if (enemySpawnTimer <= 0) { spawnEnemy(); enemySpawnTimer = 60 + Math.floor(Math.random() * 40); // 1.0-1.7s at 60fps } // Update and check stars for (var i = stars.length - 1; i >= 0; i--) { var star = stars[i]; star.update(); // Off screen if (star.y - star.radius > 2732) { star.destroy(); stars.splice(i, 1); continue; } // Collision with player if (player.intersects(star)) { LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); star.destroy(); stars.splice(i, 1); continue; } } // Update and check enemies for (var j = enemies.length - 1; j >= 0; j--) { var enemy = enemies[j]; enemy.update(); // Off screen if (enemy.y - enemy.radius > 2732) { enemy.destroy(); enemies.splice(j, 1); continue; } // Collision with player if (player.intersects(enemy)) { if (player.extraLife && player.extraLife > 0) { player.extraLife--; LK.effects.flashScreen(0x00ff00, 600); // Remove enemy and continue enemy.destroy(); enemies.splice(j, 1); continue; } else { LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } } }; // Set initial score LK.setScore(0); scoreTxt.setText('0');
/****
* Classes
****/
//var tween = LK.import("@upit/tween.v1");
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyAsset = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = enemyAsset.width / 2;
self.speedY = 14 + Math.random() * 10; // Random fall speed
// Set initial position
self.x = 150 + Math.random() * (2048 - 300);
self.y = -enemyAsset.height / 2;
self.update = function () {
self.y += self.speedY;
};
return self;
});
// Player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerAsset = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = playerAsset.width / 2;
self.groundY = 2400; // Y position of the ground (bottom margin)
// Set initial position
self.x = 2048 / 2;
self.y = self.groundY;
// Call every frame
self.update = function () {
// No jump or gravity, player stays on ground
};
// Move left by a fixed amount, clamp to screen
self.moveLeft = function () {
self.x -= 180;
if (self.x < self.radius + 20) self.x = self.radius + 20;
};
// Move right by a fixed amount, clamp to screen
self.moveRight = function () {
self.x += 180;
if (self.x > 2048 - self.radius - 20) self.x = 2048 - self.radius - 20;
};
return self;
});
// Star class
var Star = Container.expand(function () {
var self = Container.call(this);
var starAsset = self.attachAsset('star', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = starAsset.width / 2;
self.speedY = 12 + Math.random() * 8; // Random fall speed
// Set initial position
self.x = 150 + Math.random() * (2048 - 300);
self.y = -starAsset.height / 2;
self.update = function () {
self.y += self.speedY;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x888888
});
/****
* Game Code
****/
// Enemy: red box
// Star: smaller white ellipse
// Player character: yellow ellipse (star jumper)
// Score display (top left, avoid 100x100 area)
var scoreTxt = new Text2('0', {
size: 110,
fill: 0xFFF700
});
scoreTxt.anchor.set(0, 0); // Top left
scoreTxt.x = 120; // Leave margin for menu
scoreTxt.y = 40;
LK.gui.top.addChild(scoreTxt);
// Player instance
var player = new Player();
game.addChild(player);
// Add 'Left' and 'Right' text labels
var leftLabel = new Text2('Left', {
size: 100,
fill: 0xffffff
});
leftLabel.anchor.set(0.5, 1);
leftLabel.x = 2048 * 0.18;
leftLabel.y = 2732 - 80;
game.addChild(leftLabel);
var rightLabel = new Text2('Right', {
size: 100,
fill: 0xffffff
});
rightLabel.anchor.set(0.5, 1);
rightLabel.x = 2048 * 0.82;
rightLabel.y = 2732 - 80;
game.addChild(rightLabel);
// Arrays for stars and enemies
var stars = [];
var enemies = [];
// Timers for spawning
var starSpawnTimer = 0;
var enemySpawnTimer = 0;
// Helper: spawn a star
function spawnStar() {
var star = new Star();
stars.push(star);
game.addChild(star);
}
// Helper: spawn an enemy
function spawnEnemy() {
// Spawn two enemies
for (var i = 0; i < 2; i++) {
var enemy = new Enemy();
enemies.push(enemy);
game.addChild(enemy);
}
}
// Tap left/right screen to move player
game.down = function (x, y, obj) {
if (x < 2048 / 2) {
player.moveLeft();
} else {
player.moveRight();
}
};
// Main update loop
game.update = function () {
// Update player
player.update();
// Spawn stars
starSpawnTimer--;
if (starSpawnTimer <= 0) {
spawnStar();
starSpawnTimer = 36 + Math.floor(Math.random() * 24); // 0.6-1.0s at 60fps
}
// Spawn enemies
enemySpawnTimer--;
if (enemySpawnTimer <= 0) {
spawnEnemy();
enemySpawnTimer = 60 + Math.floor(Math.random() * 40); // 1.0-1.7s at 60fps
}
// Update and check stars
for (var i = stars.length - 1; i >= 0; i--) {
var star = stars[i];
star.update();
// Off screen
if (star.y - star.radius > 2732) {
star.destroy();
stars.splice(i, 1);
continue;
}
// Collision with player
if (player.intersects(star)) {
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
star.destroy();
stars.splice(i, 1);
continue;
}
}
// Update and check enemies
for (var j = enemies.length - 1; j >= 0; j--) {
var enemy = enemies[j];
enemy.update();
// Off screen
if (enemy.y - enemy.radius > 2732) {
enemy.destroy();
enemies.splice(j, 1);
continue;
}
// Collision with player
if (player.intersects(enemy)) {
if (player.extraLife && player.extraLife > 0) {
player.extraLife--;
LK.effects.flashScreen(0x00ff00, 600);
// Remove enemy and continue
enemy.destroy();
enemies.splice(j, 1);
continue;
} else {
LK.effects.flashScreen(0xff0000, 800);
LK.showGameOver();
return;
}
}
}
};
// Set initial score
LK.setScore(0);
scoreTxt.setText('0');