/**** * 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