User prompt
Fix Bug: 'Uncaught ReferenceError: createMenuPage is not defined' in or related to this line: 'createMenuPage(self, 'Easy', 'easy', '#00ff00');' Line Number: 159
Code edit (1 edits merged)
Please save this source code
User prompt
make text (on main menu page) saying: "easy" a button and when pressed on, it takes user to easy page
User prompt
make text (on main menu page) saying: "easy" a button and make it lead to easy page
User prompt
make "easy" button (on main menu page) lead to easy page
User prompt
make buttons darker when they are pressed on
User prompt
make "easy" button lead to "easy" page
User prompt
move the "easy" button up
User prompt
move the "hard" button down
User prompt
move the "hard" button down
User prompt
move the "hard" button up
User prompt
move the "easy" button up
User prompt
move the "easy" button up
User prompt
move the "easy" button up
User prompt
make the "easy" button (on main menu page) lead to "easy" page. make the "medium" button (on main menu page) lead to "medium" page. make the "hard" button (on main menu page) lead to "hard" page.
User prompt
why are "easy" and "hard" not buttons
User prompt
change the title name to say: "Blast through the Cosmos"
User prompt
make the colour of the title not black
User prompt
make the title look more catchy
User prompt
make the title be at the x-axis of 0
User prompt
make the title say "Blast through the Cosmos"
User prompt
add title to the top center of main menu page
User prompt
add title at the top of menu pager
User prompt
remove title on menu page
User prompt
remove the title on the home page
/**** 
* Classes
****/
// BulletPack class
var BulletPack = Container.expand(function () {
	var self = Container.call(this);
	var bulletPackGraphics = self.attachAsset('bulletPack', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.direction = Math.random() < 0.5 ? -1 : 1;
	self.move = function () {
		var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002;
		self.y += self.speed + speedIncreaseFactor;
		self.x += self.direction * (10 + speedIncreaseFactor);
		if (self.x < 0 || self.x > game.width) {
			self.direction *= -1;
		}
	};
});
// Character class
var Hero = Container.expand(function () {
	var self = Container.call(this);
	var heroGraphics = self.attachAsset('hero', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.bulletLimit = difficulty === 'medium' ? 3 : 5; // Initialize bullet limit based on difficulty
	self.bulletsInPlay = 0; // Track bullets currently in play
	self.canShoot = true; // Allow shooting initially
	self.update = function () {
		// Hero update logic
	};
	self.shoot = function () {
		if (this.bulletLimit > 0 && this.canShoot) {
			var bullet = new Bullet();
			bullet.x = this.x;
			bullet.y = this.y - this.height / 2;
			heroBullets.push(bullet);
			game.addChild(bullet);
			this.bulletsInPlay++; // Increment bullets in play
			this.bulletLimit--;
			bulletCountTxt.setText('Bullets: ' + this.bulletLimit); // Update bullet count display
			this.canShoot = false; // Set shooting cooldown
			LK.setTimeout(function () {
				self.canShoot = true;
			}, 500); // Cooldown of 500ms before next shot
		}
	};
});
// Bullet class
var Bullet = Container.expand(function () {
	var self = Container.call(this);
	var bulletGraphics = self.attachAsset('Bullet', {
		anchorX: 0.0625,
		anchorY: 0.0625
	});
	self.speed = -10;
	self.move = function () {
		self.y += self.speed;
	};
});
// Enemy class
var Enemy = Container.expand(function () {
	var self = Container.call(this);
	var enemyGraphics = self.attachAsset('enemy', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 4;
	self.direction = Math.random() < 0.5 ? -1 : 1;
	self.move = function () {
		self.y += self.speed;
		var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002; // Increase the speed factor over time
		self.x += self.direction * (4 + speedIncreaseFactor);
		if (self.x < 0 || self.x > game.width) {
			self.direction *= -1;
		}
		self.speed += difficulty === 'easy' ? 0.01 + LK.ticks * 0.00005 : difficulty === 'medium' ? 0.02 + LK.ticks * 0.0001 : 0.03 + LK.ticks * 0.00015; // Increase speed over time with an accelerating factor based on difficulty
	};
});
var Button = Container.expand(function (text, positionX, positionY, onClickCallback) {
	var self = Container.call(this);
	var buttonText = new Text2(text, {
		size: 200,
		fill: "#ffffff"
	});
	buttonText.anchor.set(0.5);
	self.addChild(buttonText);
	self.x = positionX;
	self.y = positionY;
	self.interactive = true;
	self.on('down', function (obj) {
		var event = obj.event;
		var pos = event.getLocalPosition(game);
		if (self.containsPoint(pos)) {
			self.alpha = 0.5;
			onClickCallback();
		}
	});
	self.on('up', function (obj) {
		self.alpha = 1.0;
	});
	self.containsPoint = function (point) {
		return point.x >= self.x - self.width / 2 && point.x <= self.x + self.width / 2 && point.y >= self.y - self.height / 2 && point.y <= self.y + self.height / 2;
	};
});
// JoystickAsset class
var JoystickAsset = Container.expand(function () {
	var self = Container.call(this);
	self.interactive = true;
	self.isDragging = false;
	self.onMoveCallback = null;
	self.setMoveCallback = function (callback) {
		self.onMoveCallback = function (direction) {
			callback({
				x: direction.x,
				y: 0
			});
		};
	};
	self.on('down', function (obj) {
		self.isDragging = true;
	});
	self.on('up', function (obj) {
		self.isDragging = false;
		stickGraphics.x = stickOrigin.x;
		stickGraphics.y = stickOrigin.y;
		if (self.onMoveCallback) {
			self.onMoveCallback({
				x: 0,
				y: 0
			});
		}
	});
	self.on('move', function (obj) {
		if (self.isDragging) {
			var event = obj.event;
			var pos = event.getLocalPosition(self);
			var dx = pos.x - stickOrigin.x;
			var maxDistance = stickGraphics.width * 0.5;
			if (Math.abs(dx) > maxDistance) {
				dx = maxDistance * (dx > 0 ? 1 : -1);
			}
			stickGraphics.x = stickOrigin.x + dx;
			stickGraphics.y = stickOrigin.y;
			if (self.onMoveCallback) {
				self.onMoveCallback({
					x: dx / maxDistance,
					y: 0
				});
			}
		}
	});
});
var EasyMenuPage = Container.expand(function () {
	var self = Container.call(this);
	createMenuPage(self, 'Easy', 'easy', '#00ff00');
});
var MediumMenuPage = Container.expand(function () {
	var self = Container.call(this);
	createMenuPage(self, 'Medium', 'medium', '#ffff00');
});
var HardMenuPage = Container.expand(function () {
	var self = Container.call(this);
	createMenuPage(self, 'Hard', 'hard', '#ff0000');
});
/**** 
* Initialize Game
****/
// Default difficulty setting
var game = new LK.Game({
	title: '(WIP)',
	backgroundColor: 0x000000 // Init game with black background
});
/**** 
* Game Code
****/
var heroBullets = [];
var bulletPacks = []; // Declare bulletPacks array in the global scope
var bulletCountTxt; // Declare bulletCountTxt in the global scope
function createMenuPage(container, difficultyText, difficultyLevel, color) {
	// Create title text
	var titleText = new Text2('Select Difficulty', {
		size: 100,
		fill: "#ffffff"
	});
	titleText.anchor.set(0.5, 0);
	container.addChild(titleText);
	// Create difficulty button
	var difficultyButton = new Button(difficultyText, container.width / 2, titleText.height + 50, function () {
		// Set difficulty and start the game
		difficulty = difficultyLevel;
		game.clearChildren();
		initializeGame();
		LK.hideMenuPage(container);
	});
	difficultyButton.anchor.set(0.5, 0);
	container.addChild(difficultyButton);
	// Set background color
	container.backgroundColor = color;
	// Hide the page initially
	LK.hideMenuPage(container);
}
function initializeGame() {
	// Initialize important asset arrays
	var enemies = [];
	// Create character
	var hero = game.addChild(new Hero());
	hero.x = game.width / 2;
	hero.y = game.height - 100;
	// Create score display
	var scoreTxt = new Text2('Score: 0', {
		size: 50,
		fill: "#ffffff"
	});
	var highScoreTxt = new Text2('High Score: 0 (WIP)', {
		size: 50,
		fill: "#ffffff"
	});
	scoreTxt.anchor.set(1, 0);
	highScoreTxt.anchor.set(1, 0);
	highScoreTxt.y = scoreTxt.height + 20;
	LK.gui.topRight.addChild(scoreTxt);
	LK.gui.topRight.addChild(highScoreTxt);
	// Create bullet count display
	bulletCountTxt = new Text2('Bullets: ' + (difficulty === 'medium' ? 3 : 5), {
		size: 100,
		fill: "#ffffff"
	});
	bulletCountTxt.anchor.set(0, 0);
	bulletCountTxt.y = scoreTxt.height + 50; // Position below the score display
	LK.gui.topLeft.addChild(bulletCountTxt);
	// Create instructions display
	var instructionsTxt = new Text2('Tap anywhere to shoot', {
		size: 50,
		fill: "#ffffff"
	});
	instructionsTxt.anchor.set(0, 0);
	LK.gui.topLeft.addChild(instructionsTxt);
	// Create a red line 3/4 down the screen
	var redLine = LK.getAsset('redLine', {});
	redLine.width = game.width;
	redLine.height = 5;
	redLine.y = game.height * 0.75;
	game.addChild(redLine);
	// Create joystick instance
	var joystick = new JoystickAsset();
	joystick.x = joystick.width / 2 + 150;
	joystick.y = game.height - joystick.height / 2 - 150;
	joystick.setMoveCallback(function (direction) {
		hero.x = Math.max(hero.width / 2, Math.min(game.width - hero.width / 2, hero.x + direction.x * 10));
	});
	game.addChild(joystick);
	// Handle hero dragging
	var dragNode = null;
	game.on('down', function (obj) {
		hero.shoot();
	});
	game.on('move', function (obj) {
		var event = obj.event;
		var pos = event.getLocalPosition(game);
		hero.x = pos.x;
	});
	// Global event listener for shooting bullets
	// Game tick event
	LK.on('tick', function () {
		// Update character
		hero.update();
		// Move and check bullets
		for (var i = heroBullets.length - 1; i >= 0; i--) {
			var bullet = heroBullets[i];
			bullet.move();
			// Check for bullet collision with enemies
			for (var j = enemies.length - 1; j >= 0; j--) {
				if (bullet.intersects(enemies[j])) {
					// Update score
					var newScore = LK.getScore() + 1;
					LK.setScore(newScore);
					scoreTxt.setText('Score: ' + newScore);
					var highScore = Math.max(newScore, Number((typeof localStorage !== 'undefined' ? localStorage.getItem('highScore') : '0') || '0'));
					highScoreTxt.setText('High Score: ' + highScore + ' (WIP)');
					if (typeof localStorage !== 'undefined') {
						localStorage.setItem('highScore', highScore);
					}
					// Increment character's bullet limit
					hero.bulletLimit++;
					bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
					// Destroy enemy and bullet
					enemies[j].destroy();
					enemies.splice(j, 1);
					bullet.destroy();
					heroBullets.splice(i, 1);
					break;
				}
			}
			// Check for bullet collision with bullet packs
			for (var k = bulletPacks.length - 1; k >= 0; k--) {
				if (bullet.intersects(bulletPacks[k])) {
					// Increment character's bullet limit by 5
					hero.bulletLimit += 5;
					bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
					// Destroy bullet pack and bullet
					bulletPacks[k].destroy();
					bulletPacks.splice(k, 1);
					bullet.destroy();
					heroBullets.splice(i, 1);
					break;
				}
			}
			// Remove off-screen bullets and end the game if it's the last one
			if (bullet.y < 0) {
				bullet.destroy();
				heroBullets.splice(i, 1);
				if (heroBullets.length === 0 && hero.bulletLimit === 0) {
					LK.showGameOver(); // End the game when the last bullet is out of frame
				}
			}
		}
		// Move and check enemies
		for (var i = enemies.length - 1; i >= 0; i--) {
			var enemy = enemies[i];
			enemy.move();
			// Check for collision with the hero
			if (hero.intersects(enemy)) {
				LK.showGameOver();
				return; // Stop processing further updates if there's a collision with the hero
			}
			// Remove off-screen enemies
			if (enemy.y > game.height) {
				enemy.destroy();
				enemies.splice(i, 1);
			}
		}
		// Move and check bullet packs
		for (var i = bulletPacks.length - 1; i >= 0; i--) {
			var bulletPack = bulletPacks[i];
			bulletPack.move();
			// Remove off-screen bullet packs
			if (bulletPack.y > game.height) {
				bulletPack.destroy();
				bulletPacks.splice(i, 1);
			}
		}
		// Spawn enemies randomly
		if (Math.random() < 0.02) {
			var enemy = new Enemy();
			enemy.x = Math.random() * game.width;
			enemy.y = -100;
			enemies.push(enemy);
			game.addChild(enemy);
		}
	});
	// Spawn bullet packs randomly
	if (Math.random() < 0.01) {
		var bulletPack = new BulletPack();
		bulletPack.x = Math.random() * game.width;
		bulletPack.y = -100;
		bulletPacks.push(bulletPack);
		game.addChild(bulletPack);
	}
	// End of 'tick' event listener
	// End of initializeGame function
	function createMenuPage(container, difficultyText, difficultyLevel, color) {
		// ... (previous code)
	}
	// Create title text
	var titleText = new Text2('Select Difficulty', {
		size: 100,
		fill: "#ffffff"
	});
	titleText.anchor.set(0.5, 0);
	container.addChild(titleText);
	// Create difficulty button
	var difficultyButton = new Button(difficultyText, container.width / 2, titleText.height + 50, function () {
		// Set difficulty and start the game
		difficulty = difficultyLevel;
		game.clearChildren();
		initializeGame();
		LK.hideMenuPage(container);
	});
	difficultyButton.anchor.set(0.5, 0);
	container.addChild(difficultyButton);
	// Set background color
	container.backgroundColor = color;
	// Hide the page initially
	LK.hideMenuPage(container);
}
// Initial setup
var difficulty = null;
// Show menu pages
var easyMenuPage = new EasyMenuPage();
var mediumMenuPage = new MediumMenuPage();
var hardMenuPage = new HardMenuPage();
LK.showMenuPage(easyMenuPage);
// Hide loader
LK.hideLoader(); ===================================================================
--- original.js
+++ change.js
@@ -181,8 +181,31 @@
 ****/
 var heroBullets = [];
 var bulletPacks = []; // Declare bulletPacks array in the global scope
 var bulletCountTxt; // Declare bulletCountTxt in the global scope
+function createMenuPage(container, difficultyText, difficultyLevel, color) {
+	// Create title text
+	var titleText = new Text2('Select Difficulty', {
+		size: 100,
+		fill: "#ffffff"
+	});
+	titleText.anchor.set(0.5, 0);
+	container.addChild(titleText);
+	// Create difficulty button
+	var difficultyButton = new Button(difficultyText, container.width / 2, titleText.height + 50, function () {
+		// Set difficulty and start the game
+		difficulty = difficultyLevel;
+		game.clearChildren();
+		initializeGame();
+		LK.hideMenuPage(container);
+	});
+	difficultyButton.anchor.set(0.5, 0);
+	container.addChild(difficultyButton);
+	// Set background color
+	container.backgroundColor = color;
+	// Hide the page initially
+	LK.hideMenuPage(container);
+}
 function initializeGame() {
 	// Initialize important asset arrays
 	var enemies = [];
 	// Create character
:quality(85)/https://cdn.frvr.ai/65aa62cebca71288805c4d0a.png%3F3) 
 android. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65aa6901bca71288805c4d84.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65aa7a6f12d8ad61c57ee902.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65ac257b45869b8be6c9cd00.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65ac25b445869b8be6c9cd03.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65b15b784e5a44bf3a180420.png%3F3) 
 letter X png. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65b15be04e5a44bf3a180427.png%3F3) 
 space background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65b15c764e5a44bf3a180433.png%3F3) 
 galaxy background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
:quality(85)/https://cdn.frvr.ai/65b15d0e4e5a44bf3a180440.png%3F3) 
 galaxy background. High quality
:quality(85)/https://cdn.frvr.ai/65b15de74e5a44bf3a18044a.png%3F3) 
 space background.. High contrast
:quality(85)/https://cdn.frvr.ai/65b15f544e5a44bf3a18045f.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/65b15f704e5a44bf3a180462.png%3F3)