/****
* Classes
****/
// Bike class to represent the player's bike
var Bike = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('bike', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
// Remove player bike acceleration and deceleration methods
// Update method to move the bike
self.update = function () {
// self.x += self.speed; // Remove automatic movement
};
});
// Bomb class to represent bombs falling randomly
var Bomb = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('bomb', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = Math.random() * 2048; // Randomize x position
self.y = Math.random() * 600; // Randomize y position
self.speed = Math.random() * 2 + 1; // Random speed between 1 and 3
// Update method to move the bomb
self.update = function () {
self.y += self.speed; // Move bomb downward based on speed
if (self.y > 2732) {
// Check if it goes off the bottom of the screen
self.y = -50; // Start from the top
self.x = Math.random() * 2048; // Randomize x position
}
};
});
// OpponentBike class to represent opponent bikes
var OpponentBike = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('opponentBike', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = Math.random() * 2 + 3; // Random speed between 3 and 5
// Update method to move the opponent bike
self.update = function () {
self.y += self.speed; // Move bike downward based on speed
if (self.y > 2732) {
// Reset if it goes off screen
self.y = -50; // Start from the top
self.x = Math.random() * 2048; // Randomize x position
}
};
});
// PowerUp class to represent power-up items
var PowerUp = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = Math.random() * 2048; // Randomize x position
self.y = Math.random() * 600; // Randomize y position
self.speed = Math.random() * 2 + 1; // Random speed between 1 and 3
// Method to check if bike intersects with the power-up
self.checkCollision = function (bike) {
return bike.intersects(self);
};
// Update method to move the power-up
self.update = function () {
self.y += self.speed; // Move power-up downward based on speed
if (self.y > 2732) {
// Check if it goes off the bottom of the screen
self.y = -50; // Start from the top
self.x = Math.random() * 2048; // Randomize x position
}
};
});
var RedBall = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('redBall', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = Math.random() * 2 + 1; // Random speed between 1 and 3
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -50;
self.x = Math.random() * 2048;
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFFFFF
});
/****
* Game Code
****/
// Init game with white background
LK.setScore(0); // Initialize score to zero
LK.setScore(0); // Initialize score to zero
// Play race start sound
LK.getSound('race_start').play();
// Create and display score text on the screen
var scoreTxt = new Text2('0', {
size: 150,
fill: "#000000" // Set score text color to black
});
scoreTxt.anchor.set(0.5, 0); // Center the score text horizontally
LK.gui.top.addChild(scoreTxt); // Add the score text to the GUI overlay
// Initialize arrays and variables
var playerBike = game.addChild(new Bike());
playerBike.x = 2048 / 2; // Center player bike
playerBike.y = 2500; // Position player bike a little above the bottom
var opponentBikes = [];
var powerUps = [];
var redBalls = [];
var bombs = [];
// Create red balls and add them to the game
for (var i = 0; i < 5; i++) {
var redBall = new RedBall();
redBall.x = Math.random() * 2048; // Randomize position
redBall.y = -100 * (i + 1); // Stagger red balls
redBalls.push(redBall);
game.addChild(redBall);
}
;
// Create opponent bikes and add them to the game
for (var i = 0; i < 5; i++) {
var opponentBike = new OpponentBike();
opponentBike.x = Math.random() * 2048; // Randomize position
opponentBike.y = -100 * (i + 1); // Stagger opponent bikes
opponentBikes.push(opponentBike);
game.addChild(opponentBike);
}
// Create bombs and add them to the game
for (var i = 0; i < 3; i++) {
var bomb = new Bomb();
bomb.x = Math.random() * 2048; // Randomize position
bomb.y = -100 * (i + 1); // Stagger bombs
bombs.push(bomb);
game.addChild(bomb);
}
// Create power-ups and add them to the game
for (var i = 0; i < 3; i++) {
var powerUp = new PowerUp();
powerUp.x = Math.random() * 2048; // Randomize position
powerUp.y = -100 * (i + 1); // Stagger power-ups
powerUps.push(powerUp);
game.addChild(powerUp);
}
// Handle player movement
game.move = function (x) {
playerBike.x = x; // Move player bike left or right
};
// Remove player bike acceleration and deceleration event handlers
// Update game state
game.update = function () {
playerBike.update(); // Update player bike
// Update opponent bikes
for (var i = 0; i < opponentBikes.length; i++) {
opponentBikes[i].update();
// Check for collision with player bike
if (playerBike.intersects(opponentBikes[i])) {
LK.getSound('crash').play(); // Play crash sound
LK.effects.flashScreen(0xff0000, 1000); // Flash screen red
LK.showGameOver(); // Show game over screen
}
}
// Update power-ups and check for collisions
for (var i = powerUps.length - 1; i >= 0; i--) {
powerUps[i].update(); // Update power-up position
if (powerUps[i].checkCollision(playerBike)) {
LK.getSound('power_up').play(); // Play power-up sound
powerUps[i].destroy(); // Remove power-up from game
LK.setScore(LK.getScore() + 1); // Update score
scoreTxt.setText(LK.getScore()); // Update score text
powerUps.splice(i, 1); // Remove from array
var newPowerUp = new PowerUp(); // Create a new power-up
powerUps.push(newPowerUp); // Add new power-up to array
game.addChild(newPowerUp); // Add new power-up to game
}
}
// Update power-ups
for (var i = 0; i < powerUps.length; i++) {
powerUps[i].update();
}
// Update red balls
for (var i = 0; i < redBalls.length; i++) {
redBalls[i].update();
}
// Update bombs
for (var i = 0; i < bombs.length; i++) {
bombs[i].update();
}
}; /****
* Classes
****/
// Bike class to represent the player's bike
var Bike = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('bike', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 0;
// Remove player bike acceleration and deceleration methods
// Update method to move the bike
self.update = function () {
// self.x += self.speed; // Remove automatic movement
};
});
// Bomb class to represent bombs falling randomly
var Bomb = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('bomb', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = Math.random() * 2048; // Randomize x position
self.y = Math.random() * 600; // Randomize y position
self.speed = Math.random() * 2 + 1; // Random speed between 1 and 3
// Update method to move the bomb
self.update = function () {
self.y += self.speed; // Move bomb downward based on speed
if (self.y > 2732) {
// Check if it goes off the bottom of the screen
self.y = -50; // Start from the top
self.x = Math.random() * 2048; // Randomize x position
}
};
});
// OpponentBike class to represent opponent bikes
var OpponentBike = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('opponentBike', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = Math.random() * 2 + 3; // Random speed between 3 and 5
// Update method to move the opponent bike
self.update = function () {
self.y += self.speed; // Move bike downward based on speed
if (self.y > 2732) {
// Reset if it goes off screen
self.y = -50; // Start from the top
self.x = Math.random() * 2048; // Randomize x position
}
};
});
// PowerUp class to represent power-up items
var PowerUp = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('powerUp', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = Math.random() * 2048; // Randomize x position
self.y = Math.random() * 600; // Randomize y position
self.speed = Math.random() * 2 + 1; // Random speed between 1 and 3
// Method to check if bike intersects with the power-up
self.checkCollision = function (bike) {
return bike.intersects(self);
};
// Update method to move the power-up
self.update = function () {
self.y += self.speed; // Move power-up downward based on speed
if (self.y > 2732) {
// Check if it goes off the bottom of the screen
self.y = -50; // Start from the top
self.x = Math.random() * 2048; // Randomize x position
}
};
});
var RedBall = Container.expand(function () {
var self = Container.call(this);
self.attachAsset('redBall', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = Math.random() * 2 + 1; // Random speed between 1 and 3
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -50;
self.x = Math.random() * 2048;
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFFFFF
});
/****
* Game Code
****/
// Init game with white background
LK.setScore(0); // Initialize score to zero
LK.setScore(0); // Initialize score to zero
// Play race start sound
LK.getSound('race_start').play();
// Create and display score text on the screen
var scoreTxt = new Text2('0', {
size: 150,
fill: "#000000" // Set score text color to black
});
scoreTxt.anchor.set(0.5, 0); // Center the score text horizontally
LK.gui.top.addChild(scoreTxt); // Add the score text to the GUI overlay
// Initialize arrays and variables
var playerBike = game.addChild(new Bike());
playerBike.x = 2048 / 2; // Center player bike
playerBike.y = 2500; // Position player bike a little above the bottom
var opponentBikes = [];
var powerUps = [];
var redBalls = [];
var bombs = [];
// Create red balls and add them to the game
for (var i = 0; i < 5; i++) {
var redBall = new RedBall();
redBall.x = Math.random() * 2048; // Randomize position
redBall.y = -100 * (i + 1); // Stagger red balls
redBalls.push(redBall);
game.addChild(redBall);
}
;
// Create opponent bikes and add them to the game
for (var i = 0; i < 5; i++) {
var opponentBike = new OpponentBike();
opponentBike.x = Math.random() * 2048; // Randomize position
opponentBike.y = -100 * (i + 1); // Stagger opponent bikes
opponentBikes.push(opponentBike);
game.addChild(opponentBike);
}
// Create bombs and add them to the game
for (var i = 0; i < 3; i++) {
var bomb = new Bomb();
bomb.x = Math.random() * 2048; // Randomize position
bomb.y = -100 * (i + 1); // Stagger bombs
bombs.push(bomb);
game.addChild(bomb);
}
// Create power-ups and add them to the game
for (var i = 0; i < 3; i++) {
var powerUp = new PowerUp();
powerUp.x = Math.random() * 2048; // Randomize position
powerUp.y = -100 * (i + 1); // Stagger power-ups
powerUps.push(powerUp);
game.addChild(powerUp);
}
// Handle player movement
game.move = function (x) {
playerBike.x = x; // Move player bike left or right
};
// Remove player bike acceleration and deceleration event handlers
// Update game state
game.update = function () {
playerBike.update(); // Update player bike
// Update opponent bikes
for (var i = 0; i < opponentBikes.length; i++) {
opponentBikes[i].update();
// Check for collision with player bike
if (playerBike.intersects(opponentBikes[i])) {
LK.getSound('crash').play(); // Play crash sound
LK.effects.flashScreen(0xff0000, 1000); // Flash screen red
LK.showGameOver(); // Show game over screen
}
}
// Update power-ups and check for collisions
for (var i = powerUps.length - 1; i >= 0; i--) {
powerUps[i].update(); // Update power-up position
if (powerUps[i].checkCollision(playerBike)) {
LK.getSound('power_up').play(); // Play power-up sound
powerUps[i].destroy(); // Remove power-up from game
LK.setScore(LK.getScore() + 1); // Update score
scoreTxt.setText(LK.getScore()); // Update score text
powerUps.splice(i, 1); // Remove from array
var newPowerUp = new PowerUp(); // Create a new power-up
powerUps.push(newPowerUp); // Add new power-up to array
game.addChild(newPowerUp); // Add new power-up to game
}
}
// Update power-ups
for (var i = 0; i < powerUps.length; i++) {
powerUps[i].update();
}
// Update red balls
for (var i = 0; i < redBalls.length; i++) {
redBalls[i].update();
}
// Update bombs
for (var i = 0; i < bombs.length; i++) {
bombs[i].update();
}
};