/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Collectible class var Collectible = Container.expand(function () { var self = Container.call(this); var colSprite = self.attachAsset('collectible', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 10; // Will be set dynamically self.update = function () { self.y += self.speed; }; return self; }); // Obstacle class var Obstacle = Container.expand(function () { var self = Container.call(this); var obsSprite = self.attachAsset('obstacle', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 12; // Will be set dynamically self.update = function () { self.y += self.speed; }; return self; }); // Player class var Player = Container.expand(function () { var self = Container.call(this); var playerSprite = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // For collision, use the container itself return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x181818 }); /**** * Game Code ****/ // Collectible: gold ellipse // Obstacle: red ellipse // Player character: blue box // Game area: 2048x2732 // Player start position: bottom center var player = new Player(); player.x = 2048 / 2; player.y = 2732 - 220; game.addChild(player); // Score display var scoreTxt = new Text2('0', { size: 120, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Arrays for obstacles and collectibles var obstacles = []; var collectibles = []; // Difficulty variables var obstacleInterval = 60; // ticks between obstacles var collectibleInterval = 180; // ticks between collectibles var minObstacleInterval = 20; var minCollectibleInterval = 80; var obstacleSpeed = 12; var collectibleSpeed = 10; var maxObstacleSpeed = 32; var maxCollectibleSpeed = 24; var ticksSinceLastObstacle = 0; var ticksSinceLastCollectible = 0; var difficultyTimer = 0; // Dragging var dragNode = null; // For collision detection var lastPlayerHit = false; // Move handler for dragging player function handleMove(x, y, obj) { if (dragNode) { // Clamp player within game area var px = Math.max(player.width / 2, Math.min(2048 - player.width / 2, x)); var py = Math.max(player.height / 2 + 100, Math.min(2732 - player.height / 2, y)); player.x = px; player.y = py; } } game.move = handleMove; game.down = function (x, y, obj) { // Only start drag if touch is on player var local = player.toLocal(game.toGlobal({ x: x, y: y })); if (Math.abs(local.x) <= player.width / 2 && Math.abs(local.y) <= player.height / 2) { dragNode = player; handleMove(x, y, obj); } }; game.up = function (x, y, obj) { dragNode = null; }; // Main game update loop game.update = function () { // Difficulty increases over time difficultyTimer++; if (difficultyTimer % 300 === 0) { // every 5 seconds if (obstacleInterval > minObstacleInterval) obstacleInterval -= 4; if (collectibleInterval > minCollectibleInterval) collectibleInterval -= 4; if (obstacleSpeed < maxObstacleSpeed) obstacleSpeed += 1.5; if (collectibleSpeed < maxCollectibleSpeed) collectibleSpeed += 1; } // Spawn obstacles ticksSinceLastObstacle++; if (ticksSinceLastObstacle >= obstacleInterval) { ticksSinceLastObstacle = 0; var obs = new Obstacle(); obs.x = Math.random() * (2048 - 180) + 90; obs.y = -80; obs.speed = obstacleSpeed + Math.random() * 2; obstacles.push(obs); game.addChild(obs); } // Spawn collectibles ticksSinceLastCollectible++; if (ticksSinceLastCollectible >= collectibleInterval) { ticksSinceLastCollectible = 0; var col = new Collectible(); col.x = Math.random() * (2048 - 140) + 70; col.y = -60; col.speed = collectibleSpeed + Math.random() * 2; collectibles.push(col); game.addChild(col); } // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; obs.update(); // Remove if off screen if (obs.y - obs.height / 2 > 2732 + 40) { obs.destroy(); obstacles.splice(i, 1); continue; } // Collision with player var hit = player.intersects(obs); if (!lastPlayerHit && hit) { // Flash screen red LK.effects.flashScreen(0xff0000, 800); // Game over LK.showGameOver(); return; } lastPlayerHit = hit; } // Update collectibles for (var j = collectibles.length - 1; j >= 0; j--) { var col = collectibles[j]; col.update(); // Remove if off screen if (col.y - col.height / 2 > 2732 + 40) { col.destroy(); collectibles.splice(j, 1); continue; } // Collision with player if (player.intersects(col)) { // Add score LK.setScore(LK.getScore() + 5); scoreTxt.setText(LK.getScore()); // Flash collectible LK.effects.flashObject(col, 0xffffff, 200); col.destroy(); collectibles.splice(j, 1); continue; } } // Update score display scoreTxt.setText(LK.getScore()); }; // Reset score on game start LK.setScore(0); scoreTxt.setText('0');
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,197 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Collectible class
+var Collectible = Container.expand(function () {
+ var self = Container.call(this);
+ var colSprite = self.attachAsset('collectible', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 10; // Will be set dynamically
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+// Obstacle class
+var Obstacle = Container.expand(function () {
+ var self = Container.call(this);
+ var obsSprite = self.attachAsset('obstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 12; // Will be set dynamically
+ self.update = function () {
+ self.y += self.speed;
+ };
+ return self;
+});
+// Player class
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerSprite = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // For collision, use the container itself
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x181818
+});
+
+/****
+* Game Code
+****/
+// Collectible: gold ellipse
+// Obstacle: red ellipse
+// Player character: blue box
+// Game area: 2048x2732
+// Player start position: bottom center
+var player = new Player();
+player.x = 2048 / 2;
+player.y = 2732 - 220;
+game.addChild(player);
+// Score display
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Arrays for obstacles and collectibles
+var obstacles = [];
+var collectibles = [];
+// Difficulty variables
+var obstacleInterval = 60; // ticks between obstacles
+var collectibleInterval = 180; // ticks between collectibles
+var minObstacleInterval = 20;
+var minCollectibleInterval = 80;
+var obstacleSpeed = 12;
+var collectibleSpeed = 10;
+var maxObstacleSpeed = 32;
+var maxCollectibleSpeed = 24;
+var ticksSinceLastObstacle = 0;
+var ticksSinceLastCollectible = 0;
+var difficultyTimer = 0;
+// Dragging
+var dragNode = null;
+// For collision detection
+var lastPlayerHit = false;
+// Move handler for dragging player
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ // Clamp player within game area
+ var px = Math.max(player.width / 2, Math.min(2048 - player.width / 2, x));
+ var py = Math.max(player.height / 2 + 100, Math.min(2732 - player.height / 2, y));
+ player.x = px;
+ player.y = py;
+ }
+}
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ // Only start drag if touch is on player
+ var local = player.toLocal(game.toGlobal({
+ x: x,
+ y: y
+ }));
+ if (Math.abs(local.x) <= player.width / 2 && Math.abs(local.y) <= player.height / 2) {
+ dragNode = player;
+ handleMove(x, y, obj);
+ }
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Main game update loop
+game.update = function () {
+ // Difficulty increases over time
+ difficultyTimer++;
+ if (difficultyTimer % 300 === 0) {
+ // every 5 seconds
+ if (obstacleInterval > minObstacleInterval) obstacleInterval -= 4;
+ if (collectibleInterval > minCollectibleInterval) collectibleInterval -= 4;
+ if (obstacleSpeed < maxObstacleSpeed) obstacleSpeed += 1.5;
+ if (collectibleSpeed < maxCollectibleSpeed) collectibleSpeed += 1;
+ }
+ // Spawn obstacles
+ ticksSinceLastObstacle++;
+ if (ticksSinceLastObstacle >= obstacleInterval) {
+ ticksSinceLastObstacle = 0;
+ var obs = new Obstacle();
+ obs.x = Math.random() * (2048 - 180) + 90;
+ obs.y = -80;
+ obs.speed = obstacleSpeed + Math.random() * 2;
+ obstacles.push(obs);
+ game.addChild(obs);
+ }
+ // Spawn collectibles
+ ticksSinceLastCollectible++;
+ if (ticksSinceLastCollectible >= collectibleInterval) {
+ ticksSinceLastCollectible = 0;
+ var col = new Collectible();
+ col.x = Math.random() * (2048 - 140) + 70;
+ col.y = -60;
+ col.speed = collectibleSpeed + Math.random() * 2;
+ collectibles.push(col);
+ game.addChild(col);
+ }
+ // Update obstacles
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obs = obstacles[i];
+ obs.update();
+ // Remove if off screen
+ if (obs.y - obs.height / 2 > 2732 + 40) {
+ obs.destroy();
+ obstacles.splice(i, 1);
+ continue;
+ }
+ // Collision with player
+ var hit = player.intersects(obs);
+ if (!lastPlayerHit && hit) {
+ // Flash screen red
+ LK.effects.flashScreen(0xff0000, 800);
+ // Game over
+ LK.showGameOver();
+ return;
+ }
+ lastPlayerHit = hit;
+ }
+ // Update collectibles
+ for (var j = collectibles.length - 1; j >= 0; j--) {
+ var col = collectibles[j];
+ col.update();
+ // Remove if off screen
+ if (col.y - col.height / 2 > 2732 + 40) {
+ col.destroy();
+ collectibles.splice(j, 1);
+ continue;
+ }
+ // Collision with player
+ if (player.intersects(col)) {
+ // Add score
+ LK.setScore(LK.getScore() + 5);
+ scoreTxt.setText(LK.getScore());
+ // Flash collectible
+ LK.effects.flashObject(col, 0xffffff, 200);
+ col.destroy();
+ collectibles.splice(j, 1);
+ continue;
+ }
+ }
+ // Update score display
+ scoreTxt.setText(LK.getScore());
+};
+// Reset score on game start
+LK.setScore(0);
+scoreTxt.setText('0');
\ No newline at end of file