/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Define a class for enemies var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5, width: 200, height: 200 }); self.speed = 6.25; self.update = function () { self.x -= self.speed; if (self.x < -10) { self.destroy(); } }; }); // Define a class for the far background layer var FarBackground = Container.expand(function () { var self = Container.call(this); var farBackgroundGraphics = self.attachAsset('farBackground', { anchorX: 0, anchorY: 0, height: 2732 / 1.8 // Half of the screen height }); self.speed = 1; self.update = function () { self.x -= self.speed; if (self.x <= -2048) { if (self === farBackground1) { self.x = farBackground2.x + 2048; } else if (self === farBackground2) { self.x = farBackground1.x + 2048; } } }; }); // Define a class for flying enemies var FlyingEnemy = Container.expand(function () { var self = Container.call(this); var flyingEnemyGraphics = self.attachAsset('flyingEnemy', { anchorX: 0.5, anchorY: 0.5, width: 200, height: 200 }); self.speed = 8.75; // Faster speed for flying enemies self.update = function () { self.x -= self.speed; if (self.x < -10) { self.destroy(); } }; }); // Define a class for the ground layer of the background var Ground = Container.expand(function () { var self = Container.call(this); var groundGraphics = self.attachAsset('ground', { anchorX: 0, anchorY: 0, height: 2732 / 1.9 // Half of the screen height }); self.speed = 6.25; self.update = function () { self.x -= self.speed; self.y = 2732 / 2.1; // Player's y position if (self.x <= -2040) { if (self === ground1) { self.x = ground2.x + 2040; } else if (self === ground2) { self.x = ground1.x + 2040; } } }; }); // Define a class for the near background layer var NearBackground = Container.expand(function () { var self = Container.call(this); var nearBackgroundGraphics = self.attachAsset('nearBackground', { anchorX: 0, anchorY: 0, height: 2732 / 1.8 // Half of the screen height }); self.speed = 3; self.update = function () { self.x -= self.speed; if (self.x <= -2048) { if (self === nearBackground1) { self.x = nearBackground2.x + 2048; } else if (self === nearBackground2) { self.x = nearBackground1.x + 2048; } } }; }); //<Assets used in the game will automatically appear here> // Define a class for the player character var Player = Container.expand(function () { var self = Container.call(this); var playerGraphics = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 6.25; self.jumpHeight = 40; self.isJumping = false; self.velocityY = 0; self.update = function () { if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; // Decreased gravity effect by 30% if (self.y >= 2732 / 2) { // Ground level self.y = 2732 / 2; self.isJumping = false; self.velocityY = 0; } } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ // Play background music LK.playMusic('backgroundMusic'); // Initialize the ground layer var ground1 = new Ground(); ground1.x = 0; ground1.y = 2732; // Position at the bottom of the screen var ground2 = new Ground(); ground2.x = 2048; ground2.y = 2732; // Position at the bottom of the screen // Initialize the near background layer var nearBackground1 = game.addChild(new NearBackground()); nearBackground1.x = 0; nearBackground1.y = 0; var nearBackground2 = game.addChild(new NearBackground()); nearBackground2.x = 2048; nearBackground2.y = 0; // Initialize the far background layer var farBackground1 = game.addChild(new FarBackground()); farBackground1.x = 0; farBackground1.y = 0; var farBackground2 = game.addChild(new FarBackground()); farBackground2.x = 2048; farBackground2.y = 0; // Initialize player var player = game.addChild(new Player()); player.x = 2048 / 4; // Position player closer to the left side of the screen player.y = 2732 / 2; // Initialize enemies var enemies = []; var enemySpawnInterval = 100; var enemySpawnCounter = 0; // Create a new Text2 object to display the score var scoreText = new Text2('0', { size: 100, fill: 0xFFFFFF }); // Add the score text to the game GUI at the top right of the screen LK.gui.topRight.addChild(scoreText); scoreText.x = -150; scoreText.y = 0; // Move score text to the top layer LK.gui.topRight.setChildIndex(scoreText, LK.gui.topRight.children.length - 1); // Handle game updates game.update = function () { // Increase speed as time progresses var speedIncrease = Math.floor(LK.ticks / 1000) * 2.5; // Increase the speed increase rate by 50% nearBackground1.speed = (1 + speedIncrease) * 0.5; // Decrease speed for nearBackground for parallax effect nearBackground2.speed = (1 + speedIncrease) * 0.5; // Decrease speed for nearBackground for parallax effect farBackground1.speed = (1 + speedIncrease) * 1.5; // Increase speed for farBackground for parallax effect farBackground2.speed = (1 + speedIncrease) * 1.5; // Increase speed for farBackground for parallax effect player.speed = 5 + speedIncrease; ground1.speed = 5 + speedIncrease; ground2.speed = 5 + speedIncrease; nearBackground1.update(); nearBackground2.update(); farBackground1.update(); farBackground2.update(); player.update(); ground1.update(); ground2.update(); game.addChild(ground1); game.addChild(ground2); // Spawn enemies enemySpawnCounter++; if (enemySpawnCounter >= enemySpawnInterval) { var enemy = new Enemy(); enemy.x = 2100; // Ensure enemy spawns from off screen enemy.y = 2732 / 2; enemy.speed = 5 + speedIncrease; // Increase enemy speed enemies.push(enemy); game.addChild(enemy); // Spawn flying enemies with a 20% chance if (Math.random() < 0.2) { var flyingEnemy = new FlyingEnemy(); flyingEnemy.x = 2100 + Math.random() * 100; // Ensure flying enemy spawns from off screen flyingEnemy.y = Math.random() * (2732 / 3 - 100) + 100; // Random height for flying enemy spawn flyingEnemy.speed = 7 + speedIncrease; // Increase flying enemy speed enemies.push(flyingEnemy); game.addChild(flyingEnemy); } // If score is 5 or more, spawn another row of enemies in the air with reduced frequency if (LK.getScore() >= 5 && Math.random() < 0.3) { // 30% chance to spawn air enemy var airEnemy = new Enemy(); airEnemy.x = 2100 + Math.random() * 100; // Ensure air enemy spawns from off screen airEnemy.y = Math.random() * (2732 / 3 - 100) + 100; // Reduce maximum height for air enemy spawn airEnemy.speed = 5 + speedIncrease; // Increase enemy speed enemies.push(airEnemy); game.addChild(airEnemy); } // Randomize the spawn interval for the next enemy enemySpawnInterval = Math.floor(Math.random() * 150) + 50; enemySpawnCounter = 0; } // Update enemies for (var j = enemies.length - 1; j >= 0; j--) { enemies[j].update(); if (player.intersects(enemies[j])) { // Spawn explosion effect at the player's position if not already present if (!game.explosion) { game.explosion = LK.getAsset('explosion', { x: player.x, y: player.y, anchorX: 0.5, anchorY: 0.5, scaleX: 0.1, // Start scale at 0.1% scaleY: 0.1 // Start scale at 0.1% }); game.addChild(game.explosion); } // Use tween to scale existing explosion from 0.1% to 100% over 0.5 seconds tween(game.explosion, { scaleX: 50, scaleY: 50 }, { duration: 500, easing: tween.easeOut }); // Play explosion sound effect LK.getSound('explosionSound').play(); // Wait 1 second before showing the game over screen LK.setTimeout(function () { LK.effects.flashScreen(0xff0000, 500); LK.showGameOver(); }, 500); } else if (player.x > enemies[j].x && !enemies[j].passed) { // Play sound effect for successful jump over an enemy LK.getSound('jumpSuccessSound').play(); enemies[j].passed = true; LK.setScore(LK.getScore() + 1); scoreText.setText(LK.getScore()); // Move player further to the right as they score more points player.x = Math.min(2048 * 3.0, 2048 / 4 + LK.getScore() * (2048 * 3.0 - 2048 / 4) / 100); // Move player all the way to the right of the screen once they have gotten 100 points } } }; // Handle player jump game.down = function (x, y, obj) { player.jump(); player.speed += 0.5; // Increase player speed for every successful jump };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Define a class for enemies
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 200
});
self.speed = 6.25;
self.update = function () {
self.x -= self.speed;
if (self.x < -10) {
self.destroy();
}
};
});
// Define a class for the far background layer
var FarBackground = Container.expand(function () {
var self = Container.call(this);
var farBackgroundGraphics = self.attachAsset('farBackground', {
anchorX: 0,
anchorY: 0,
height: 2732 / 1.8 // Half of the screen height
});
self.speed = 1;
self.update = function () {
self.x -= self.speed;
if (self.x <= -2048) {
if (self === farBackground1) {
self.x = farBackground2.x + 2048;
} else if (self === farBackground2) {
self.x = farBackground1.x + 2048;
}
}
};
});
// Define a class for flying enemies
var FlyingEnemy = Container.expand(function () {
var self = Container.call(this);
var flyingEnemyGraphics = self.attachAsset('flyingEnemy', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 200
});
self.speed = 8.75; // Faster speed for flying enemies
self.update = function () {
self.x -= self.speed;
if (self.x < -10) {
self.destroy();
}
};
});
// Define a class for the ground layer of the background
var Ground = Container.expand(function () {
var self = Container.call(this);
var groundGraphics = self.attachAsset('ground', {
anchorX: 0,
anchorY: 0,
height: 2732 / 1.9 // Half of the screen height
});
self.speed = 6.25;
self.update = function () {
self.x -= self.speed;
self.y = 2732 / 2.1; // Player's y position
if (self.x <= -2040) {
if (self === ground1) {
self.x = ground2.x + 2040;
} else if (self === ground2) {
self.x = ground1.x + 2040;
}
}
};
});
// Define a class for the near background layer
var NearBackground = Container.expand(function () {
var self = Container.call(this);
var nearBackgroundGraphics = self.attachAsset('nearBackground', {
anchorX: 0,
anchorY: 0,
height: 2732 / 1.8 // Half of the screen height
});
self.speed = 3;
self.update = function () {
self.x -= self.speed;
if (self.x <= -2048) {
if (self === nearBackground1) {
self.x = nearBackground2.x + 2048;
} else if (self === nearBackground2) {
self.x = nearBackground1.x + 2048;
}
}
};
});
//<Assets used in the game will automatically appear here>
// Define a class for the player character
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6.25;
self.jumpHeight = 40;
self.isJumping = false;
self.velocityY = 0;
self.update = function () {
if (self.isJumping) {
self.y += self.velocityY;
self.velocityY += 0.7; // Decreased gravity effect by 30%
if (self.y >= 2732 / 2) {
// Ground level
self.y = 2732 / 2;
self.isJumping = false;
self.velocityY = 0;
}
}
};
self.jump = function () {
if (!self.isJumping) {
self.isJumping = true;
self.velocityY = -self.jumpHeight;
}
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
// Play background music
LK.playMusic('backgroundMusic');
// Initialize the ground layer
var ground1 = new Ground();
ground1.x = 0;
ground1.y = 2732; // Position at the bottom of the screen
var ground2 = new Ground();
ground2.x = 2048;
ground2.y = 2732; // Position at the bottom of the screen
// Initialize the near background layer
var nearBackground1 = game.addChild(new NearBackground());
nearBackground1.x = 0;
nearBackground1.y = 0;
var nearBackground2 = game.addChild(new NearBackground());
nearBackground2.x = 2048;
nearBackground2.y = 0;
// Initialize the far background layer
var farBackground1 = game.addChild(new FarBackground());
farBackground1.x = 0;
farBackground1.y = 0;
var farBackground2 = game.addChild(new FarBackground());
farBackground2.x = 2048;
farBackground2.y = 0;
// Initialize player
var player = game.addChild(new Player());
player.x = 2048 / 4; // Position player closer to the left side of the screen
player.y = 2732 / 2;
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 100;
var enemySpawnCounter = 0;
// Create a new Text2 object to display the score
var scoreText = new Text2('0', {
size: 100,
fill: 0xFFFFFF
});
// Add the score text to the game GUI at the top right of the screen
LK.gui.topRight.addChild(scoreText);
scoreText.x = -150;
scoreText.y = 0;
// Move score text to the top layer
LK.gui.topRight.setChildIndex(scoreText, LK.gui.topRight.children.length - 1);
// Handle game updates
game.update = function () {
// Increase speed as time progresses
var speedIncrease = Math.floor(LK.ticks / 1000) * 2.5; // Increase the speed increase rate by 50%
nearBackground1.speed = (1 + speedIncrease) * 0.5; // Decrease speed for nearBackground for parallax effect
nearBackground2.speed = (1 + speedIncrease) * 0.5; // Decrease speed for nearBackground for parallax effect
farBackground1.speed = (1 + speedIncrease) * 1.5; // Increase speed for farBackground for parallax effect
farBackground2.speed = (1 + speedIncrease) * 1.5; // Increase speed for farBackground for parallax effect
player.speed = 5 + speedIncrease;
ground1.speed = 5 + speedIncrease;
ground2.speed = 5 + speedIncrease;
nearBackground1.update();
nearBackground2.update();
farBackground1.update();
farBackground2.update();
player.update();
ground1.update();
ground2.update();
game.addChild(ground1);
game.addChild(ground2);
// Spawn enemies
enemySpawnCounter++;
if (enemySpawnCounter >= enemySpawnInterval) {
var enemy = new Enemy();
enemy.x = 2100; // Ensure enemy spawns from off screen
enemy.y = 2732 / 2;
enemy.speed = 5 + speedIncrease; // Increase enemy speed
enemies.push(enemy);
game.addChild(enemy);
// Spawn flying enemies with a 20% chance
if (Math.random() < 0.2) {
var flyingEnemy = new FlyingEnemy();
flyingEnemy.x = 2100 + Math.random() * 100; // Ensure flying enemy spawns from off screen
flyingEnemy.y = Math.random() * (2732 / 3 - 100) + 100; // Random height for flying enemy spawn
flyingEnemy.speed = 7 + speedIncrease; // Increase flying enemy speed
enemies.push(flyingEnemy);
game.addChild(flyingEnemy);
}
// If score is 5 or more, spawn another row of enemies in the air with reduced frequency
if (LK.getScore() >= 5 && Math.random() < 0.3) {
// 30% chance to spawn air enemy
var airEnemy = new Enemy();
airEnemy.x = 2100 + Math.random() * 100; // Ensure air enemy spawns from off screen
airEnemy.y = Math.random() * (2732 / 3 - 100) + 100; // Reduce maximum height for air enemy spawn
airEnemy.speed = 5 + speedIncrease; // Increase enemy speed
enemies.push(airEnemy);
game.addChild(airEnemy);
}
// Randomize the spawn interval for the next enemy
enemySpawnInterval = Math.floor(Math.random() * 150) + 50;
enemySpawnCounter = 0;
}
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].update();
if (player.intersects(enemies[j])) {
// Spawn explosion effect at the player's position if not already present
if (!game.explosion) {
game.explosion = LK.getAsset('explosion', {
x: player.x,
y: player.y,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.1,
// Start scale at 0.1%
scaleY: 0.1 // Start scale at 0.1%
});
game.addChild(game.explosion);
}
// Use tween to scale existing explosion from 0.1% to 100% over 0.5 seconds
tween(game.explosion, {
scaleX: 50,
scaleY: 50
}, {
duration: 500,
easing: tween.easeOut
});
// Play explosion sound effect
LK.getSound('explosionSound').play();
// Wait 1 second before showing the game over screen
LK.setTimeout(function () {
LK.effects.flashScreen(0xff0000, 500);
LK.showGameOver();
}, 500);
} else if (player.x > enemies[j].x && !enemies[j].passed) {
// Play sound effect for successful jump over an enemy
LK.getSound('jumpSuccessSound').play();
enemies[j].passed = true;
LK.setScore(LK.getScore() + 1);
scoreText.setText(LK.getScore());
// Move player further to the right as they score more points
player.x = Math.min(2048 * 3.0, 2048 / 4 + LK.getScore() * (2048 * 3.0 - 2048 / 4) / 100); // Move player all the way to the right of the screen once they have gotten 100 points
}
}
};
// Handle player jump
game.down = function (x, y, obj) {
player.jump();
player.speed += 0.5; // Increase player speed for every successful jump
};
Single 2D Mario Character. In-Game asset. 2d. Blank background.
Mushroom kingdom style mountains. Transparent. Cartoony. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Distant clouds and mountains. Cartoony. Mario style. Blank background. High contrast. No shadows
Side on. Dirt with grass. Full width. Super mario. Blank background. High contrast. No shadows
Big explosion.. High contrast. No shadows
Sci Fi bird enemy. Side on 2D. In-Game asset. High contrast. No shadows