/****
* Classes
****/
var Ground = Container.expand(function (x) {
var self = Container.call(this);
var groundGraphics = self.attachAsset('ground', {
anchorX: 0,
anchorY: 0
});
self.x = x;
self.y = 2440;
self.scrollSpeed = -8;
self.update = function () {
self.x += self.scrollSpeed;
};
return self;
});
var Obstacle = Container.expand(function (type, x, y) {
var self = Container.call(this);
self.type = type;
var obstacleGraphics;
if (type === 'spike') {
obstacleGraphics = self.attachAsset('spike', {
anchorX: 0.5,
anchorY: 1.0
});
} else if (type === 'block') {
obstacleGraphics = self.attachAsset('block', {
anchorX: 0.5,
anchorY: 1.0
});
}
self.x = x;
self.y = y;
self.scrollSpeed = -8;
self.update = function () {
self.x += self.scrollSpeed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.onGround = false;
self.jumpPower = -25;
self.gravity = 1.2;
self.groundY = 2400;
self.jump = function () {
if (self.onGround) {
self.velocityY = self.jumpPower;
self.onGround = false;
LK.getSound('jump').play();
}
};
self.update = function () {
// Apply gravity
self.velocityY += self.gravity;
self.y += self.velocityY;
// Ground collision
if (self.y >= self.groundY) {
self.y = self.groundY;
self.velocityY = 0;
self.onGround = true;
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var player;
var obstacles = [];
var grounds = [];
var currentLevel = 1;
var gameRunning = false;
var levelStartX = 0;
var nextObstacleX = 2500;
// Level data - obstacles defined as [type, xOffset, yOffset]
var levelData = {
1: [['spike', 2500, 2400], ['spike', 2800, 2400], ['block', 3200, 2320], ['spike', 3600, 2400], ['spike', 4000, 2400], ['block', 4400, 2240], ['spike', 4800, 2400], ['block', 5200, 2320], ['spike', 5600, 2400]],
2: [['spike', 2500, 2400], ['block', 2800, 2320], ['spike', 3000, 2400], ['block', 3400, 2240], ['block', 3600, 2320], ['spike', 4000, 2400], ['spike', 4200, 2400], ['block', 4600, 2160], ['spike', 5000, 2400], ['block', 5400, 2320], ['spike', 5800, 2400]],
3: [['spike', 2500, 2400], ['block', 2700, 2320], ['spike', 2900, 2400], ['block', 3200, 2240], ['spike', 3500, 2400], ['block', 3700, 2160], ['spike', 4000, 2400], ['spike', 4200, 2400], ['block', 4500, 2320], ['block', 4700, 2240], ['spike', 5100, 2400], ['block', 5400, 2160], ['spike', 5800, 2400]]
};
// UI Elements
var levelText = new Text2('Level 1', {
size: 80,
fill: 0xFFFFFF
});
levelText.anchor.set(0.5, 0);
LK.gui.top.addChild(levelText);
levelText.y = 100;
function initializeLevel() {
// Clear existing obstacles and grounds
for (var i = obstacles.length - 1; i >= 0; i--) {
obstacles[i].destroy();
obstacles.splice(i, 1);
}
for (var j = grounds.length - 1; j >= 0; j--) {
grounds[j].destroy();
grounds.splice(j, 1);
}
// Create player
if (player) {
player.destroy();
}
player = game.addChild(new Player());
player.x = 300;
player.y = 2400;
// Create ground tiles
for (var g = 0; g < 80; g++) {
var ground = game.addChild(new Ground(g * 100));
grounds.push(ground);
}
// Create obstacles for current level
var levelObstacles = levelData[currentLevel];
if (levelObstacles) {
for (var o = 0; o < levelObstacles.length; o++) {
var obstacleData = levelObstacles[o];
var obstacle = game.addChild(new Obstacle(obstacleData[0], obstacleData[1], obstacleData[2]));
obstacles.push(obstacle);
}
}
gameRunning = true;
levelText.setText('Level ' + currentLevel);
}
function restartLevel() {
LK.getSound('death').play();
LK.effects.flashScreen(0xFF0000, 500);
LK.setTimeout(function () {
initializeLevel();
}, 600);
}
function nextLevel() {
currentLevel++;
if (currentLevel > 3) {
LK.showYouWin();
return;
}
LK.setTimeout(function () {
initializeLevel();
}, 1000);
}
function checkLevelComplete() {
var furthestObstacle = 0;
for (var i = 0; i < obstacles.length; i++) {
if (obstacles[i].x > furthestObstacle) {
furthestObstacle = obstacles[i].x;
}
}
// If player has passed all obstacles
if (player.x > furthestObstacle + 200) {
gameRunning = false;
nextLevel();
}
}
// Initialize first level
initializeLevel();
game.down = function (x, y, obj) {
if (gameRunning && player) {
player.jump();
}
};
game.update = function () {
if (!gameRunning) return;
// Check for collisions
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
gameRunning = false;
restartLevel();
return;
}
// Remove obstacles that are off screen
if (obstacle.x < -200) {
obstacle.destroy();
obstacles.splice(i, 1);
}
}
// Remove ground tiles that are off screen and add new ones
for (var j = grounds.length - 1; j >= 0; j--) {
var ground = grounds[j];
if (ground.x < -200) {
ground.destroy();
grounds.splice(j, 1);
}
}
// Add new ground tiles as needed
while (grounds.length < 80) {
var lastGround = grounds[grounds.length - 1];
var newX = lastGround ? lastGround.x + 100 : 7800;
var newGround = game.addChild(new Ground(newX));
grounds.push(newGround);
}
checkLevelComplete();
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,207 @@
-/****
+/****
+* Classes
+****/
+var Ground = Container.expand(function (x) {
+ var self = Container.call(this);
+ var groundGraphics = self.attachAsset('ground', {
+ anchorX: 0,
+ anchorY: 0
+ });
+ self.x = x;
+ self.y = 2440;
+ self.scrollSpeed = -8;
+ self.update = function () {
+ self.x += self.scrollSpeed;
+ };
+ return self;
+});
+var Obstacle = Container.expand(function (type, x, y) {
+ var self = Container.call(this);
+ self.type = type;
+ var obstacleGraphics;
+ if (type === 'spike') {
+ obstacleGraphics = self.attachAsset('spike', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ } else if (type === 'block') {
+ obstacleGraphics = self.attachAsset('block', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ }
+ self.x = x;
+ self.y = y;
+ self.scrollSpeed = -8;
+ self.update = function () {
+ self.x += self.scrollSpeed;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.velocityY = 0;
+ self.onGround = false;
+ self.jumpPower = -25;
+ self.gravity = 1.2;
+ self.groundY = 2400;
+ self.jump = function () {
+ if (self.onGround) {
+ self.velocityY = self.jumpPower;
+ self.onGround = false;
+ LK.getSound('jump').play();
+ }
+ };
+ self.update = function () {
+ // Apply gravity
+ self.velocityY += self.gravity;
+ self.y += self.velocityY;
+ // Ground collision
+ if (self.y >= self.groundY) {
+ self.y = self.groundY;
+ self.velocityY = 0;
+ self.onGround = true;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var player;
+var obstacles = [];
+var grounds = [];
+var currentLevel = 1;
+var gameRunning = false;
+var levelStartX = 0;
+var nextObstacleX = 2500;
+// Level data - obstacles defined as [type, xOffset, yOffset]
+var levelData = {
+ 1: [['spike', 2500, 2400], ['spike', 2800, 2400], ['block', 3200, 2320], ['spike', 3600, 2400], ['spike', 4000, 2400], ['block', 4400, 2240], ['spike', 4800, 2400], ['block', 5200, 2320], ['spike', 5600, 2400]],
+ 2: [['spike', 2500, 2400], ['block', 2800, 2320], ['spike', 3000, 2400], ['block', 3400, 2240], ['block', 3600, 2320], ['spike', 4000, 2400], ['spike', 4200, 2400], ['block', 4600, 2160], ['spike', 5000, 2400], ['block', 5400, 2320], ['spike', 5800, 2400]],
+ 3: [['spike', 2500, 2400], ['block', 2700, 2320], ['spike', 2900, 2400], ['block', 3200, 2240], ['spike', 3500, 2400], ['block', 3700, 2160], ['spike', 4000, 2400], ['spike', 4200, 2400], ['block', 4500, 2320], ['block', 4700, 2240], ['spike', 5100, 2400], ['block', 5400, 2160], ['spike', 5800, 2400]]
+};
+// UI Elements
+var levelText = new Text2('Level 1', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+levelText.anchor.set(0.5, 0);
+LK.gui.top.addChild(levelText);
+levelText.y = 100;
+function initializeLevel() {
+ // Clear existing obstacles and grounds
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ obstacles[i].destroy();
+ obstacles.splice(i, 1);
+ }
+ for (var j = grounds.length - 1; j >= 0; j--) {
+ grounds[j].destroy();
+ grounds.splice(j, 1);
+ }
+ // Create player
+ if (player) {
+ player.destroy();
+ }
+ player = game.addChild(new Player());
+ player.x = 300;
+ player.y = 2400;
+ // Create ground tiles
+ for (var g = 0; g < 80; g++) {
+ var ground = game.addChild(new Ground(g * 100));
+ grounds.push(ground);
+ }
+ // Create obstacles for current level
+ var levelObstacles = levelData[currentLevel];
+ if (levelObstacles) {
+ for (var o = 0; o < levelObstacles.length; o++) {
+ var obstacleData = levelObstacles[o];
+ var obstacle = game.addChild(new Obstacle(obstacleData[0], obstacleData[1], obstacleData[2]));
+ obstacles.push(obstacle);
+ }
+ }
+ gameRunning = true;
+ levelText.setText('Level ' + currentLevel);
+}
+function restartLevel() {
+ LK.getSound('death').play();
+ LK.effects.flashScreen(0xFF0000, 500);
+ LK.setTimeout(function () {
+ initializeLevel();
+ }, 600);
+}
+function nextLevel() {
+ currentLevel++;
+ if (currentLevel > 3) {
+ LK.showYouWin();
+ return;
+ }
+ LK.setTimeout(function () {
+ initializeLevel();
+ }, 1000);
+}
+function checkLevelComplete() {
+ var furthestObstacle = 0;
+ for (var i = 0; i < obstacles.length; i++) {
+ if (obstacles[i].x > furthestObstacle) {
+ furthestObstacle = obstacles[i].x;
+ }
+ }
+ // If player has passed all obstacles
+ if (player.x > furthestObstacle + 200) {
+ gameRunning = false;
+ nextLevel();
+ }
+}
+// Initialize first level
+initializeLevel();
+game.down = function (x, y, obj) {
+ if (gameRunning && player) {
+ player.jump();
+ }
+};
+game.update = function () {
+ if (!gameRunning) return;
+ // Check for collisions
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obstacle = obstacles[i];
+ if (player.intersects(obstacle)) {
+ gameRunning = false;
+ restartLevel();
+ return;
+ }
+ // Remove obstacles that are off screen
+ if (obstacle.x < -200) {
+ obstacle.destroy();
+ obstacles.splice(i, 1);
+ }
+ }
+ // Remove ground tiles that are off screen and add new ones
+ for (var j = grounds.length - 1; j >= 0; j--) {
+ var ground = grounds[j];
+ if (ground.x < -200) {
+ ground.destroy();
+ grounds.splice(j, 1);
+ }
+ }
+ // Add new ground tiles as needed
+ while (grounds.length < 80) {
+ var lastGround = grounds[grounds.length - 1];
+ var newX = lastGround ? lastGround.x + 100 : 7800;
+ var newGround = game.addChild(new Ground(newX));
+ grounds.push(newGround);
+ }
+ checkLevelComplete();
+};
\ No newline at end of file