/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Barrier = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('barrier', {
anchorX: 0.5,
anchorY: 1.0
});
self.update = function () {
self.x -= gameSpeed;
};
return self;
});
var Coin = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.collected = false;
self.update = function () {
self.x -= gameSpeed;
// Floating animation
graphics.rotation += 0.1;
graphics.y = Math.sin(LK.ticks * 0.1) * 10;
};
return self;
});
var Platform = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
self.x -= gameSpeed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.isGrounded = false;
self.jumpPower = -20;
self.gravity = 1.2;
self.maxFallSpeed = 15;
self.invulnerable = false;
self.jump = function () {
if (self.isGrounded) {
self.velocityY = self.jumpPower;
self.isGrounded = false;
LK.getSound('jump').play();
}
};
self.update = function () {
// Apply gravity
self.velocityY += self.gravity;
if (self.velocityY > self.maxFallSpeed) {
self.velocityY = self.maxFallSpeed;
}
// Update position
self.y += self.velocityY;
// Check ground collision
if (self.y >= groundY) {
self.y = groundY;
self.velocityY = 0;
self.isGrounded = true;
}
// Animation effect
graphics.rotation = self.velocityY * 0.02;
};
return self;
});
var Spike = Container.expand(function () {
var self = Container.call(this);
var graphics = self.attachAsset('spike', {
anchorX: 0.5,
anchorY: 1.0
});
self.update = function () {
self.x -= gameSpeed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game variables
var gameSpeed = 8;
var baseSpeed = 8;
var maxSpeed = 16;
var speedIncrement = 0.01;
var groundY = 2400;
var spawnTimer = 0;
var distanceScore = 0;
var coinScore = 0;
// Game objects
var player;
var platforms = [];
var spikes = [];
var coins = [];
var barriers = [];
// UI elements
var scoreText = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var distanceText = new Text2('Distance: 0m', {
size: 60,
fill: 0xFFFFFF
});
distanceText.anchor.set(0, 0);
distanceText.x = 100;
distanceText.y = 150;
LK.gui.topLeft.addChild(distanceText);
// Initialize player
player = game.addChild(new Player());
player.x = 300;
player.y = groundY;
// Create initial platforms
function createPlatform(x, y) {
var platform = new Platform();
platform.x = x;
platform.y = y;
platforms.push(platform);
game.addChild(platform);
}
function createSpike(x, y) {
var spike = new Spike();
spike.x = x;
spike.y = y;
spikes.push(spike);
game.addChild(spike);
}
function createCoin(x, y) {
var coin = new Coin();
coin.x = x;
coin.y = y;
coins.push(coin);
game.addChild(coin);
}
function createBarrier(x, y) {
var barrier = new Barrier();
barrier.x = x;
barrier.y = y;
barriers.push(barrier);
game.addChild(barrier);
}
// Spawn obstacles
function spawnObstacles() {
var spawnX = 2048 + 200;
var rand = Math.random();
if (rand < 0.3) {
// Spike obstacle
createSpike(spawnX, groundY);
// Add coin above spike
if (Math.random() < 0.6) {
createCoin(spawnX, groundY - 150);
}
} else if (rand < 0.6) {
// Platform obstacle
var platformY = groundY - 100 - Math.random() * 200;
createPlatform(spawnX, platformY);
// Add coin on platform
if (Math.random() < 0.7) {
createCoin(spawnX, platformY - 50);
}
} else if (rand < 0.8) {
// Barrier obstacle
createBarrier(spawnX, groundY);
// Add coin above barrier
if (Math.random() < 0.5) {
createCoin(spawnX, groundY - 200);
}
} else {
// Just coins
createCoin(spawnX, groundY - 100 - Math.random() * 150);
}
}
// Check collisions
function checkCollisions() {
// Check spike collisions
for (var i = spikes.length - 1; i >= 0; i--) {
var spike = spikes[i];
if (player.intersects(spike) && !player.invulnerable) {
// Hit obstacle
LK.getSound('hit').play();
LK.effects.flashScreen(0xff0000, 500);
LK.showGameOver();
return;
}
}
// Check barrier collisions
for (var i = barriers.length - 1; i >= 0; i--) {
var barrier = barriers[i];
if (player.intersects(barrier) && !player.invulnerable) {
// Hit obstacle
LK.getSound('hit').play();
LK.effects.flashScreen(0xff0000, 500);
LK.showGameOver();
return;
}
}
// Check coin collisions
for (var i = coins.length - 1; i >= 0; i--) {
var coin = coins[i];
if (player.intersects(coin) && !coin.collected) {
coin.collected = true;
coinScore += 10;
LK.setScore(LK.getScore() + 10);
LK.getSound('coin').play();
// Coin collection effect
tween(coin, {
scaleX: 2,
scaleY: 2,
alpha: 0
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
coin.destroy();
coins.splice(i, 1);
}
});
}
}
// Check if player fell off screen
if (player.y > 2732 + 100) {
LK.showGameOver();
}
}
// Clean up off-screen objects
function cleanupObjects() {
// Clean platforms
for (var i = platforms.length - 1; i >= 0; i--) {
if (platforms[i].x < -200) {
platforms[i].destroy();
platforms.splice(i, 1);
}
}
// Clean spikes
for (var i = spikes.length - 1; i >= 0; i--) {
if (spikes[i].x < -200) {
spikes[i].destroy();
spikes.splice(i, 1);
}
}
// Clean coins
for (var i = coins.length - 1; i >= 0; i--) {
if (coins[i].x < -200 && !coins[i].collected) {
coins[i].destroy();
coins.splice(i, 1);
}
}
// Clean barriers
for (var i = barriers.length - 1; i >= 0; i--) {
if (barriers[i].x < -200) {
barriers[i].destroy();
barriers.splice(i, 1);
}
}
}
// Touch controls
game.down = function (x, y, obj) {
player.jump();
};
// Main game loop
game.update = function () {
// Update distance score
distanceScore += gameSpeed * 0.1;
LK.setScore(Math.floor(distanceScore) + coinScore);
// Update UI
scoreText.setText('Score: ' + LK.getScore());
distanceText.setText('Distance: ' + Math.floor(distanceScore) + 'm');
// Increase game speed gradually
gameSpeed = Math.min(baseSpeed + LK.getScore() * speedIncrement, maxSpeed);
// Spawn obstacles
spawnTimer++;
var spawnRate = Math.max(60 - Math.floor(LK.getScore() * 0.1), 30);
if (spawnTimer >= spawnRate) {
spawnObstacles();
spawnTimer = 0;
}
// Check collisions
checkCollisions();
// Clean up objects
cleanupObjects();
};
// Start background music
LK.playMusic('bgmusic'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,310 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Barrier = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('barrier', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.update = function () {
+ self.x -= gameSpeed;
+ };
+ return self;
+});
+var Coin = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('coin', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.collected = false;
+ self.update = function () {
+ self.x -= gameSpeed;
+ // Floating animation
+ graphics.rotation += 0.1;
+ graphics.y = Math.sin(LK.ticks * 0.1) * 10;
+ };
+ return self;
+});
+var Platform = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('platform', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.update = function () {
+ self.x -= gameSpeed;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.velocityY = 0;
+ self.isGrounded = false;
+ self.jumpPower = -20;
+ self.gravity = 1.2;
+ self.maxFallSpeed = 15;
+ self.invulnerable = false;
+ self.jump = function () {
+ if (self.isGrounded) {
+ self.velocityY = self.jumpPower;
+ self.isGrounded = false;
+ LK.getSound('jump').play();
+ }
+ };
+ self.update = function () {
+ // Apply gravity
+ self.velocityY += self.gravity;
+ if (self.velocityY > self.maxFallSpeed) {
+ self.velocityY = self.maxFallSpeed;
+ }
+ // Update position
+ self.y += self.velocityY;
+ // Check ground collision
+ if (self.y >= groundY) {
+ self.y = groundY;
+ self.velocityY = 0;
+ self.isGrounded = true;
+ }
+ // Animation effect
+ graphics.rotation = self.velocityY * 0.02;
+ };
+ return self;
+});
+var Spike = Container.expand(function () {
+ var self = Container.call(this);
+ var graphics = self.attachAsset('spike', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.update = function () {
+ self.x -= gameSpeed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var gameSpeed = 8;
+var baseSpeed = 8;
+var maxSpeed = 16;
+var speedIncrement = 0.01;
+var groundY = 2400;
+var spawnTimer = 0;
+var distanceScore = 0;
+var coinScore = 0;
+// Game objects
+var player;
+var platforms = [];
+var spikes = [];
+var coins = [];
+var barriers = [];
+// UI elements
+var scoreText = new Text2('Score: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+var distanceText = new Text2('Distance: 0m', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+distanceText.anchor.set(0, 0);
+distanceText.x = 100;
+distanceText.y = 150;
+LK.gui.topLeft.addChild(distanceText);
+// Initialize player
+player = game.addChild(new Player());
+player.x = 300;
+player.y = groundY;
+// Create initial platforms
+function createPlatform(x, y) {
+ var platform = new Platform();
+ platform.x = x;
+ platform.y = y;
+ platforms.push(platform);
+ game.addChild(platform);
+}
+function createSpike(x, y) {
+ var spike = new Spike();
+ spike.x = x;
+ spike.y = y;
+ spikes.push(spike);
+ game.addChild(spike);
+}
+function createCoin(x, y) {
+ var coin = new Coin();
+ coin.x = x;
+ coin.y = y;
+ coins.push(coin);
+ game.addChild(coin);
+}
+function createBarrier(x, y) {
+ var barrier = new Barrier();
+ barrier.x = x;
+ barrier.y = y;
+ barriers.push(barrier);
+ game.addChild(barrier);
+}
+// Spawn obstacles
+function spawnObstacles() {
+ var spawnX = 2048 + 200;
+ var rand = Math.random();
+ if (rand < 0.3) {
+ // Spike obstacle
+ createSpike(spawnX, groundY);
+ // Add coin above spike
+ if (Math.random() < 0.6) {
+ createCoin(spawnX, groundY - 150);
+ }
+ } else if (rand < 0.6) {
+ // Platform obstacle
+ var platformY = groundY - 100 - Math.random() * 200;
+ createPlatform(spawnX, platformY);
+ // Add coin on platform
+ if (Math.random() < 0.7) {
+ createCoin(spawnX, platformY - 50);
+ }
+ } else if (rand < 0.8) {
+ // Barrier obstacle
+ createBarrier(spawnX, groundY);
+ // Add coin above barrier
+ if (Math.random() < 0.5) {
+ createCoin(spawnX, groundY - 200);
+ }
+ } else {
+ // Just coins
+ createCoin(spawnX, groundY - 100 - Math.random() * 150);
+ }
+}
+// Check collisions
+function checkCollisions() {
+ // Check spike collisions
+ for (var i = spikes.length - 1; i >= 0; i--) {
+ var spike = spikes[i];
+ if (player.intersects(spike) && !player.invulnerable) {
+ // Hit obstacle
+ LK.getSound('hit').play();
+ LK.effects.flashScreen(0xff0000, 500);
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Check barrier collisions
+ for (var i = barriers.length - 1; i >= 0; i--) {
+ var barrier = barriers[i];
+ if (player.intersects(barrier) && !player.invulnerable) {
+ // Hit obstacle
+ LK.getSound('hit').play();
+ LK.effects.flashScreen(0xff0000, 500);
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Check coin collisions
+ for (var i = coins.length - 1; i >= 0; i--) {
+ var coin = coins[i];
+ if (player.intersects(coin) && !coin.collected) {
+ coin.collected = true;
+ coinScore += 10;
+ LK.setScore(LK.getScore() + 10);
+ LK.getSound('coin').play();
+ // Coin collection effect
+ tween(coin, {
+ scaleX: 2,
+ scaleY: 2,
+ alpha: 0
+ }, {
+ duration: 300,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ coin.destroy();
+ coins.splice(i, 1);
+ }
+ });
+ }
+ }
+ // Check if player fell off screen
+ if (player.y > 2732 + 100) {
+ LK.showGameOver();
+ }
+}
+// Clean up off-screen objects
+function cleanupObjects() {
+ // Clean platforms
+ for (var i = platforms.length - 1; i >= 0; i--) {
+ if (platforms[i].x < -200) {
+ platforms[i].destroy();
+ platforms.splice(i, 1);
+ }
+ }
+ // Clean spikes
+ for (var i = spikes.length - 1; i >= 0; i--) {
+ if (spikes[i].x < -200) {
+ spikes[i].destroy();
+ spikes.splice(i, 1);
+ }
+ }
+ // Clean coins
+ for (var i = coins.length - 1; i >= 0; i--) {
+ if (coins[i].x < -200 && !coins[i].collected) {
+ coins[i].destroy();
+ coins.splice(i, 1);
+ }
+ }
+ // Clean barriers
+ for (var i = barriers.length - 1; i >= 0; i--) {
+ if (barriers[i].x < -200) {
+ barriers[i].destroy();
+ barriers.splice(i, 1);
+ }
+ }
+}
+// Touch controls
+game.down = function (x, y, obj) {
+ player.jump();
+};
+// Main game loop
+game.update = function () {
+ // Update distance score
+ distanceScore += gameSpeed * 0.1;
+ LK.setScore(Math.floor(distanceScore) + coinScore);
+ // Update UI
+ scoreText.setText('Score: ' + LK.getScore());
+ distanceText.setText('Distance: ' + Math.floor(distanceScore) + 'm');
+ // Increase game speed gradually
+ gameSpeed = Math.min(baseSpeed + LK.getScore() * speedIncrement, maxSpeed);
+ // Spawn obstacles
+ spawnTimer++;
+ var spawnRate = Math.max(60 - Math.floor(LK.getScore() * 0.1), 30);
+ if (spawnTimer >= spawnRate) {
+ spawnObstacles();
+ spawnTimer = 0;
+ }
+ // Check collisions
+ checkCollisions();
+ // Clean up objects
+ cleanupObjects();
+};
+// Start background music
+LK.playMusic('bgmusic');
\ No newline at end of file