/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Ground = Container.expand(function () {
var self = Container.call(this);
var groundGraphics = self.attachAsset('ground', {
anchorX: 0,
anchorY: 0
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.isJumping = false;
self.isDead = false;
self.velocity = 0;
self.gravity = 0.7;
self.jumpForce = -18;
self.groundY = 0;
self.jump = function () {
if (!self.isJumping && !self.isDead) {
self.velocity = self.jumpForce;
self.isJumping = true;
LK.getSound('jump').play();
}
};
self.update = function () {
if (self.isDead) {
return;
}
self.velocity += self.gravity;
self.y += self.velocity;
// Check if player has landed
if (self.y >= self.groundY) {
self.y = self.groundY;
self.velocity = 0;
self.isJumping = false;
}
};
self.die = function () {
if (!self.isDead) {
self.isDead = true;
LK.getSound('death').play();
LK.effects.flashObject(self, 0xff0000, 500);
tween(self, {
alpha: 0
}, {
duration: 1000,
onFinish: function onFinish() {
LK.effects.flashScreen(0xff0000, 500);
LK.showGameOver();
}
});
}
};
return self;
});
var Spike = Container.expand(function () {
var self = Container.call(this);
var spikeGraphics = self.attachAsset('spike', {
anchorX: 0.5,
anchorY: 1.0
});
self.speed = 8;
self.active = true;
self.update = function () {
if (!self.active) {
return;
}
self.x -= self.speed;
// Remove if off screen
if (self.x < -50) {
self.active = false;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var player;
var ground;
var spikes = [];
var nextSpawnTime = 0;
var minSpawnInterval = 60;
var maxSpawnInterval = 120;
var score = 0;
var increaseDifficultyAt = 10;
var lastIncreasedAt = 0;
var gameStarted = false;
var spikePool = [];
// Create and position the score text
var scoreTxt = new Text2('0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 50;
// Create instruction text
var instructionTxt = new Text2('Tap anywhere to jump', {
size: 60,
fill: 0xFFFFFF
});
instructionTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(instructionTxt);
// Initialize the game
function initGame() {
// Reset game variables
score = 0;
LK.setScore(0);
scoreTxt.setText('0');
nextSpawnTime = 60;
minSpawnInterval = 60;
maxSpawnInterval = 120;
increaseDifficultyAt = 10;
lastIncreasedAt = 0;
// Clear existing spikes
for (var i = 0; i < spikes.length; i++) {
if (spikes[i].parent) {
spikes[i].parent.removeChild(spikes[i]);
}
}
spikes = [];
// Create ground
if (ground && ground.parent) {
ground.parent.removeChild(ground);
}
ground = new Ground();
ground.y = 2732 - 50;
game.addChild(ground);
// Create player
if (player && player.parent) {
player.parent.removeChild(player);
}
player = new Player();
player.x = 300;
player.y = ground.y;
player.groundY = ground.y;
player.isDead = false;
player.alpha = 1;
game.addChild(player);
// Play background music
LK.playMusic('bgMusic');
}
// Get a spike from the pool or create a new one
function getSpike() {
for (var i = 0; i < spikePool.length; i++) {
if (!spikePool[i].active && !spikePool[i].parent) {
spikePool[i].active = true;
return spikePool[i];
}
}
var newSpike = new Spike();
spikePool.push(newSpike);
return newSpike;
}
// Spawn a new spike
function spawnSpike() {
var spike = getSpike();
spike.x = 2048 + 50;
spike.y = ground.y;
spike.active = true;
spike.speed = 8 + Math.floor(score / increaseDifficultyAt);
game.addChild(spike);
spikes.push(spike);
// Set next spawn time
nextSpawnTime = LK.ticks + Math.floor(Math.random() * (maxSpawnInterval - minSpawnInterval)) + minSpawnInterval;
}
// Check collisions between player and spikes
function checkCollisions() {
if (player.isDead) {
return;
}
for (var i = 0; i < spikes.length; i++) {
if (spikes[i].active && player.intersects(spikes[i])) {
player.die();
return;
}
}
}
// Update spikes
function updateSpikes() {
for (var i = spikes.length - 1; i >= 0; i--) {
spikes[i].update();
// Remove inactive spikes from the array
if (!spikes[i].active) {
if (spikes[i].parent) {
spikes[i].parent.removeChild(spikes[i]);
}
spikes.splice(i, 1);
// Increase score when player passes a spike
score++;
LK.setScore(score);
scoreTxt.setText(score.toString());
}
}
}
// Increase game difficulty
function increaseDifficulty() {
if (score > 0 && score % increaseDifficultyAt === 0 && lastIncreasedAt !== score) {
lastIncreasedAt = score;
// Decrease spawn interval to make the game harder
if (minSpawnInterval > 30) {
minSpawnInterval -= 5;
}
if (maxSpawnInterval > 60) {
maxSpawnInterval -= 5;
}
}
}
// Handle game input
game.down = function (x, y, obj) {
if (!gameStarted) {
gameStarted = true;
instructionTxt.parent.removeChild(instructionTxt);
initGame();
} else {
player.jump();
}
};
// Game update loop
game.update = function () {
if (!gameStarted) {
return;
}
// Update player
player.update();
// Spawn new spikes
if (LK.ticks >= nextSpawnTime) {
spawnSpike();
}
// Update spikes
updateSpikes();
// Check for collisions
checkCollisions();
// Increase difficulty
increaseDifficulty();
};
// Initialize game on first load
LK.setTimeout(function () {
// Keep instruction text until player starts
gameStarted = false;
}, 100); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,262 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var Ground = Container.expand(function () {
+ var self = Container.call(this);
+ var groundGraphics = self.attachAsset('ground', {
+ anchorX: 0,
+ anchorY: 0
+ });
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.isJumping = false;
+ self.isDead = false;
+ self.velocity = 0;
+ self.gravity = 0.7;
+ self.jumpForce = -18;
+ self.groundY = 0;
+ self.jump = function () {
+ if (!self.isJumping && !self.isDead) {
+ self.velocity = self.jumpForce;
+ self.isJumping = true;
+ LK.getSound('jump').play();
+ }
+ };
+ self.update = function () {
+ if (self.isDead) {
+ return;
+ }
+ self.velocity += self.gravity;
+ self.y += self.velocity;
+ // Check if player has landed
+ if (self.y >= self.groundY) {
+ self.y = self.groundY;
+ self.velocity = 0;
+ self.isJumping = false;
+ }
+ };
+ self.die = function () {
+ if (!self.isDead) {
+ self.isDead = true;
+ LK.getSound('death').play();
+ LK.effects.flashObject(self, 0xff0000, 500);
+ tween(self, {
+ alpha: 0
+ }, {
+ duration: 1000,
+ onFinish: function onFinish() {
+ LK.effects.flashScreen(0xff0000, 500);
+ LK.showGameOver();
+ }
+ });
+ }
+ };
+ return self;
+});
+var Spike = Container.expand(function () {
+ var self = Container.call(this);
+ var spikeGraphics = self.attachAsset('spike', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.speed = 8;
+ self.active = true;
+ self.update = function () {
+ if (!self.active) {
+ return;
+ }
+ self.x -= self.speed;
+ // Remove if off screen
+ if (self.x < -50) {
+ self.active = false;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var player;
+var ground;
+var spikes = [];
+var nextSpawnTime = 0;
+var minSpawnInterval = 60;
+var maxSpawnInterval = 120;
+var score = 0;
+var increaseDifficultyAt = 10;
+var lastIncreasedAt = 0;
+var gameStarted = false;
+var spikePool = [];
+// Create and position the score text
+var scoreTxt = new Text2('0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+scoreTxt.y = 50;
+// Create instruction text
+var instructionTxt = new Text2('Tap anywhere to jump', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+instructionTxt.anchor.set(0.5, 0.5);
+LK.gui.center.addChild(instructionTxt);
+// Initialize the game
+function initGame() {
+ // Reset game variables
+ score = 0;
+ LK.setScore(0);
+ scoreTxt.setText('0');
+ nextSpawnTime = 60;
+ minSpawnInterval = 60;
+ maxSpawnInterval = 120;
+ increaseDifficultyAt = 10;
+ lastIncreasedAt = 0;
+ // Clear existing spikes
+ for (var i = 0; i < spikes.length; i++) {
+ if (spikes[i].parent) {
+ spikes[i].parent.removeChild(spikes[i]);
+ }
+ }
+ spikes = [];
+ // Create ground
+ if (ground && ground.parent) {
+ ground.parent.removeChild(ground);
+ }
+ ground = new Ground();
+ ground.y = 2732 - 50;
+ game.addChild(ground);
+ // Create player
+ if (player && player.parent) {
+ player.parent.removeChild(player);
+ }
+ player = new Player();
+ player.x = 300;
+ player.y = ground.y;
+ player.groundY = ground.y;
+ player.isDead = false;
+ player.alpha = 1;
+ game.addChild(player);
+ // Play background music
+ LK.playMusic('bgMusic');
+}
+// Get a spike from the pool or create a new one
+function getSpike() {
+ for (var i = 0; i < spikePool.length; i++) {
+ if (!spikePool[i].active && !spikePool[i].parent) {
+ spikePool[i].active = true;
+ return spikePool[i];
+ }
+ }
+ var newSpike = new Spike();
+ spikePool.push(newSpike);
+ return newSpike;
+}
+// Spawn a new spike
+function spawnSpike() {
+ var spike = getSpike();
+ spike.x = 2048 + 50;
+ spike.y = ground.y;
+ spike.active = true;
+ spike.speed = 8 + Math.floor(score / increaseDifficultyAt);
+ game.addChild(spike);
+ spikes.push(spike);
+ // Set next spawn time
+ nextSpawnTime = LK.ticks + Math.floor(Math.random() * (maxSpawnInterval - minSpawnInterval)) + minSpawnInterval;
+}
+// Check collisions between player and spikes
+function checkCollisions() {
+ if (player.isDead) {
+ return;
+ }
+ for (var i = 0; i < spikes.length; i++) {
+ if (spikes[i].active && player.intersects(spikes[i])) {
+ player.die();
+ return;
+ }
+ }
+}
+// Update spikes
+function updateSpikes() {
+ for (var i = spikes.length - 1; i >= 0; i--) {
+ spikes[i].update();
+ // Remove inactive spikes from the array
+ if (!spikes[i].active) {
+ if (spikes[i].parent) {
+ spikes[i].parent.removeChild(spikes[i]);
+ }
+ spikes.splice(i, 1);
+ // Increase score when player passes a spike
+ score++;
+ LK.setScore(score);
+ scoreTxt.setText(score.toString());
+ }
+ }
+}
+// Increase game difficulty
+function increaseDifficulty() {
+ if (score > 0 && score % increaseDifficultyAt === 0 && lastIncreasedAt !== score) {
+ lastIncreasedAt = score;
+ // Decrease spawn interval to make the game harder
+ if (minSpawnInterval > 30) {
+ minSpawnInterval -= 5;
+ }
+ if (maxSpawnInterval > 60) {
+ maxSpawnInterval -= 5;
+ }
+ }
+}
+// Handle game input
+game.down = function (x, y, obj) {
+ if (!gameStarted) {
+ gameStarted = true;
+ instructionTxt.parent.removeChild(instructionTxt);
+ initGame();
+ } else {
+ player.jump();
+ }
+};
+// Game update loop
+game.update = function () {
+ if (!gameStarted) {
+ return;
+ }
+ // Update player
+ player.update();
+ // Spawn new spikes
+ if (LK.ticks >= nextSpawnTime) {
+ spawnSpike();
+ }
+ // Update spikes
+ updateSpikes();
+ // Check for collisions
+ checkCollisions();
+ // Increase difficulty
+ increaseDifficulty();
+};
+// Initialize game on first load
+LK.setTimeout(function () {
+ // Keep instruction text until player starts
+ gameStarted = false;
+}, 100);
\ No newline at end of file