/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0
});
/****
* Classes
****/
var Ground = Container.expand(function () {
var self = Container.call(this);
var groundGraphics = self.attachAsset('ground', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -8;
self.update = function () {
self.x += self.speed;
// If ground piece moves off screen, move it to the right side
if (self.x < -groundGraphics.width / 2) {
self.x = 2048 + groundGraphics.width / 2;
}
};
return self;
});
var Obstacle = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'spike';
self.speed = -8; // Default movement speed
var assetId = self.type;
var obstacleGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
if (self.type === 'spike') {
// Rotate spikes to point upward
obstacleGraphics.rotation = Math.PI * 0.75;
}
self.update = function () {
self.x += self.speed;
// Remove if off screen to the left
if (self.x < -100) {
self.destroy();
return true; // Signal that this obstacle should be removed
}
return false;
};
return self;
});
var Particle = Container.expand(function () {
var self = Container.call(this);
var particleGraphics = self.attachAsset('particle', {
anchorX: 0.5,
anchorY: 0.5
});
self.vx = (Math.random() - 0.5) * 10;
self.vy = (Math.random() - 0.5) * 10 - 5;
self.gravity = 0.3;
self.life = 30 + Math.random() * 20;
self.update = function () {
self.x += self.vx;
self.vy += self.gravity;
self.y += self.vy;
self.life--;
particleGraphics.alpha = self.life / 50;
if (self.life <= 0) {
self.destroy();
return true; // Signal that this particle should be removed
}
return false;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.gravity = 0.8;
self.velocity = 0;
self.jumpForce = -18;
self.isJumping = false;
self.isDead = false;
self.friction = 0.95; // Ice physics - less friction
self.jump = function () {
if (!self.isJumping && !self.isDead) {
self.velocity = self.jumpForce;
self.isJumping = true;
LK.getSound('jump').play();
// Create jump particles
for (var i = 0; i < 5; i++) {
createParticle(self.x, self.y + 40);
}
}
};
self.die = function () {
if (!self.isDead) {
self.isDead = true;
LK.getSound('death').play();
LK.effects.flashObject(self, 0xff0000, 500);
// Create death particles
for (var i = 0; i < 15; i++) {
createParticle(self.x, self.y);
}
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
};
self.update = function () {
if (self.isDead) {
return;
}
// Apply gravity
self.velocity += self.gravity;
// Apply velocity with ice physics (less friction when moving horizontally)
self.y += self.velocity;
// Rotation based on velocity
playerGraphics.rotation += 0.05;
// Check if player is below the screen
if (self.y > 2732) {
self.die();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEFA
});
/****
* Game Code
****/
// Game variables
var player;
var obstacles = [];
var grounds = [];
var particles = [];
var gameSpeed = 1;
var score = 0;
var highScore = storage.highScore || 0;
var difficulty = 1;
var isGameStarted = false;
var obstacleTimer;
var scoreInterval;
var difficultyInterval;
// UI elements
var scoreTxt = new Text2('0', {
size: 100,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var highScoreTxt = new Text2('Best: 0', {
size: 60,
fill: 0xFFFFFF
});
highScoreTxt.anchor.set(0.5, 0);
highScoreTxt.y = 110;
LK.gui.top.addChild(highScoreTxt);
var instructionsTxt = new Text2('Tap to Jump', {
size: 80,
fill: 0xFFFFFF
});
instructionsTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(instructionsTxt);
// Initialize the player
function initPlayer() {
player = new Player();
player.x = 500;
player.y = 2732 / 2;
game.addChild(player);
}
// Initialize the ground
function initGround() {
// Create multiple ground pieces to cover the width
var groundWidth = LK.getAsset('ground', {}).width;
var numGroundPieces = Math.ceil(2048 / groundWidth) + 2;
for (var i = 0; i < numGroundPieces; i++) {
var ground = new Ground();
ground.x = i * groundWidth;
ground.y = 2732 - 100;
game.addChild(ground);
grounds.push(ground);
}
// Create ceiling
var ceiling = game.addChild(LK.getAsset('ceiling', {
anchorX: 0.5,
anchorY: 0.5
}));
ceiling.x = 2048 / 2;
ceiling.y = 100;
}
// Create an obstacle
function createObstacle() {
var types = ['spike', 'platform'];
var type = types[Math.floor(Math.random() * types.length)];
var obstacle = new Obstacle(type);
obstacle.x = 2048 + 100;
// Position based on type
if (type === 'spike') {
// Place spikes on the ground
obstacle.y = 2732 - 130;
} else if (type === 'platform') {
// Random height for platforms
obstacle.y = 1600 + Math.random() * 800;
}
game.addChild(obstacle);
obstacles.push(obstacle);
// Adjust timer for next obstacle based on difficulty
var nextTime = 1500 - difficulty * 100;
if (nextTime < 800) {
nextTime = 800;
}
obstacleTimer = LK.setTimeout(createObstacle, nextTime);
}
// Create a particle
function createParticle(x, y) {
var particle = new Particle();
particle.x = x;
particle.y = y;
game.addChild(particle);
particles.push(particle);
}
// Start the game
function startGame() {
if (isGameStarted) {
return;
}
isGameStarted = true;
instructionsTxt.visible = false;
// Reset score
score = 0;
difficulty = 1;
updateScore();
// Start creating obstacles
createObstacle();
// Update score every second
scoreInterval = LK.setInterval(function () {
score += 1;
updateScore();
}, 1000);
// Increase difficulty every 10 seconds
difficultyInterval = LK.setInterval(function () {
difficulty += 0.5;
gameSpeed += 0.1;
// Update obstacle and ground speed
obstacles.forEach(function (obstacle) {
obstacle.speed = -8 * gameSpeed;
});
grounds.forEach(function (ground) {
ground.speed = -8 * gameSpeed;
});
}, 10000);
// Play the music
LK.playMusic('iceTheme');
}
// Update the score display
function updateScore() {
scoreTxt.setText(Math.floor(score));
if (score > highScore) {
highScore = score;
storage.highScore = highScore;
highScoreTxt.setText('Best: ' + Math.floor(highScore));
}
}
// Initialize the game
function initGame() {
initPlayer();
initGround();
// Set high score
highScore = storage.highScore || 0;
highScoreTxt.setText('Best: ' + Math.floor(highScore));
}
// Check collisions
function checkCollisions() {
if (!player || player.isDead) {
return;
}
// Check ground collision
var isOnGround = false;
grounds.forEach(function (ground) {
if (player.y + 40 >= ground.y - 15 && player.y - 40 < ground.y + 15 && Math.abs(player.x - ground.x) < 200) {
isOnGround = true;
player.y = ground.y - 40;
player.velocity = 0;
player.isJumping = false;
}
});
// Check ceiling collision
if (player.y - 40 <= 100 + 15) {
player.y = 100 + 15 + 40;
player.velocity = 0;
}
// Check obstacle collisions
obstacles.forEach(function (obstacle) {
if (player.intersects(obstacle)) {
player.die();
}
});
}
// Input event handlers
game.down = function (x, y) {
if (!isGameStarted) {
startGame();
}
if (player && !player.isDead) {
player.jump();
}
};
// Main update function
game.update = function () {
if (!isGameStarted) {
return;
}
// Update player
if (player) {
player.update();
}
// Update grounds
for (var i = 0; i < grounds.length; i++) {
grounds[i].update();
}
// Update obstacles
for (var i = obstacles.length - 1; i >= 0; i--) {
if (obstacles[i].update()) {
obstacles.splice(i, 1);
}
}
// Update particles
for (var i = particles.length - 1; i >= 0; i--) {
if (particles[i].update()) {
particles.splice(i, 1);
}
}
// Check collisions
checkCollisions();
};
// Initialize the game
initGame(); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,347 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1", {
+ highScore: 0
+});
+
+/****
+* Classes
+****/
+var Ground = Container.expand(function () {
+ var self = Container.call(this);
+ var groundGraphics = self.attachAsset('ground', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -8;
+ self.update = function () {
+ self.x += self.speed;
+ // If ground piece moves off screen, move it to the right side
+ if (self.x < -groundGraphics.width / 2) {
+ self.x = 2048 + groundGraphics.width / 2;
+ }
+ };
+ return self;
+});
+var Obstacle = Container.expand(function (type) {
+ var self = Container.call(this);
+ self.type = type || 'spike';
+ self.speed = -8; // Default movement speed
+ var assetId = self.type;
+ var obstacleGraphics = self.attachAsset(assetId, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ if (self.type === 'spike') {
+ // Rotate spikes to point upward
+ obstacleGraphics.rotation = Math.PI * 0.75;
+ }
+ self.update = function () {
+ self.x += self.speed;
+ // Remove if off screen to the left
+ if (self.x < -100) {
+ self.destroy();
+ return true; // Signal that this obstacle should be removed
+ }
+ return false;
+ };
+ return self;
+});
+var Particle = Container.expand(function () {
+ var self = Container.call(this);
+ var particleGraphics = self.attachAsset('particle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.vx = (Math.random() - 0.5) * 10;
+ self.vy = (Math.random() - 0.5) * 10 - 5;
+ self.gravity = 0.3;
+ self.life = 30 + Math.random() * 20;
+ self.update = function () {
+ self.x += self.vx;
+ self.vy += self.gravity;
+ self.y += self.vy;
+ self.life--;
+ particleGraphics.alpha = self.life / 50;
+ if (self.life <= 0) {
+ self.destroy();
+ return true; // Signal that this particle should be removed
+ }
+ return false;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.gravity = 0.8;
+ self.velocity = 0;
+ self.jumpForce = -18;
+ self.isJumping = false;
+ self.isDead = false;
+ self.friction = 0.95; // Ice physics - less friction
+ self.jump = function () {
+ if (!self.isJumping && !self.isDead) {
+ self.velocity = self.jumpForce;
+ self.isJumping = true;
+ LK.getSound('jump').play();
+ // Create jump particles
+ for (var i = 0; i < 5; i++) {
+ createParticle(self.x, self.y + 40);
+ }
+ }
+ };
+ self.die = function () {
+ if (!self.isDead) {
+ self.isDead = true;
+ LK.getSound('death').play();
+ LK.effects.flashObject(self, 0xff0000, 500);
+ // Create death particles
+ for (var i = 0; i < 15; i++) {
+ createParticle(self.x, self.y);
+ }
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 1000);
+ }
+ };
+ self.update = function () {
+ if (self.isDead) {
+ return;
+ }
+ // Apply gravity
+ self.velocity += self.gravity;
+ // Apply velocity with ice physics (less friction when moving horizontally)
+ self.y += self.velocity;
+ // Rotation based on velocity
+ playerGraphics.rotation += 0.05;
+ // Check if player is below the screen
+ if (self.y > 2732) {
+ self.die();
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEFA
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var player;
+var obstacles = [];
+var grounds = [];
+var particles = [];
+var gameSpeed = 1;
+var score = 0;
+var highScore = storage.highScore || 0;
+var difficulty = 1;
+var isGameStarted = false;
+var obstacleTimer;
+var scoreInterval;
+var difficultyInterval;
+// UI elements
+var scoreTxt = new Text2('0', {
+ size: 100,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var highScoreTxt = new Text2('Best: 0', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+highScoreTxt.anchor.set(0.5, 0);
+highScoreTxt.y = 110;
+LK.gui.top.addChild(highScoreTxt);
+var instructionsTxt = new Text2('Tap to Jump', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+instructionsTxt.anchor.set(0.5, 0.5);
+LK.gui.center.addChild(instructionsTxt);
+// Initialize the player
+function initPlayer() {
+ player = new Player();
+ player.x = 500;
+ player.y = 2732 / 2;
+ game.addChild(player);
+}
+// Initialize the ground
+function initGround() {
+ // Create multiple ground pieces to cover the width
+ var groundWidth = LK.getAsset('ground', {}).width;
+ var numGroundPieces = Math.ceil(2048 / groundWidth) + 2;
+ for (var i = 0; i < numGroundPieces; i++) {
+ var ground = new Ground();
+ ground.x = i * groundWidth;
+ ground.y = 2732 - 100;
+ game.addChild(ground);
+ grounds.push(ground);
+ }
+ // Create ceiling
+ var ceiling = game.addChild(LK.getAsset('ceiling', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ }));
+ ceiling.x = 2048 / 2;
+ ceiling.y = 100;
+}
+// Create an obstacle
+function createObstacle() {
+ var types = ['spike', 'platform'];
+ var type = types[Math.floor(Math.random() * types.length)];
+ var obstacle = new Obstacle(type);
+ obstacle.x = 2048 + 100;
+ // Position based on type
+ if (type === 'spike') {
+ // Place spikes on the ground
+ obstacle.y = 2732 - 130;
+ } else if (type === 'platform') {
+ // Random height for platforms
+ obstacle.y = 1600 + Math.random() * 800;
+ }
+ game.addChild(obstacle);
+ obstacles.push(obstacle);
+ // Adjust timer for next obstacle based on difficulty
+ var nextTime = 1500 - difficulty * 100;
+ if (nextTime < 800) {
+ nextTime = 800;
+ }
+ obstacleTimer = LK.setTimeout(createObstacle, nextTime);
+}
+// Create a particle
+function createParticle(x, y) {
+ var particle = new Particle();
+ particle.x = x;
+ particle.y = y;
+ game.addChild(particle);
+ particles.push(particle);
+}
+// Start the game
+function startGame() {
+ if (isGameStarted) {
+ return;
+ }
+ isGameStarted = true;
+ instructionsTxt.visible = false;
+ // Reset score
+ score = 0;
+ difficulty = 1;
+ updateScore();
+ // Start creating obstacles
+ createObstacle();
+ // Update score every second
+ scoreInterval = LK.setInterval(function () {
+ score += 1;
+ updateScore();
+ }, 1000);
+ // Increase difficulty every 10 seconds
+ difficultyInterval = LK.setInterval(function () {
+ difficulty += 0.5;
+ gameSpeed += 0.1;
+ // Update obstacle and ground speed
+ obstacles.forEach(function (obstacle) {
+ obstacle.speed = -8 * gameSpeed;
+ });
+ grounds.forEach(function (ground) {
+ ground.speed = -8 * gameSpeed;
+ });
+ }, 10000);
+ // Play the music
+ LK.playMusic('iceTheme');
+}
+// Update the score display
+function updateScore() {
+ scoreTxt.setText(Math.floor(score));
+ if (score > highScore) {
+ highScore = score;
+ storage.highScore = highScore;
+ highScoreTxt.setText('Best: ' + Math.floor(highScore));
+ }
+}
+// Initialize the game
+function initGame() {
+ initPlayer();
+ initGround();
+ // Set high score
+ highScore = storage.highScore || 0;
+ highScoreTxt.setText('Best: ' + Math.floor(highScore));
+}
+// Check collisions
+function checkCollisions() {
+ if (!player || player.isDead) {
+ return;
+ }
+ // Check ground collision
+ var isOnGround = false;
+ grounds.forEach(function (ground) {
+ if (player.y + 40 >= ground.y - 15 && player.y - 40 < ground.y + 15 && Math.abs(player.x - ground.x) < 200) {
+ isOnGround = true;
+ player.y = ground.y - 40;
+ player.velocity = 0;
+ player.isJumping = false;
+ }
+ });
+ // Check ceiling collision
+ if (player.y - 40 <= 100 + 15) {
+ player.y = 100 + 15 + 40;
+ player.velocity = 0;
+ }
+ // Check obstacle collisions
+ obstacles.forEach(function (obstacle) {
+ if (player.intersects(obstacle)) {
+ player.die();
+ }
+ });
+}
+// Input event handlers
+game.down = function (x, y) {
+ if (!isGameStarted) {
+ startGame();
+ }
+ if (player && !player.isDead) {
+ player.jump();
+ }
+};
+// Main update function
+game.update = function () {
+ if (!isGameStarted) {
+ return;
+ }
+ // Update player
+ if (player) {
+ player.update();
+ }
+ // Update grounds
+ for (var i = 0; i < grounds.length; i++) {
+ grounds[i].update();
+ }
+ // Update obstacles
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ if (obstacles[i].update()) {
+ obstacles.splice(i, 1);
+ }
+ }
+ // Update particles
+ for (var i = particles.length - 1; i >= 0; i--) {
+ if (particles[i].update()) {
+ particles.splice(i, 1);
+ }
+ }
+ // Check collisions
+ checkCollisions();
+};
+// Initialize the game
+initGame();
\ No newline at end of file