/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Obstacle = Container.expand(function (type) { var self = Container.call(this); if (type === 'spike') { var obstacleGraphics = self.attachAsset('spike', { anchorX: 0.5, anchorY: 1 }); self.obstacleType = 'spike'; } else { var obstacleGraphics = self.attachAsset('barrier', { anchorX: 0.5, anchorY: 1 }); self.obstacleType = 'barrier'; } self.update = function () { self.x -= gameSpeed; }; return self; }); var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.velocityY = 0; self.groundY = 2500; self.isOnGround = true; self.isSliding = false; self.isInvincible = false; self.jumpPower = -25; self.gravity = 1.5; self.slideTimer = 0; self.invincibleTimer = 0; self.jump = function () { if (self.isOnGround && !self.isSliding) { self.velocityY = self.jumpPower; self.isOnGround = false; LK.getSound('jump').play(); } }; self.slide = function () { if (self.isOnGround && !self.isSliding) { self.isSliding = true; self.slideTimer = 30; playerGraphics.scaleY = 0.5; self.y += 20; } }; self.update = function () { // Handle gravity and jumping if (!self.isOnGround) { self.velocityY += self.gravity; self.y += self.velocityY; if (self.y >= self.groundY) { self.y = self.groundY; self.velocityY = 0; self.isOnGround = true; } } // Handle sliding if (self.isSliding) { self.slideTimer--; if (self.slideTimer <= 0) { self.isSliding = false; playerGraphics.scaleY = 1; self.y = self.groundY; } } // Handle invincibility if (self.isInvincible) { self.invincibleTimer--; playerGraphics.alpha = 0.5 + 0.5 * Math.sin(LK.ticks * 0.5); if (self.invincibleTimer <= 0) { self.isInvincible = false; playerGraphics.alpha = 1; } } }; return self; }); var PowerUp = Container.expand(function () { var self = Container.call(this); var powerGraphics = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.collected = false; self.update = function () { powerGraphics.rotation += 0.15; powerGraphics.scaleX = 1 + 0.2 * Math.sin(LK.ticks * 0.2); powerGraphics.scaleY = 1 + 0.2 * Math.sin(LK.ticks * 0.2); self.x -= gameSpeed; }; return self; }); var Ring = Container.expand(function () { var self = Container.call(this); var ringGraphics = self.attachAsset('ring', { anchorX: 0.5, anchorY: 0.5 }); self.collected = false; self.update = function () { ringGraphics.rotation += 0.1; self.x -= gameSpeed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var player; var rings = []; var obstacles = []; var powerups = []; var gameSpeed = 8; var baseSpeed = 8; var maxSpeed = 20; var speedIncrement = 0.01; var spawnTimer = 0; var ringSpawnTimer = 0; var powerupSpawnTimer = 0; var distance = 0; // Create ground var ground = game.addChild(LK.getAsset('ground', { anchorX: 0, anchorY: 0 })); ground.x = 0; ground.y = 2600; // Create player player = game.addChild(new Player()); player.x = 300; player.y = player.groundY; // UI Elements var scoreText = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0, 0); scoreText.x = 150; scoreText.y = 50; LK.gui.topLeft.addChild(scoreText); var speedText = new Text2('Speed: ' + Math.floor(gameSpeed), { size: 50, fill: 0xFFFFFF }); speedText.anchor.set(1, 0); speedText.x = -50; speedText.y = 50; LK.gui.topRight.addChild(speedText); // Input handling game.down = function (x, y, obj) { if (y > 2732 / 2) { player.slide(); } else { player.jump(); } }; function spawnRing() { var ring = new Ring(); ring.x = 2200; ring.y = player.groundY - 50 - Math.random() * 200; rings.push(ring); game.addChild(ring); } function spawnObstacle() { var type = Math.random() < 0.6 ? 'spike' : 'barrier'; var obstacle = new Obstacle(type); obstacle.x = 2200; if (type === 'spike') { obstacle.y = player.groundY; } else { obstacle.y = player.groundY - 60; } obstacles.push(obstacle); game.addChild(obstacle); } function spawnPowerup() { var powerup = new PowerUp(); powerup.x = 2200; powerup.y = player.groundY - 100 - Math.random() * 150; powerups.push(powerup); game.addChild(powerup); } game.update = function () { // Increase speed over time gameSpeed = Math.min(maxSpeed, baseSpeed + distance * speedIncrement); distance += gameSpeed; // Update UI scoreText.setText('Score: ' + LK.getScore()); speedText.setText('Speed: ' + Math.floor(gameSpeed)); // Spawn rings ringSpawnTimer++; if (ringSpawnTimer > 40 - gameSpeed) { ringSpawnTimer = 0; if (Math.random() < 0.7) { spawnRing(); } } // Spawn obstacles spawnTimer++; if (spawnTimer > 80 - gameSpeed * 2) { spawnTimer = 0; spawnObstacle(); } // Spawn powerups powerupSpawnTimer++; if (powerupSpawnTimer > 600) { powerupSpawnTimer = 0; if (Math.random() < 0.3) { spawnPowerup(); } } // Check ring collisions for (var i = rings.length - 1; i >= 0; i--) { var ring = rings[i]; if (ring.x < -100) { ring.destroy(); rings.splice(i, 1); continue; } if (!ring.collected && player.intersects(ring)) { ring.collected = true; LK.setScore(LK.getScore() + 10); LK.getSound('ring').play(); ring.destroy(); rings.splice(i, 1); } } // Check obstacle collisions for (var j = obstacles.length - 1; j >= 0; j--) { var obstacle = obstacles[j]; if (obstacle.x < -100) { obstacle.destroy(); obstacles.splice(j, 1); continue; } if (!player.isInvincible && player.intersects(obstacle)) { // Check collision type var collision = false; if (obstacle.obstacleType === 'spike' && !player.isSliding) { collision = true; } else if (obstacle.obstacleType === 'barrier' && !player.isSliding) { collision = true; } if (collision) { LK.effects.flashScreen(0xff0000, 500); LK.showGameOver(); } } } // Check powerup collisions for (var k = powerups.length - 1; k >= 0; k--) { var powerup = powerups[k]; if (powerup.x < -100) { powerup.destroy(); powerups.splice(k, 1); continue; } if (!powerup.collected && player.intersects(powerup)) { powerup.collected = true; player.isInvincible = true; player.invincibleTimer = 180; LK.getSound('powerup').play(); LK.effects.flashObject(player, 0xffff00, 500); powerup.destroy(); powerups.splice(k, 1); } } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,289 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Obstacle = Container.expand(function (type) {
+ var self = Container.call(this);
+ if (type === 'spike') {
+ var obstacleGraphics = self.attachAsset('spike', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ self.obstacleType = 'spike';
+ } else {
+ var obstacleGraphics = self.attachAsset('barrier', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ self.obstacleType = 'barrier';
+ }
+ self.update = function () {
+ self.x -= gameSpeed;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.velocityY = 0;
+ self.groundY = 2500;
+ self.isOnGround = true;
+ self.isSliding = false;
+ self.isInvincible = false;
+ self.jumpPower = -25;
+ self.gravity = 1.5;
+ self.slideTimer = 0;
+ self.invincibleTimer = 0;
+ self.jump = function () {
+ if (self.isOnGround && !self.isSliding) {
+ self.velocityY = self.jumpPower;
+ self.isOnGround = false;
+ LK.getSound('jump').play();
+ }
+ };
+ self.slide = function () {
+ if (self.isOnGround && !self.isSliding) {
+ self.isSliding = true;
+ self.slideTimer = 30;
+ playerGraphics.scaleY = 0.5;
+ self.y += 20;
+ }
+ };
+ self.update = function () {
+ // Handle gravity and jumping
+ if (!self.isOnGround) {
+ self.velocityY += self.gravity;
+ self.y += self.velocityY;
+ if (self.y >= self.groundY) {
+ self.y = self.groundY;
+ self.velocityY = 0;
+ self.isOnGround = true;
+ }
+ }
+ // Handle sliding
+ if (self.isSliding) {
+ self.slideTimer--;
+ if (self.slideTimer <= 0) {
+ self.isSliding = false;
+ playerGraphics.scaleY = 1;
+ self.y = self.groundY;
+ }
+ }
+ // Handle invincibility
+ if (self.isInvincible) {
+ self.invincibleTimer--;
+ playerGraphics.alpha = 0.5 + 0.5 * Math.sin(LK.ticks * 0.5);
+ if (self.invincibleTimer <= 0) {
+ self.isInvincible = false;
+ playerGraphics.alpha = 1;
+ }
+ }
+ };
+ return self;
+});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var powerGraphics = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.collected = false;
+ self.update = function () {
+ powerGraphics.rotation += 0.15;
+ powerGraphics.scaleX = 1 + 0.2 * Math.sin(LK.ticks * 0.2);
+ powerGraphics.scaleY = 1 + 0.2 * Math.sin(LK.ticks * 0.2);
+ self.x -= gameSpeed;
+ };
+ return self;
+});
+var Ring = Container.expand(function () {
+ var self = Container.call(this);
+ var ringGraphics = self.attachAsset('ring', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.collected = false;
+ self.update = function () {
+ ringGraphics.rotation += 0.1;
+ self.x -= gameSpeed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var player;
+var rings = [];
+var obstacles = [];
+var powerups = [];
+var gameSpeed = 8;
+var baseSpeed = 8;
+var maxSpeed = 20;
+var speedIncrement = 0.01;
+var spawnTimer = 0;
+var ringSpawnTimer = 0;
+var powerupSpawnTimer = 0;
+var distance = 0;
+// Create ground
+var ground = game.addChild(LK.getAsset('ground', {
+ anchorX: 0,
+ anchorY: 0
+}));
+ground.x = 0;
+ground.y = 2600;
+// Create player
+player = game.addChild(new Player());
+player.x = 300;
+player.y = player.groundY;
+// UI Elements
+var scoreText = new Text2('Score: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0, 0);
+scoreText.x = 150;
+scoreText.y = 50;
+LK.gui.topLeft.addChild(scoreText);
+var speedText = new Text2('Speed: ' + Math.floor(gameSpeed), {
+ size: 50,
+ fill: 0xFFFFFF
+});
+speedText.anchor.set(1, 0);
+speedText.x = -50;
+speedText.y = 50;
+LK.gui.topRight.addChild(speedText);
+// Input handling
+game.down = function (x, y, obj) {
+ if (y > 2732 / 2) {
+ player.slide();
+ } else {
+ player.jump();
+ }
+};
+function spawnRing() {
+ var ring = new Ring();
+ ring.x = 2200;
+ ring.y = player.groundY - 50 - Math.random() * 200;
+ rings.push(ring);
+ game.addChild(ring);
+}
+function spawnObstacle() {
+ var type = Math.random() < 0.6 ? 'spike' : 'barrier';
+ var obstacle = new Obstacle(type);
+ obstacle.x = 2200;
+ if (type === 'spike') {
+ obstacle.y = player.groundY;
+ } else {
+ obstacle.y = player.groundY - 60;
+ }
+ obstacles.push(obstacle);
+ game.addChild(obstacle);
+}
+function spawnPowerup() {
+ var powerup = new PowerUp();
+ powerup.x = 2200;
+ powerup.y = player.groundY - 100 - Math.random() * 150;
+ powerups.push(powerup);
+ game.addChild(powerup);
+}
+game.update = function () {
+ // Increase speed over time
+ gameSpeed = Math.min(maxSpeed, baseSpeed + distance * speedIncrement);
+ distance += gameSpeed;
+ // Update UI
+ scoreText.setText('Score: ' + LK.getScore());
+ speedText.setText('Speed: ' + Math.floor(gameSpeed));
+ // Spawn rings
+ ringSpawnTimer++;
+ if (ringSpawnTimer > 40 - gameSpeed) {
+ ringSpawnTimer = 0;
+ if (Math.random() < 0.7) {
+ spawnRing();
+ }
+ }
+ // Spawn obstacles
+ spawnTimer++;
+ if (spawnTimer > 80 - gameSpeed * 2) {
+ spawnTimer = 0;
+ spawnObstacle();
+ }
+ // Spawn powerups
+ powerupSpawnTimer++;
+ if (powerupSpawnTimer > 600) {
+ powerupSpawnTimer = 0;
+ if (Math.random() < 0.3) {
+ spawnPowerup();
+ }
+ }
+ // Check ring collisions
+ for (var i = rings.length - 1; i >= 0; i--) {
+ var ring = rings[i];
+ if (ring.x < -100) {
+ ring.destroy();
+ rings.splice(i, 1);
+ continue;
+ }
+ if (!ring.collected && player.intersects(ring)) {
+ ring.collected = true;
+ LK.setScore(LK.getScore() + 10);
+ LK.getSound('ring').play();
+ ring.destroy();
+ rings.splice(i, 1);
+ }
+ }
+ // Check obstacle collisions
+ for (var j = obstacles.length - 1; j >= 0; j--) {
+ var obstacle = obstacles[j];
+ if (obstacle.x < -100) {
+ obstacle.destroy();
+ obstacles.splice(j, 1);
+ continue;
+ }
+ if (!player.isInvincible && player.intersects(obstacle)) {
+ // Check collision type
+ var collision = false;
+ if (obstacle.obstacleType === 'spike' && !player.isSliding) {
+ collision = true;
+ } else if (obstacle.obstacleType === 'barrier' && !player.isSliding) {
+ collision = true;
+ }
+ if (collision) {
+ LK.effects.flashScreen(0xff0000, 500);
+ LK.showGameOver();
+ }
+ }
+ }
+ // Check powerup collisions
+ for (var k = powerups.length - 1; k >= 0; k--) {
+ var powerup = powerups[k];
+ if (powerup.x < -100) {
+ powerup.destroy();
+ powerups.splice(k, 1);
+ continue;
+ }
+ if (!powerup.collected && player.intersects(powerup)) {
+ powerup.collected = true;
+ player.isInvincible = true;
+ player.invincibleTimer = 180;
+ LK.getSound('powerup').play();
+ LK.effects.flashObject(player, 0xffff00, 500);
+ powerup.destroy();
+ powerups.splice(k, 1);
+ }
+ }
+};
\ No newline at end of file