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--) {