User prompt
Little bit increase jump height
User prompt
Decrease jump height
User prompt
Make it easy
User prompt
Increase enemy spawn distance
User prompt
Please fix the bug: 'tween.to is not a function' in or related to this line: 'tween.to(levelText, 0.5, {' Line Number: 98 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Add levels 1 to 50
User prompt
Display score on screen while playing
User prompt
Add A scoreboard
User prompt
Add sound on off button
User prompt
Add game over sound effect
User prompt
Create A moving background ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Add A sound effect
Remix started
Copy Mario vs Monsters
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Define a class for scrolling background var Background = Container.expand(function () { var self = Container.call(this); // Create two background images for continuous scrolling var bg1 = self.attachAsset('background', { anchorX: 0, anchorY: 0 }); var bg2 = self.attachAsset('background', { anchorX: 0, anchorY: 0 }); // Position the second background right after the first one bg2.x = bg1.width; self.speed = 2; // Scrolling speed // Track positions for animation self.update = function () { // Move both backgrounds to the left bg1.x -= self.speed; bg2.x -= self.speed; // When the first background moves completely off-screen to the left if (bg1.x <= -bg1.width) { bg1.x = bg2.x + bg2.width; } // When the second background moves completely off-screen to the left if (bg2.x <= -bg2.width) { bg2.x = bg1.x + bg1.width; } }; return self; }); // 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 }); self.speed = 5; self.type = Math.floor(Math.random() * 3); // Different enemy types for variety self.passed = false; // Apply visual variations based on enemy type if (self.type === 1) { // Slightly larger enemy enemyGraphics.scale.set(1.2, 1.2); } else if (self.type === 2) { // Rotated enemy enemyGraphics.rotation = Math.PI / 6; // 30 degrees rotation } self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // Level class to manage level configuration var Level = Container.expand(function () { var self = Container.call(this); // Level data properties self.levelNumber = 1; self.enemySpeed = 5; self.enemySpawnRate = 100; self.backgroundColor = 0x87CEEB; // Level text display var levelText = new Text2('LEVEL 1', { size: 80, fill: 0xFFFFFF }); levelText.anchor.set(0.5, 0.5); self.addChild(levelText); // Show level indicator briefly self.showLevelIndicator = function (level) { self.levelNumber = level; levelText.setText('LEVEL ' + level); self.visible = true; // Fade in level text levelText.alpha = 0; tween.to(levelText, 0.5, { alpha: 1 }); // Hide after delay LK.setTimeout(function () { // Fade out tween.to(levelText, 0.5, { alpha: 0, onComplete: function onComplete() { self.visible = false; } }); }, 2000); }; // Configure level properties based on level number self.configure = function (level) { self.levelNumber = level; // Increasing difficulty with each level self.enemySpeed = 5 + level * 0.3; self.enemySpawnRate = Math.max(30, 100 - level * 1.5); // Change background color every 10 levels var colorIndex = Math.floor((level - 1) / 10); var backgroundColors = [0x87CEEB, // Sky blue 0xFFA500, // Orange 0x9370DB, // Purple 0x228B22, // Forest green 0xB22222 // Fire brick red ]; self.backgroundColor = backgroundColors[colorIndex % backgroundColors.length]; // Show level text self.showLevelIndicator(level); return self; }; // Initially hide the level indicator self.visible = false; return self; }); //<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 = 5; 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) { self.y = 2732 / 2; self.isJumping = false; self.velocityY = 0; } } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; LK.getSound('jump').play(); } }; }); // Scoreboard class to display high scores var Scoreboard = Container.expand(function () { var self = Container.call(this); // Create a background for the scoreboard var background = self.attachAsset('soundOff', { anchorX: 0.5, anchorY: 0.5 }); // Scale the background to make it larger background.width = 800; background.height = 1200; background.alpha = 0.8; // Create title text var titleText = new Text2('HIGH SCORES', { size: 80, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0); titleText.y = -background.height / 2 + 50; self.addChild(titleText); // Array to store score text objects self.scoreItems = []; // Method to update the scoreboard with new scores self.updateScores = function (scores) { // Clear previous score texts for (var i = 0; i < self.scoreItems.length; i++) { self.scoreItems[i].destroy(); } self.scoreItems = []; // Add new score items for (var i = 0; i < scores.length && i < 5; i++) { var scoreText = new Text2(i + 1 + '. ' + scores[i], { size: 60, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); scoreText.y = -background.height / 2 + 150 + i * 80; self.addChild(scoreText); self.scoreItems.push(scoreText); } }; // Add close button var closeButton = new Text2('CLOSE', { size: 60, fill: 0xFFFFFF }); closeButton.anchor.set(0.5, 0); closeButton.y = background.height / 2 - 100; closeButton.interactive = true; closeButton.down = function () { self.visible = false; }; self.addChild(closeButton); // Initially hide scoreboard self.visible = false; return self; }); // Sound toggle button class var SoundButton = Container.expand(function () { var self = Container.call(this); // Track sound state self.soundOn = true; // Create both button states var soundOnGraphics = self.attachAsset('soundOn', { anchorX: 0.5, anchorY: 0.5 }); var soundOffGraphics = self.attachAsset('soundOff', { anchorX: 0.5, anchorY: 0.5 }); // Initially hide the sound off icon soundOffGraphics.visible = false; // Handle button press self.down = function () { self.soundOn = !self.soundOn; soundOnGraphics.visible = self.soundOn; soundOffGraphics.visible = !self.soundOn; // Set global sound volume based on state LK.setVolume(self.soundOn ? 1 : 0); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ // Initialize current level var currentLevel = 1; var levelsCompleted = 0; var scoreToNextLevel = 10; var lastLevel = 50; // Create level indicator var levelManager = new Level(); LK.gui.center.addChild(levelManager); levelManager.configure(currentLevel); // Create scrolling background var background = game.addChild(new Background()); background.x = 0; background.y = 0; // Initialize player var player = game.addChild(new Player()); player.x = 2048 / 2; player.y = 2732 / 2; // Add sound toggle button to top right corner var soundButton = new SoundButton(); soundButton.x = 2048 - 80; soundButton.y = 80; LK.gui.topRight.addChild(soundButton); // Initialize enemies var enemies = []; var enemySpawnInterval = 100; var enemySpawnCounter = 0; // Add level display text var levelDisplayText = new Text2('Level: 1', { size: 60, fill: 0xFFFFFF }); levelDisplayText.anchor.set(0, 0); levelDisplayText.x = 150; levelDisplayText.y = 150; LK.gui.topLeft.addChild(levelDisplayText); // Create a new Text2 object to display the score var scoreText = new Text2('Score: 0', { size: 100, fill: 0xFFFFFF }); // Position the score text correctly scoreText.anchor.set(0.5, 0); // Add the score text to the game GUI at the top center of the screen LK.gui.top.addChild(scoreText); // Create scoreboard button var scoreboardButton = new Text2('SCORES', { size: 60, fill: 0xFFFFFF }); scoreboardButton.anchor.set(0.5, 0); LK.gui.topLeft.addChild(scoreboardButton); scoreboardButton.x = 150; scoreboardButton.y = 80; // Create and initialize the scoreboard var scoreboard = new Scoreboard(); scoreboard.x = 2048 / 2; scoreboard.y = 2732 / 2; LK.gui.center.addChild(scoreboard); // Define highscores array - would typically come from storage var highScores = ["1000", "750", "500", "250", "100"]; scoreboard.updateScores(highScores); // Make scoreboard button interactive scoreboardButton.interactive = true; scoreboardButton.down = function () { scoreboard.visible = true; }; // Handle game updates game.update = function () { // Update background scrolling background.update(); player.update(); // Check if player has advanced to the next level var currentScore = LK.getScore(); if (currentScore >= scoreToNextLevel && currentLevel < lastLevel) { // Advance to next level currentLevel++; scoreToNextLevel += currentLevel * 5; // Increase points needed for next level // Configure the new level levelManager.configure(currentLevel); levelDisplayText.setText('Level: ' + currentLevel); // Update game difficulty based on level settings enemySpawnInterval = levelManager.enemySpawnRate; // Update background color game.setBackgroundColor(levelManager.backgroundColor); // Special effect for level completion LK.effects.flashScreen(0x00FF00, 500); // Green flash for level up } // Win condition - completing all 50 levels if (currentLevel >= lastLevel && currentScore >= scoreToNextLevel) { // Player has completed all levels LK.showYouWin(); } // Spawn enemies with level-adjusted difficulty enemySpawnCounter++; if (enemySpawnCounter >= enemySpawnInterval) { var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2; // Adjust enemy speed based on current level enemy.speed = levelManager.enemySpeed; enemies.push(enemy); game.addChild(enemy); // Randomize the spawn interval for the next enemy // Make spawn interval shorter as level increases var randomVariance = Math.floor(Math.random() * 50) + 20; enemySpawnInterval = Math.max(30, levelManager.enemySpawnRate - randomVariance); enemySpawnCounter = 0; } // Update enemies for (var j = enemies.length - 1; j >= 0; j--) { enemies[j].update(); if (player.intersects(enemies[j])) { LK.effects.flashScreen(0xff0000, 1000); LK.getSound('gameover').play(); // Update high scores with current score var currentScore = LK.getScore(); for (var k = 0; k < highScores.length; k++) { if (currentScore > parseInt(highScores[k])) { // Insert new high score and shift others down highScores.splice(k, 0, currentScore.toString()); highScores.pop(); // Remove lowest score break; } } // Update scoreboard with new high scores scoreboard.updateScores(highScores); LK.showGameOver(); } else if (player.x > enemies[j].x && !enemies[j].passed) { enemies[j].passed = true; LK.setScore(LK.getScore() + 1); scoreText.setText('Score: ' + LK.getScore()); } } }; // Handle player jump game.down = function (x, y, obj) { player.jump(); }; // Import tween plugin for animations
===================================================================
--- original.js
+++ change.js
@@ -44,15 +44,88 @@
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
+ self.type = Math.floor(Math.random() * 3); // Different enemy types for variety
+ self.passed = false;
+ // Apply visual variations based on enemy type
+ if (self.type === 1) {
+ // Slightly larger enemy
+ enemyGraphics.scale.set(1.2, 1.2);
+ } else if (self.type === 2) {
+ // Rotated enemy
+ enemyGraphics.rotation = Math.PI / 6; // 30 degrees rotation
+ }
self.update = function () {
self.x -= self.speed;
if (self.x < -50) {
self.destroy();
}
};
});
+// Level class to manage level configuration
+var Level = Container.expand(function () {
+ var self = Container.call(this);
+ // Level data properties
+ self.levelNumber = 1;
+ self.enemySpeed = 5;
+ self.enemySpawnRate = 100;
+ self.backgroundColor = 0x87CEEB;
+ // Level text display
+ var levelText = new Text2('LEVEL 1', {
+ size: 80,
+ fill: 0xFFFFFF
+ });
+ levelText.anchor.set(0.5, 0.5);
+ self.addChild(levelText);
+ // Show level indicator briefly
+ self.showLevelIndicator = function (level) {
+ self.levelNumber = level;
+ levelText.setText('LEVEL ' + level);
+ self.visible = true;
+ // Fade in level text
+ levelText.alpha = 0;
+ tween.to(levelText, 0.5, {
+ alpha: 1
+ });
+ // Hide after delay
+ LK.setTimeout(function () {
+ // Fade out
+ tween.to(levelText, 0.5, {
+ alpha: 0,
+ onComplete: function onComplete() {
+ self.visible = false;
+ }
+ });
+ }, 2000);
+ };
+ // Configure level properties based on level number
+ self.configure = function (level) {
+ self.levelNumber = level;
+ // Increasing difficulty with each level
+ self.enemySpeed = 5 + level * 0.3;
+ self.enemySpawnRate = Math.max(30, 100 - level * 1.5);
+ // Change background color every 10 levels
+ var colorIndex = Math.floor((level - 1) / 10);
+ var backgroundColors = [0x87CEEB,
+ // Sky blue
+ 0xFFA500,
+ // Orange
+ 0x9370DB,
+ // Purple
+ 0x228B22,
+ // Forest green
+ 0xB22222 // Fire brick red
+ ];
+ self.backgroundColor = backgroundColors[colorIndex % backgroundColors.length];
+ // Show level text
+ self.showLevelIndicator(level);
+ return self;
+ };
+ // Initially hide the level indicator
+ self.visible = false;
+ return self;
+});
//<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);
@@ -68,9 +141,8 @@
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;
}
@@ -177,8 +249,17 @@
/****
* Game Code
****/
+// Initialize current level
+var currentLevel = 1;
+var levelsCompleted = 0;
+var scoreToNextLevel = 10;
+var lastLevel = 50;
+// Create level indicator
+var levelManager = new Level();
+LK.gui.center.addChild(levelManager);
+levelManager.configure(currentLevel);
// Create scrolling background
var background = game.addChild(new Background());
background.x = 0;
background.y = 0;
@@ -194,8 +275,17 @@
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 100;
var enemySpawnCounter = 0;
+// Add level display text
+var levelDisplayText = new Text2('Level: 1', {
+ size: 60,
+ fill: 0xFFFFFF
+});
+levelDisplayText.anchor.set(0, 0);
+levelDisplayText.x = 150;
+levelDisplayText.y = 150;
+LK.gui.topLeft.addChild(levelDisplayText);
// Create a new Text2 object to display the score
var scoreText = new Text2('Score: 0', {
size: 100,
fill: 0xFFFFFF
@@ -230,18 +320,43 @@
game.update = function () {
// Update background scrolling
background.update();
player.update();
- // Spawn enemies
+ // Check if player has advanced to the next level
+ var currentScore = LK.getScore();
+ if (currentScore >= scoreToNextLevel && currentLevel < lastLevel) {
+ // Advance to next level
+ currentLevel++;
+ scoreToNextLevel += currentLevel * 5; // Increase points needed for next level
+ // Configure the new level
+ levelManager.configure(currentLevel);
+ levelDisplayText.setText('Level: ' + currentLevel);
+ // Update game difficulty based on level settings
+ enemySpawnInterval = levelManager.enemySpawnRate;
+ // Update background color
+ game.setBackgroundColor(levelManager.backgroundColor);
+ // Special effect for level completion
+ LK.effects.flashScreen(0x00FF00, 500); // Green flash for level up
+ }
+ // Win condition - completing all 50 levels
+ if (currentLevel >= lastLevel && currentScore >= scoreToNextLevel) {
+ // Player has completed all levels
+ LK.showYouWin();
+ }
+ // Spawn enemies with level-adjusted difficulty
enemySpawnCounter++;
if (enemySpawnCounter >= enemySpawnInterval) {
var enemy = new Enemy();
enemy.x = 2048;
enemy.y = 2732 / 2;
+ // Adjust enemy speed based on current level
+ enemy.speed = levelManager.enemySpeed;
enemies.push(enemy);
game.addChild(enemy);
// Randomize the spawn interval for the next enemy
- enemySpawnInterval = Math.floor(Math.random() * 150) + 50;
+ // Make spawn interval shorter as level increases
+ var randomVariance = Math.floor(Math.random() * 50) + 20;
+ enemySpawnInterval = Math.max(30, levelManager.enemySpawnRate - randomVariance);
enemySpawnCounter = 0;
}
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {