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(levelText, { alpha: 1 }, { duration: 500 }); // Hide after delay LK.setTimeout(function () { // Fade out tween(levelText, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { self.visible = false; } }); }, 2000); }; // Configure level properties based on level number self.configure = function (level) { self.levelNumber = level; // Increasing difficulty with each level (reduced scaling) self.enemySpeed = 3 + level * 0.1; // Slower enemy speed self.enemySpawnRate = Math.max(60, 120 - level * 0.8); // Less frequent spawns // 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 = 30; // Slightly increased jump height self.isJumping = false; self.velocityY = 0; self.isInvincible = false; self.invincibilityTime = 0; self.update = function () { if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.5; // Decreased gravity effect for slower fall if (self.y >= 2732 / 2) { self.y = 2732 / 2; self.isJumping = false; self.velocityY = 0; } } // Handle invincibility if (self.isInvincible) { self.invincibilityTime--; playerGraphics.alpha = Math.sin(LK.ticks * 0.2) * 0.5 + 0.5; // Flashing effect if (self.invincibilityTime <= 0) { self.isInvincible = false; playerGraphics.alpha = 1; } } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; LK.getSound('jump').play(); } }; }); // Import tween plugin for animations // PowerUp class to provide player with special abilities var PowerUp = Container.expand(function () { var self = Container.call(this); // Create a simple colorful circle for the power-up var powerUpGraphics = self.attachAsset('centerCircle', { anchorX: 0.5, anchorY: 0.5 }); // Set a bright color to make it stand out powerUpGraphics.tint = 0xFFFF00; // Yellow color powerUpGraphics.scale.set(0.5, 0.5); self.speed = 4; // Move slightly slower than enemies self.type = 'invincibility'; // Default type // Add a pulsing animation effect self.update = function () { self.x -= self.speed; // Pulse animation var scale = 0.5 + Math.sin(LK.ticks * 0.1) * 0.1; powerUpGraphics.scale.set(scale, scale); // Remove if off-screen if (self.x < -50) { self.destroy(); } }; return self; }); // 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 = 5; // Reduced initial points for level progression var lastLevel = 50; var powerUps = []; // Array to store power-ups var powerUpSpawnCounter = 0; var powerUpSpawnInterval = 600; // Spawn power-up every 10 seconds (60fps * 10) // 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; player.isInvincible = true; // Start player with invincibility player.invincibilityTime = 180; // 3 seconds at 60fps // 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 * 3; // Reduced 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 // Give player invincibility after level up player.isInvincible = true; player.invincibilityTime = 180; // 3 seconds at 60fps } // 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 + 500; // Increased spawn distance by 500 pixels enemy.y = 2732 / 2 + (Math.random() * 200 - 100); // Add some vertical variance // 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 longer for easier gameplay var randomVariance = Math.floor(Math.random() * 80) + 40; enemySpawnInterval = Math.max(60, levelManager.enemySpawnRate - randomVariance); enemySpawnCounter = 0; } // Handle power-up spawning powerUpSpawnCounter++; if (powerUpSpawnCounter >= powerUpSpawnInterval) { var powerUp = new PowerUp(); powerUp.x = 2048 + 200; powerUp.y = 2732 / 2 + (Math.random() * 400 - 200); // Random vertical position powerUps.push(powerUp); game.addChild(powerUp); powerUpSpawnCounter = 0; // Adjust spawn rate based on level powerUpSpawnInterval = Math.max(300, 600 - currentLevel * 5); } // Update power-ups for (var i = powerUps.length - 1; i >= 0; i--) { powerUps[i].update(); // Check for collision with player if (player.intersects(powerUps[i])) { // Apply power-up effect player.isInvincible = true; player.invincibilityTime = 300; // 5 seconds of invincibility // Visual feedback LK.effects.flashScreen(0xFFFF00, 500); // Yellow flash // Remove power-up powerUps[i].destroy(); powerUps.splice(i, 1); } // Remove power-ups that are off-screen else if (powerUps[i].x < -50) { powerUps[i].destroy(); powerUps.splice(i, 1); } } // Update enemies for (var j = enemies.length - 1; j >= 0; j--) { enemies[j].update(); if (player.intersects(enemies[j]) && !player.isInvincible) { 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() + 2); // Double points for passing enemies scoreText.setText('Score: ' + LK.getScore()); } } }; // Handle player jump game.down = function (x, y, obj) { player.jump(); };
===================================================================
--- original.js
+++ change.js
@@ -137,9 +137,9 @@
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
- self.jumpHeight = 25; // Decreased jump height
+ self.jumpHeight = 30; // Slightly increased jump height
self.isJumping = false;
self.velocityY = 0;
self.isInvincible = false;
self.invincibilityTime = 0;