/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Dog = Container.expand(function () {
var self = Container.call(this);
var dogGraphics = self.attachAsset('dog', {
anchorX: 0.5,
anchorY: 1.0
});
return self;
});
var Obstacle = Container.expand(function (type) {
var self = Container.call(this);
self.obstacleType = type || 'car';
var obstacleGraphics;
if (self.obstacleType === 'car') {
obstacleGraphics = self.attachAsset('car', {
anchorX: 0.5,
anchorY: 1.0
});
} else if (self.obstacleType === 'tallCar') {
obstacleGraphics = self.attachAsset('tallCar', {
anchorX: 0.5,
anchorY: 1.0
});
} else if (self.obstacleType === 'gnome') {
obstacleGraphics = self.attachAsset('gnome', {
anchorX: 0.5,
anchorY: 1.0
});
} else if (self.obstacleType === 'fence') {
obstacleGraphics = self.attachAsset('fence', {
anchorX: 0.5,
anchorY: 1.0
});
}
self.speed = -8;
self.update = function () {
self.x += self.speed;
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerupGraphics = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -8;
self.collected = false;
self.update = function () {
self.x += self.speed;
self.rotation += 0.1;
};
return self;
});
var Walter = Container.expand(function () {
var self = Container.call(this);
var walterGraphics = self.attachAsset('walter', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityY = 0;
self.groundY = 0;
self.isJumping = false;
self.jumpPower = -25;
self.gravity = 1.2;
self.invulnerable = false;
self.invulnerabilityTime = 0;
self.jump = function () {
if (!self.isJumping) {
self.velocityY = self.jumpPower;
self.isJumping = true;
LK.getSound('jump').play();
}
};
self.update = function () {
if (self.isJumping) {
self.velocityY += self.gravity;
self.y += self.velocityY;
if (self.y >= self.groundY) {
self.y = self.groundY;
self.velocityY = 0;
self.isJumping = false;
}
}
if (self.invulnerable && self.invulnerabilityTime > 0) {
self.invulnerabilityTime--;
walterGraphics.alpha = self.invulnerabilityTime % 10 < 5 ? 0.5 : 1.0;
if (self.invulnerabilityTime <= 0) {
self.invulnerable = false;
walterGraphics.alpha = 1.0;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var gameSpeed = 8;
var distance = 0;
var obstacles = [];
var powerups = [];
var lives = 3;
var speedBoostTime = 0;
var lastObstacleX = 2048;
var lastPowerupX = 2048;
// Create ground
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0,
anchorY: 1.0,
x: 0,
y: 2732 - 100
}));
var groundY = ground.y - ground.height;
// Create Walter
var walter = game.addChild(new Walter());
walter.x = 300;
walter.y = groundY;
walter.groundY = groundY;
// Create Dog
var dog = game.addChild(new Dog());
dog.x = -200;
dog.y = groundY;
// Create UI
var scoreText = new Text2('Distance: 0m', {
size: 60,
fill: 0xFFFFFF
});
scoreText.anchor.set(0, 0);
LK.gui.topRight.addChild(scoreText);
var livesText = new Text2('Lives: 3', {
size: 60,
fill: 0xFFFFFF
});
livesText.anchor.set(0, 0);
livesText.x = -400;
LK.gui.topRight.addChild(livesText);
var instructionText = new Text2('TAP TO JUMP!', {
size: 80,
fill: 0xFFFF00
});
instructionText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(instructionText);
// Hide instruction after 3 seconds
LK.setTimeout(function () {
if (instructionText.parent) {
instructionText.parent.removeChild(instructionText);
}
}, 3000);
function spawnObstacle() {
if (lastObstacleX <= 1500) {
var obstacleTypes = ['car', 'tallCar', 'gnome', 'fence'];
var randomType = obstacleTypes[Math.floor(Math.random() * obstacleTypes.length)];
var obstacle = new Obstacle(randomType);
obstacle.x = 2048 + 100;
obstacle.y = groundY;
obstacle.speed = -gameSpeed;
obstacles.push(obstacle);
game.addChild(obstacle);
lastObstacleX = obstacle.x;
}
}
function spawnPowerup() {
if (Math.random() < 0.3 && lastPowerupX <= 1000) {
var powerup = new PowerUp();
powerup.x = 2048 + 50;
powerup.y = groundY - 50;
powerup.speed = -gameSpeed;
powerups.push(powerup);
game.addChild(powerup);
lastPowerupX = powerup.x;
}
}
function checkCollisions() {
// Check obstacle collisions
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
if (walter.intersects(obstacle) && !walter.invulnerable) {
LK.getSound('crash').play();
lives--;
livesText.setText('Lives: ' + lives);
if (lives <= 0) {
LK.showGameOver();
return;
}
walter.invulnerable = true;
walter.invulnerabilityTime = 120; // 2 seconds at 60fps
LK.effects.flashScreen(0xFF0000, 500);
}
if (obstacle.x < -200) {
obstacle.destroy();
obstacles.splice(i, 1);
}
}
// Check powerup collisions
for (var j = powerups.length - 1; j >= 0; j--) {
var powerup = powerups[j];
if (walter.intersects(powerup) && !powerup.collected) {
LK.getSound('collect').play();
powerup.collected = true;
speedBoostTime = 300; // 5 seconds boost
LK.effects.flashObject(walter, 0xFFD700, 500);
powerup.destroy();
powerups.splice(j, 1);
continue;
}
if (powerup.x < -100) {
powerup.destroy();
powerups.splice(j, 1);
}
}
}
function updateDog() {
var targetX = walter.x - 400;
if (dog.x < targetX) {
dog.x += 3;
}
// Check if dog catches Walter
if (dog.intersects(walter) && !walter.invulnerable) {
LK.effects.flashScreen(0xFF0000, 1000);
LK.showGameOver();
}
}
game.down = function (x, y, obj) {
walter.jump();
};
game.update = function () {
// Update distance and speed
distance += gameSpeed * 0.1;
gameSpeed += 0.002; // Gradually increase speed
// Update speed boost
if (speedBoostTime > 0) {
speedBoostTime--;
gameSpeed *= 1.5;
}
// Update obstacle speeds
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].speed = -gameSpeed;
}
for (var j = 0; j < powerups.length; j++) {
powerups[j].speed = -gameSpeed;
}
// Update last obstacle position
if (obstacles.length > 0) {
lastObstacleX = obstacles[obstacles.length - 1].x;
} else {
lastObstacleX = 0;
}
// Update last powerup position
if (powerups.length > 0) {
lastPowerupX = powerups[powerups.length - 1].x;
} else {
lastPowerupX = 0;
}
// Spawn obstacles and powerups
if (LK.ticks % 60 === 0) {
// Every second
spawnObstacle();
spawnPowerup();
}
// Update game objects
updateDog();
checkCollisions();
// Update UI
scoreText.setText('Distance: ' + Math.floor(distance) + 'm');
// Update score for leaderboard
LK.setScore(Math.floor(distance));
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,283 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Dog = Container.expand(function () {
+ var self = Container.call(this);
+ var dogGraphics = self.attachAsset('dog', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ return self;
+});
+var Obstacle = Container.expand(function (type) {
+ var self = Container.call(this);
+ self.obstacleType = type || 'car';
+ var obstacleGraphics;
+ if (self.obstacleType === 'car') {
+ obstacleGraphics = self.attachAsset('car', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ } else if (self.obstacleType === 'tallCar') {
+ obstacleGraphics = self.attachAsset('tallCar', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ } else if (self.obstacleType === 'gnome') {
+ obstacleGraphics = self.attachAsset('gnome', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ } else if (self.obstacleType === 'fence') {
+ obstacleGraphics = self.attachAsset('fence', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ }
+ self.speed = -8;
+ self.update = function () {
+ self.x += self.speed;
+ };
+ return self;
+});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var powerupGraphics = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -8;
+ self.collected = false;
+ self.update = function () {
+ self.x += self.speed;
+ self.rotation += 0.1;
+ };
+ return self;
+});
+var Walter = Container.expand(function () {
+ var self = Container.call(this);
+ var walterGraphics = self.attachAsset('walter', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.velocityY = 0;
+ self.groundY = 0;
+ self.isJumping = false;
+ self.jumpPower = -25;
+ self.gravity = 1.2;
+ self.invulnerable = false;
+ self.invulnerabilityTime = 0;
+ self.jump = function () {
+ if (!self.isJumping) {
+ self.velocityY = self.jumpPower;
+ self.isJumping = true;
+ LK.getSound('jump').play();
+ }
+ };
+ self.update = function () {
+ if (self.isJumping) {
+ self.velocityY += self.gravity;
+ self.y += self.velocityY;
+ if (self.y >= self.groundY) {
+ self.y = self.groundY;
+ self.velocityY = 0;
+ self.isJumping = false;
+ }
+ }
+ if (self.invulnerable && self.invulnerabilityTime > 0) {
+ self.invulnerabilityTime--;
+ walterGraphics.alpha = self.invulnerabilityTime % 10 < 5 ? 0.5 : 1.0;
+ if (self.invulnerabilityTime <= 0) {
+ self.invulnerable = false;
+ walterGraphics.alpha = 1.0;
+ }
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var gameSpeed = 8;
+var distance = 0;
+var obstacles = [];
+var powerups = [];
+var lives = 3;
+var speedBoostTime = 0;
+var lastObstacleX = 2048;
+var lastPowerupX = 2048;
+// Create ground
+var ground = game.addChild(LK.getAsset('ground', {
+ anchorX: 0,
+ anchorY: 1.0,
+ x: 0,
+ y: 2732 - 100
+}));
+var groundY = ground.y - ground.height;
+// Create Walter
+var walter = game.addChild(new Walter());
+walter.x = 300;
+walter.y = groundY;
+walter.groundY = groundY;
+// Create Dog
+var dog = game.addChild(new Dog());
+dog.x = -200;
+dog.y = groundY;
+// Create UI
+var scoreText = new Text2('Distance: 0m', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0, 0);
+LK.gui.topRight.addChild(scoreText);
+var livesText = new Text2('Lives: 3', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+livesText.anchor.set(0, 0);
+livesText.x = -400;
+LK.gui.topRight.addChild(livesText);
+var instructionText = new Text2('TAP TO JUMP!', {
+ size: 80,
+ fill: 0xFFFF00
+});
+instructionText.anchor.set(0.5, 0.5);
+LK.gui.center.addChild(instructionText);
+// Hide instruction after 3 seconds
+LK.setTimeout(function () {
+ if (instructionText.parent) {
+ instructionText.parent.removeChild(instructionText);
+ }
+}, 3000);
+function spawnObstacle() {
+ if (lastObstacleX <= 1500) {
+ var obstacleTypes = ['car', 'tallCar', 'gnome', 'fence'];
+ var randomType = obstacleTypes[Math.floor(Math.random() * obstacleTypes.length)];
+ var obstacle = new Obstacle(randomType);
+ obstacle.x = 2048 + 100;
+ obstacle.y = groundY;
+ obstacle.speed = -gameSpeed;
+ obstacles.push(obstacle);
+ game.addChild(obstacle);
+ lastObstacleX = obstacle.x;
+ }
+}
+function spawnPowerup() {
+ if (Math.random() < 0.3 && lastPowerupX <= 1000) {
+ var powerup = new PowerUp();
+ powerup.x = 2048 + 50;
+ powerup.y = groundY - 50;
+ powerup.speed = -gameSpeed;
+ powerups.push(powerup);
+ game.addChild(powerup);
+ lastPowerupX = powerup.x;
+ }
+}
+function checkCollisions() {
+ // Check obstacle collisions
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obstacle = obstacles[i];
+ if (walter.intersects(obstacle) && !walter.invulnerable) {
+ LK.getSound('crash').play();
+ lives--;
+ livesText.setText('Lives: ' + lives);
+ if (lives <= 0) {
+ LK.showGameOver();
+ return;
+ }
+ walter.invulnerable = true;
+ walter.invulnerabilityTime = 120; // 2 seconds at 60fps
+ LK.effects.flashScreen(0xFF0000, 500);
+ }
+ if (obstacle.x < -200) {
+ obstacle.destroy();
+ obstacles.splice(i, 1);
+ }
+ }
+ // Check powerup collisions
+ for (var j = powerups.length - 1; j >= 0; j--) {
+ var powerup = powerups[j];
+ if (walter.intersects(powerup) && !powerup.collected) {
+ LK.getSound('collect').play();
+ powerup.collected = true;
+ speedBoostTime = 300; // 5 seconds boost
+ LK.effects.flashObject(walter, 0xFFD700, 500);
+ powerup.destroy();
+ powerups.splice(j, 1);
+ continue;
+ }
+ if (powerup.x < -100) {
+ powerup.destroy();
+ powerups.splice(j, 1);
+ }
+ }
+}
+function updateDog() {
+ var targetX = walter.x - 400;
+ if (dog.x < targetX) {
+ dog.x += 3;
+ }
+ // Check if dog catches Walter
+ if (dog.intersects(walter) && !walter.invulnerable) {
+ LK.effects.flashScreen(0xFF0000, 1000);
+ LK.showGameOver();
+ }
+}
+game.down = function (x, y, obj) {
+ walter.jump();
+};
+game.update = function () {
+ // Update distance and speed
+ distance += gameSpeed * 0.1;
+ gameSpeed += 0.002; // Gradually increase speed
+ // Update speed boost
+ if (speedBoostTime > 0) {
+ speedBoostTime--;
+ gameSpeed *= 1.5;
+ }
+ // Update obstacle speeds
+ for (var i = 0; i < obstacles.length; i++) {
+ obstacles[i].speed = -gameSpeed;
+ }
+ for (var j = 0; j < powerups.length; j++) {
+ powerups[j].speed = -gameSpeed;
+ }
+ // Update last obstacle position
+ if (obstacles.length > 0) {
+ lastObstacleX = obstacles[obstacles.length - 1].x;
+ } else {
+ lastObstacleX = 0;
+ }
+ // Update last powerup position
+ if (powerups.length > 0) {
+ lastPowerupX = powerups[powerups.length - 1].x;
+ } else {
+ lastPowerupX = 0;
+ }
+ // Spawn obstacles and powerups
+ if (LK.ticks % 60 === 0) {
+ // Every second
+ spawnObstacle();
+ spawnPowerup();
+ }
+ // Update game objects
+ updateDog();
+ checkCollisions();
+ // Update UI
+ scoreText.setText('Distance: ' + Math.floor(distance) + 'm');
+ // Update score for leaderboard
+ LK.setScore(Math.floor(distance));
+};
\ No newline at end of file