/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = gameSpeed;
self.collected = false;
self.update = function () {
self.x -= self.speed;
if (!self.collected) {
coinGraphics.rotation += 0.1;
}
};
return self;
});
var Obstacle = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'low';
if (self.type === 'high') {
var obstacleGraphics = self.attachAsset('highObstacle', {
anchorX: 0.5,
anchorY: 1
});
self.y = 2532;
} else {
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 1
});
self.y = 2632;
}
self.speed = gameSpeed;
self.update = function () {
self.x -= self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1
});
self.isJumping = false;
self.isSliding = false;
self.groundY = 2632;
self.jumpHeight = 200;
self.velocity = 0;
self.gravity = 12;
self.jump = function () {
if (!self.isJumping && !self.isSliding) {
self.isJumping = true;
self.velocity = -18;
LK.getSound('jump').play();
}
};
self.slide = function () {
if (!self.isSliding && !self.isJumping) {
self.isSliding = true;
playerGraphics.scaleY = 0.5;
LK.setTimeout(function () {
self.isSliding = false;
playerGraphics.scaleY = 1;
}, 600);
}
};
self.update = function () {
if (self.isJumping) {
self.velocity += self.gravity;
self.y += self.velocity;
if (self.y >= self.groundY) {
self.y = self.groundY;
self.isJumping = false;
self.velocity = 0;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var gameSpeed = 8;
var speedIncrease = 0.002;
var distance = 0;
var coins = 0;
var obstacleSpawnTimer = 0;
var coinSpawnTimer = 0;
var isGameRunning = true;
var player = game.addChild(new Player());
player.x = 300;
player.y = 2632;
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 2632
}));
var obstacles = [];
var gameCoins = [];
var distanceText = new Text2('Distance: 0m', {
size: 60,
fill: 0xFFFFFF
});
distanceText.anchor.set(0, 0);
LK.gui.topRight.addChild(distanceText);
distanceText.x = -20;
distanceText.y = 120;
var coinText = new Text2('Coins: 0', {
size: 60,
fill: 0xFFFF00
});
coinText.anchor.set(0, 0);
LK.gui.topRight.addChild(coinText);
coinText.x = -20;
coinText.y = 200;
function spawnObstacle() {
var obstacleType = Math.random() < 0.6 ? 'low' : 'high';
var obstacle = new Obstacle(obstacleType);
obstacle.x = 2200;
obstacles.push(obstacle);
game.addChild(obstacle);
}
function spawnCoin() {
var coin = new Coin();
coin.x = 2200;
coin.y = Math.random() < 0.5 ? 2500 : 2400;
gameCoins.push(coin);
game.addChild(coin);
}
function checkCollisions() {
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
if (obstacle.type === 'high' && player.isSliding) {
continue;
}
if (obstacle.type === 'low' && player.isJumping && player.y < 2500) {
continue;
}
LK.getSound('hit').play();
isGameRunning = false;
LK.showGameOver();
return;
}
if (obstacle.x < -100) {
obstacle.destroy();
obstacles.splice(i, 1);
}
}
for (var j = gameCoins.length - 1; j >= 0; j--) {
var coin = gameCoins[j];
if (player.intersects(coin) && !coin.collected) {
coin.collected = true;
coins++;
LK.setScore(LK.getScore() + 10);
coinText.setText('Coins: ' + coins);
LK.getSound('coin').play();
coin.destroy();
gameCoins.splice(j, 1);
} else if (coin.x < -50) {
coin.destroy();
gameCoins.splice(j, 1);
}
}
}
game.down = function (x, y, obj) {
if (!isGameRunning) return;
if (y > 2732 / 2) {
player.slide();
} else {
player.jump();
}
};
game.update = function () {
if (!isGameRunning) return;
gameSpeed += speedIncrease;
distance += gameSpeed * 0.1;
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].speed = gameSpeed;
}
for (var j = 0; j < gameCoins.length; j++) {
gameCoins[j].speed = gameSpeed;
}
obstacleSpawnTimer++;
if (obstacleSpawnTimer >= Math.max(60, 120 - Math.floor(distance / 100))) {
spawnObstacle();
obstacleSpawnTimer = 0;
}
coinSpawnTimer++;
if (coinSpawnTimer >= 90) {
if (Math.random() < 0.7) {
spawnCoin();
}
coinSpawnTimer = 0;
}
checkCollisions();
distanceText.setText('Distance: ' + Math.floor(distance) + 'm');
LK.setScore(Math.floor(distance) + coins * 10);
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = gameSpeed;
self.collected = false;
self.update = function () {
self.x -= self.speed;
if (!self.collected) {
coinGraphics.rotation += 0.1;
}
};
return self;
});
var Obstacle = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'low';
if (self.type === 'high') {
var obstacleGraphics = self.attachAsset('highObstacle', {
anchorX: 0.5,
anchorY: 1
});
self.y = 2532;
} else {
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 1
});
self.y = 2632;
}
self.speed = gameSpeed;
self.update = function () {
self.x -= self.speed;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1
});
self.isJumping = false;
self.isSliding = false;
self.groundY = 2632;
self.jumpHeight = 200;
self.velocity = 0;
self.gravity = 12;
self.jump = function () {
if (!self.isJumping && !self.isSliding) {
self.isJumping = true;
self.velocity = -18;
LK.getSound('jump').play();
}
};
self.slide = function () {
if (!self.isSliding && !self.isJumping) {
self.isSliding = true;
playerGraphics.scaleY = 0.5;
LK.setTimeout(function () {
self.isSliding = false;
playerGraphics.scaleY = 1;
}, 600);
}
};
self.update = function () {
if (self.isJumping) {
self.velocity += self.gravity;
self.y += self.velocity;
if (self.y >= self.groundY) {
self.y = self.groundY;
self.isJumping = false;
self.velocity = 0;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var gameSpeed = 8;
var speedIncrease = 0.002;
var distance = 0;
var coins = 0;
var obstacleSpawnTimer = 0;
var coinSpawnTimer = 0;
var isGameRunning = true;
var player = game.addChild(new Player());
player.x = 300;
player.y = 2632;
var ground = game.addChild(LK.getAsset('ground', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 2632
}));
var obstacles = [];
var gameCoins = [];
var distanceText = new Text2('Distance: 0m', {
size: 60,
fill: 0xFFFFFF
});
distanceText.anchor.set(0, 0);
LK.gui.topRight.addChild(distanceText);
distanceText.x = -20;
distanceText.y = 120;
var coinText = new Text2('Coins: 0', {
size: 60,
fill: 0xFFFF00
});
coinText.anchor.set(0, 0);
LK.gui.topRight.addChild(coinText);
coinText.x = -20;
coinText.y = 200;
function spawnObstacle() {
var obstacleType = Math.random() < 0.6 ? 'low' : 'high';
var obstacle = new Obstacle(obstacleType);
obstacle.x = 2200;
obstacles.push(obstacle);
game.addChild(obstacle);
}
function spawnCoin() {
var coin = new Coin();
coin.x = 2200;
coin.y = Math.random() < 0.5 ? 2500 : 2400;
gameCoins.push(coin);
game.addChild(coin);
}
function checkCollisions() {
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
if (player.intersects(obstacle)) {
if (obstacle.type === 'high' && player.isSliding) {
continue;
}
if (obstacle.type === 'low' && player.isJumping && player.y < 2500) {
continue;
}
LK.getSound('hit').play();
isGameRunning = false;
LK.showGameOver();
return;
}
if (obstacle.x < -100) {
obstacle.destroy();
obstacles.splice(i, 1);
}
}
for (var j = gameCoins.length - 1; j >= 0; j--) {
var coin = gameCoins[j];
if (player.intersects(coin) && !coin.collected) {
coin.collected = true;
coins++;
LK.setScore(LK.getScore() + 10);
coinText.setText('Coins: ' + coins);
LK.getSound('coin').play();
coin.destroy();
gameCoins.splice(j, 1);
} else if (coin.x < -50) {
coin.destroy();
gameCoins.splice(j, 1);
}
}
}
game.down = function (x, y, obj) {
if (!isGameRunning) return;
if (y > 2732 / 2) {
player.slide();
} else {
player.jump();
}
};
game.update = function () {
if (!isGameRunning) return;
gameSpeed += speedIncrease;
distance += gameSpeed * 0.1;
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].speed = gameSpeed;
}
for (var j = 0; j < gameCoins.length; j++) {
gameCoins[j].speed = gameSpeed;
}
obstacleSpawnTimer++;
if (obstacleSpawnTimer >= Math.max(60, 120 - Math.floor(distance / 100))) {
spawnObstacle();
obstacleSpawnTimer = 0;
}
coinSpawnTimer++;
if (coinSpawnTimer >= 90) {
if (Math.random() < 0.7) {
spawnCoin();
}
coinSpawnTimer = 0;
}
checkCollisions();
distanceText.setText('Distance: ' + Math.floor(distance) + 'm');
LK.setScore(Math.floor(distance) + coins * 10);
};