User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return [record.name, record.time];' Line Number: 153
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return {' Line Number: 153
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return [record.name, record.time];' Line Number: 153
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return {' Line Number: 153
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return {' Line Number: 153
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return {' Line Number: 153
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return {' Line Number: 153
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.records = records;' Line Number: 152
User prompt
- crea una logica para agregar el record cuando player muere - Este guarda name y playertime - Este se ordena de 1 a 10 segun el valor de playertime si es mayor - si hay más de 10 borra el ultimo
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return {' Line Number: 151
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return {' Line Number: 151
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load('records').then(function (loadedRecords) {' Line Number: 224 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage.get is not a function' in or related to this line: 'storage.get('records').then(function (loadedRecords) {' Line Number: 224
User prompt
Please fix the bug: 'storage.load is not a function' in or related to this line: 'storage.load(); // Load records from storage' Line Number: 224
User prompt
mejora la logica de guardado para los records
User prompt
haz que al finalizar playertime sea igual a elapsetime
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return {' Line Number: 150
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'return {' Line Number: 150
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.records = records; // Save updated records to storage' Line Number: 149
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.records = records; // Save updated records to storage' Line Number: 149
User prompt
Dale más estilo a la tabla
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
/**** * Plugins ****/ var facekit = LK.import("@upit/facekit.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Background = Container.expand(function () { var self = Container.call(this); var backgroundGraphics = self.attachAsset('Background', { anchorX: 0.5, anchorY: 0.5 }); self.x = 2048 / 2; // Set the x position to the center of the screen self.y = 2732 / 2; // Set the y position to the center of the screen }); var EnemyArrow = Container.expand(function () { var self = Container.call(this); var bEnemyArrowGraphics = self.attachAsset('EnemyArrow', { anchorX: 0.5, anchorY: 0.5 }); // Set the x and y position to a random value at the edges of the spawn area enemyLogic(self); var targetX = player.x; var targetY = player.y; self.update = function () { if (!gamestart) { return; } // Ensure enemy logic only executes when gamestart is true var dx = targetX - self.x; var dy = targetY - self.y; var angle = Math.atan2(dy, dx); self.x += Math.cos(angle) * 7.5; self.y += Math.sin(angle) * 7.5; self.rotation = angle; if (Math.abs(self.x - targetX) < 5 && Math.abs(self.y - targetY) < 5) { targetX += Math.cos(angle) * 1000; targetY += Math.sin(angle) * 1000; } // Check if the EnemyArrow has moved to the opposite side of its spawn point if (self.x < 0 || self.x > 3000 || self.y < 0 || self.y > 3000) { self.destroy(); // Remove the EnemyArrow from the game } }; }); var EnemySaw = Container.expand(function () { var self = Container.call(this); var bEnemySawGraphics = self.attachAsset('EnemySaw', { anchorX: 0.5, anchorY: 0.5 }); // Set the x and y position to a random value at the edges of the spawn area enemyLogic(self); var targetX = player.x; var targetY = player.y; self.update = function () { if (!gamestart) { return; } // Ensure enemy logic only executes when gamestart is true var dx = targetX - self.x; var dy = targetY - self.y; var angle = Math.atan2(dy, dx); if (!self.stopSaw && !self.hasStopped && Math.sqrt(dx * dx + dy * dy) < 400) { self.stopSaw = true; self.hasStopped = true; // Ensure it only stops the first time LK.setTimeout(function () { self.stopSaw = false; targetX = player.x; targetY = player.y; }, 2000); } if (!self.stopSaw) { var speedMultiplier = self.hasStopped ? 1.5 : 1; self.x += Math.cos(angle) * 7.5 * speedMultiplier; self.y += Math.sin(angle) * 7.5 * speedMultiplier; } self.rotation += 0.03; // Add constant rotation to EnemySaw if (Math.abs(self.x - targetX) < 5 && Math.abs(self.y - targetY) < 5) { targetX += Math.cos(angle) * 1000; targetY += Math.sin(angle) * 1000; } // Check if the EnemySaw has moved to the opposite side of its spawn point if (self.x < 0 || self.x > 3000 || self.y < 0 || self.y > 3000) { self.destroy(); // Remove the EnemySaw from the game } }; }); var Player = Container.expand(function () { var self = Container.call(this); var faceGraphics = self.attachAsset('faceObject', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // Define a smoothing factor if (!gamestart) { return; } // Ensure playe05 movement only occurs when gamestart is true var smoothing = 0.05; // Update the position of the face follower to follow the nose tip with smoothing var targetX = facekit.noseTip.x; var targetY = facekit.noseTip.y; // Adjust the range of movement for the faceFollower object to be within a square in the middle of the screen var leftBound = (2048 - 1000) / 2; var rightBound = leftBound + 1000; var topBound = (2732 - 1000) / 2; var bottomBound = topBound + 1000; // Limit target position within the defined bounds targetX = Math.max(leftBound, Math.min(rightBound, targetX)); targetY = Math.max(topBound, Math.min(bottomBound, targetY)); // Apply smoothing self.x += (targetX - self.x) * smoothing; self.y += (targetY - self.y) * smoothing; // Check for collision with EnemyArrow for (var i = 0; i < enemyArrows.length; i++) { if (self.intersects(enemyArrows[i])) { self.destroy(); // Eliminate player gamestart = false; // Set gamestart to false // Show a popup to ask for the player's name var playerName = prompt("Enter your name:"); // Add the player's name and time to the records list records.push({ name: playerName, time: playerTime }); // Sort the records list by time in descending order and keep only the top 10 records.sort(function (a, b) { return b.time - a.time; }); records = records.slice(0, 10); storage.records = records; // Save updated records to storage // LK.showGameOver(); // End the game break; } } // Check for collision with EnemySaw for (var i = 0; i < enemySaw.length; i++) { if (self.intersects(enemySaw[i])) { self.destroy(); // Eliminate player gamestart = false; // Set gamestart to false LK.showGameOver(); // End the game break; } } }; }); var RangedLimiter = Container.expand(function () { var self = Container.call(this); var limiterGraphics = self.attachAsset('RangedLimiter', { anchorX: 0.5, anchorY: 0.5, alpha: 0.5 }); }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ var nameplayer = ""; // Variable to store the player's name var playerTime = 0; // Variable to track the player's time var records = storage.records || [{ name: "kaoshi", time: 120 }, { name: "Slime", time: 110 }, { name: "Pepe", time: 100 }, { name: "Arturo", time: 90 }, { name: "Juan", time: 80 }, { name: "NoSe", time: 70 }, { name: "JJAJA", time: 60 }, { name: "Alguien", time: 50 }, { name: "Leera", time: 40 }, { name: "Esto?", time: 30 }]; // List to store player records var gamestart = false; function enemyLogic(entity) { var edge = Math.random(); if (edge < 0.25) { // Top edge entity.x = Math.random() * 2000; entity.y = 0; } else if (edge < 0.5) { // Bottom edge entity.x = Math.random() * 2000; entity.y = 3000; } else if (edge < 0.75) { // Left edge entity.x = 0; entity.y = Math.random() * 2000; } else { // Right edge entity.x = 3000; entity.y = Math.random() * 2000; } // Allow specifying enemy spawn time, default to random between 2 and 4 seconds if not provided entity.spawnTime = entity.spawnTime || Math.random() * 2000 + 2000; } var background = game.addChild(new Background()); // Create a timer text object var timerTxt = new Text2('0', { size: 100, fill: 0xFFFFFF }); // Set the anchor to the center of the top edge timerTxt.anchor.set(0.5, 0); // Add the timer text to the GUI overlay at the top-center of the screen LK.gui.top.addChild(timerTxt); // Initialize a variable to keep track of elapsed time var elapsedTime = 0; // Create a timer that updates every second var timerInterval = LK.setInterval(function () { if (!gamestart) { return; } // Ensure timer only updates when gamestart is true elapsedTime++; var minutes = Math.floor(elapsedTime / 60); // Calculate minutes var seconds = elapsedTime % 60; // Calculate remaining seconds var timeString = minutes > 0 ? minutes + "m " + seconds + "s" : seconds + "s"; // Format time string timerTxt.setText(timeString); }, 1000); var player = game.addChild(new Player()); player.x = 2048 / 2; // Center the player on the x-axis player.y = 2732 / 2; // Center the player on the y-axis game.up = function (x, y, obj) { player.scaleX = 1; player.scaleY = 1; }; game.down = function (x, y, obj) { player.scaleX = 0.5; player.scaleY = 0.5; }; // Create a list to store EnemyArrow instances var enemyArrows = []; // Create a timer that creates a new EnemyArrow every random interval between 1 and 2 seconds var enemyArrowInterval = LK.setInterval(function () { if (!gamestart) { return; } var enemyArrow = game.addChild(new EnemyArrow()); enemyArrows.push(enemyArrow); // Add the new EnemyArrow to the list // Set a timeout to remove the EnemyArrow after 20 seconds LK.setTimeout(function () { if (enemyArrows.includes(enemyArrow)) { enemyArrow.destroy(); enemyArrows.splice(enemyArrows.indexOf(enemyArrow), 1); } }, 20000); }, Math.random() * 380 + 1000); var enemySaw = []; LK.setTimeout(function () { var enemySawInterval = LK.setInterval(function () { if (!gamestart) { return; } var newEnemySaw = game.addChild(new EnemySaw()); enemySaw.push(newEnemySaw); // Add the new EnemySaw to the list // Set a timeout to remove the EnemySaw after 20 seconds LK.setTimeout(function () { if (enemySaw.includes(newEnemySaw)) { newEnemySaw.destroy(); enemySaw.splice(enemySaw.indexOf(newEnemySaw), 1); } }, 20000); }, 1500 + 1000); }, 5000); // Delay the start by 30 seconds var rangerlimited = game.addChild(new RangedLimiter()); rangerlimited.x = 2048 / 2; // Center the RangedLimiter on the x-axis rangerlimited.y = 2732 / 2; // Center the RangedLimiter on the y-axis // Create an initial menu var menuContainer = new Container(); // Add a black background to the menu var menuBackground = LK.getAsset('BackgroundMenu', { anchorX: 0.5, anchorY: 0.5 }); menuBackground.x = 2048 / 2; menuBackground.y = 2732 / 2; menuContainer.addChild(menuBackground); // Add a title to the menu var title = new Text2('Game Title', { size: 150, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" // Arcade style font }); title.anchor.set(0.5, 0.5); title.x = 2048 / 2; title.y = 500; menuContainer.addChild(title); // Create buttons var startButtonAsset = LK.getAsset('Buttom', { anchorX: 0.5, anchorY: 0.5, alpha: 0 // Set transparency to 0 }); startButtonAsset.x = 2048 / 2; startButtonAsset.y = 1000; menuContainer.addChild(startButtonAsset); var startButton = new Text2('Game Start', { size: 100, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" // Arcade style font }); startButton.anchor.set(0.5, 0.5); startButton.x = 2048 / 2; startButton.y = 1000; menuContainer.addChild(startButton); var recordButtonAsset = LK.getAsset('Buttom', { anchorX: 0.5, anchorY: 0.5, alpha: 0 // Set transparency to 0 }); recordButtonAsset.x = 2048 / 2; recordButtonAsset.y = 1300; menuContainer.addChild(recordButtonAsset); var recordButton = new Text2('Record', { size: 100, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" // Arcade style font }); recordButton.anchor.set(0.5, 0.5); recordButton.x = 2048 / 2; recordButton.y = 1300; menuContainer.addChild(recordButton); var howToPlayButtonAsset = LK.getAsset('Buttom', { anchorX: 0.5, anchorY: 0.5, alpha: 0 // Set transparency to 0 }); howToPlayButtonAsset.x = 2048 / 2; howToPlayButtonAsset.y = 1600; menuContainer.addChild(howToPlayButtonAsset); var howToPlayButton = new Text2('How to Play', { size: 100, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" // Arcade style font }); howToPlayButton.anchor.set(0.5, 0.5); howToPlayButton.x = 2048 / 2; howToPlayButton.y = 1600; menuContainer.addChild(howToPlayButton); var creditsButtonAsset = LK.getAsset('Buttom', { anchorX: 0.5, anchorY: 0.5, alpha: 0 // Set transparency to 0 }); creditsButtonAsset.x = 2048 / 2; creditsButtonAsset.y = 1900; menuContainer.addChild(creditsButtonAsset); var creditsButton = new Text2('Credits', { size: 100, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" // Arcade style font }); creditsButton.anchor.set(0.5, 0.5); creditsButton.x = 2048 / 2; creditsButton.y = 1900; menuContainer.addChild(creditsButton); game.addChild(menuContainer); ; // Add event listener to 'Record' button recordButtonAsset.down = function (x, y, obj) { showRecordsPage(); // Show the records page }; // Function to display the records page function showRecordsPage() { // Create a new container for the records page var recordsContainer = new Container(); // Add a black background to the records page var recordsBackground = LK.getAsset('BackgroundMenu', { anchorX: 0.5, anchorY: 0.5 }); recordsBackground.x = 2048 / 2; recordsBackground.y = 2732 / 2; recordsContainer.addChild(recordsBackground); // Add a title to the records page var recordsTitle = new Text2('Records', { size: 150, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" }); recordsTitle.anchor.set(0.5, 0.5); recordsTitle.x = 2048 / 2; recordsTitle.y = 500; recordsContainer.addChild(recordsTitle); // Create a table for the records var tableStartY = 700; var rowHeight = 150; var columnWidths = [200, 800, 400]; // Widths for Top, Name, Best Time columns // Add table headers var headers = ['Top', 'Name', 'Best Time']; for (var i = 0; i < headers.length; i++) { var header = new Text2(headers[i], { size: 60, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" }); header.anchor.set(0.5, 0.5); header.x = 2048 / 2 - 600 + columnWidths.slice(0, i).reduce(function (a, b) { return a + b; }, 0) + columnWidths[i] / 2; header.y = tableStartY; recordsContainer.addChild(header); } // Add table rows for (var row = 0; row < 10; row++) { for (var col = 0; col < headers.length; col++) { var cellText = ''; if (row < records.length) { if (col === 0) { cellText = (row + 1).toString(); // Top position } else if (col === 1) { cellText = records[row].name; // Player name } else if (col === 2) { cellText = records[row].time.toString(); // Best time } } var cell = new Text2(cellText, { size: 80, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" }); cell.anchor.set(0.5, 0.5); cell.x = 2048 / 2 - 600 + columnWidths.slice(0, col).reduce(function (a, b) { return a + b; }, 0) + columnWidths[col] / 2; cell.y = tableStartY + (row + 1) * rowHeight; recordsContainer.addChild(cell); } } // Add a back button to return to the main menu var backButtonAsset = LK.getAsset('Buttom', { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); backButtonAsset.x = 2048 / 2; backButtonAsset.y = 2300; recordsContainer.addChild(backButtonAsset); var backButton = new Text2('Back', { size: 100, fill: 0xFFFFFF, font: "'Press Start 2P', cursive" }); backButton.anchor.set(0.5, 0.5); backButton.x = 2048 / 2; backButton.y = 2400; recordsContainer.addChild(backButton); // Add event listener to 'Back' button backButtonAsset.down = function (x, y, obj) { recordsContainer.visible = false; // Hide the records page menuContainer.visible = true; // Show the main menu }; // Add the records page to the game game.addChild(recordsContainer); } // Add event listener to 'Game Start' button startButtonAsset.down = function (x, y, obj) { menuContainer.visible = false; // Hide the menu gamestart = true; // Start the game };
/****
* Plugins
****/
var facekit = LK.import("@upit/facekit.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Background = Container.expand(function () {
var self = Container.call(this);
var backgroundGraphics = self.attachAsset('Background', {
anchorX: 0.5,
anchorY: 0.5
});
self.x = 2048 / 2; // Set the x position to the center of the screen
self.y = 2732 / 2; // Set the y position to the center of the screen
});
var EnemyArrow = Container.expand(function () {
var self = Container.call(this);
var bEnemyArrowGraphics = self.attachAsset('EnemyArrow', {
anchorX: 0.5,
anchorY: 0.5
});
// Set the x and y position to a random value at the edges of the spawn area
enemyLogic(self);
var targetX = player.x;
var targetY = player.y;
self.update = function () {
if (!gamestart) {
return;
} // Ensure enemy logic only executes when gamestart is true
var dx = targetX - self.x;
var dy = targetY - self.y;
var angle = Math.atan2(dy, dx);
self.x += Math.cos(angle) * 7.5;
self.y += Math.sin(angle) * 7.5;
self.rotation = angle;
if (Math.abs(self.x - targetX) < 5 && Math.abs(self.y - targetY) < 5) {
targetX += Math.cos(angle) * 1000;
targetY += Math.sin(angle) * 1000;
}
// Check if the EnemyArrow has moved to the opposite side of its spawn point
if (self.x < 0 || self.x > 3000 || self.y < 0 || self.y > 3000) {
self.destroy(); // Remove the EnemyArrow from the game
}
};
});
var EnemySaw = Container.expand(function () {
var self = Container.call(this);
var bEnemySawGraphics = self.attachAsset('EnemySaw', {
anchorX: 0.5,
anchorY: 0.5
});
// Set the x and y position to a random value at the edges of the spawn area
enemyLogic(self);
var targetX = player.x;
var targetY = player.y;
self.update = function () {
if (!gamestart) {
return;
} // Ensure enemy logic only executes when gamestart is true
var dx = targetX - self.x;
var dy = targetY - self.y;
var angle = Math.atan2(dy, dx);
if (!self.stopSaw && !self.hasStopped && Math.sqrt(dx * dx + dy * dy) < 400) {
self.stopSaw = true;
self.hasStopped = true; // Ensure it only stops the first time
LK.setTimeout(function () {
self.stopSaw = false;
targetX = player.x;
targetY = player.y;
}, 2000);
}
if (!self.stopSaw) {
var speedMultiplier = self.hasStopped ? 1.5 : 1;
self.x += Math.cos(angle) * 7.5 * speedMultiplier;
self.y += Math.sin(angle) * 7.5 * speedMultiplier;
}
self.rotation += 0.03; // Add constant rotation to EnemySaw
if (Math.abs(self.x - targetX) < 5 && Math.abs(self.y - targetY) < 5) {
targetX += Math.cos(angle) * 1000;
targetY += Math.sin(angle) * 1000;
}
// Check if the EnemySaw has moved to the opposite side of its spawn point
if (self.x < 0 || self.x > 3000 || self.y < 0 || self.y > 3000) {
self.destroy(); // Remove the EnemySaw from the game
}
};
});
var Player = Container.expand(function () {
var self = Container.call(this);
var faceGraphics = self.attachAsset('faceObject', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Define a smoothing factor
if (!gamestart) {
return;
} // Ensure playe05 movement only occurs when gamestart is true
var smoothing = 0.05;
// Update the position of the face follower to follow the nose tip with smoothing
var targetX = facekit.noseTip.x;
var targetY = facekit.noseTip.y;
// Adjust the range of movement for the faceFollower object to be within a square in the middle of the screen
var leftBound = (2048 - 1000) / 2;
var rightBound = leftBound + 1000;
var topBound = (2732 - 1000) / 2;
var bottomBound = topBound + 1000;
// Limit target position within the defined bounds
targetX = Math.max(leftBound, Math.min(rightBound, targetX));
targetY = Math.max(topBound, Math.min(bottomBound, targetY));
// Apply smoothing
self.x += (targetX - self.x) * smoothing;
self.y += (targetY - self.y) * smoothing;
// Check for collision with EnemyArrow
for (var i = 0; i < enemyArrows.length; i++) {
if (self.intersects(enemyArrows[i])) {
self.destroy(); // Eliminate player
gamestart = false; // Set gamestart to false
// Show a popup to ask for the player's name
var playerName = prompt("Enter your name:");
// Add the player's name and time to the records list
records.push({
name: playerName,
time: playerTime
});
// Sort the records list by time in descending order and keep only the top 10
records.sort(function (a, b) {
return b.time - a.time;
});
records = records.slice(0, 10);
storage.records = records; // Save updated records to storage
// LK.showGameOver(); // End the game
break;
}
}
// Check for collision with EnemySaw
for (var i = 0; i < enemySaw.length; i++) {
if (self.intersects(enemySaw[i])) {
self.destroy(); // Eliminate player
gamestart = false; // Set gamestart to false
LK.showGameOver(); // End the game
break;
}
}
};
});
var RangedLimiter = Container.expand(function () {
var self = Container.call(this);
var limiterGraphics = self.attachAsset('RangedLimiter', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.5
});
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
var nameplayer = ""; // Variable to store the player's name
var playerTime = 0; // Variable to track the player's time
var records = storage.records || [{
name: "kaoshi",
time: 120
}, {
name: "Slime",
time: 110
}, {
name: "Pepe",
time: 100
}, {
name: "Arturo",
time: 90
}, {
name: "Juan",
time: 80
}, {
name: "NoSe",
time: 70
}, {
name: "JJAJA",
time: 60
}, {
name: "Alguien",
time: 50
}, {
name: "Leera",
time: 40
}, {
name: "Esto?",
time: 30
}]; // List to store player records
var gamestart = false;
function enemyLogic(entity) {
var edge = Math.random();
if (edge < 0.25) {
// Top edge
entity.x = Math.random() * 2000;
entity.y = 0;
} else if (edge < 0.5) {
// Bottom edge
entity.x = Math.random() * 2000;
entity.y = 3000;
} else if (edge < 0.75) {
// Left edge
entity.x = 0;
entity.y = Math.random() * 2000;
} else {
// Right edge
entity.x = 3000;
entity.y = Math.random() * 2000;
}
// Allow specifying enemy spawn time, default to random between 2 and 4 seconds if not provided
entity.spawnTime = entity.spawnTime || Math.random() * 2000 + 2000;
}
var background = game.addChild(new Background());
// Create a timer text object
var timerTxt = new Text2('0', {
size: 100,
fill: 0xFFFFFF
});
// Set the anchor to the center of the top edge
timerTxt.anchor.set(0.5, 0);
// Add the timer text to the GUI overlay at the top-center of the screen
LK.gui.top.addChild(timerTxt);
// Initialize a variable to keep track of elapsed time
var elapsedTime = 0;
// Create a timer that updates every second
var timerInterval = LK.setInterval(function () {
if (!gamestart) {
return;
} // Ensure timer only updates when gamestart is true
elapsedTime++;
var minutes = Math.floor(elapsedTime / 60); // Calculate minutes
var seconds = elapsedTime % 60; // Calculate remaining seconds
var timeString = minutes > 0 ? minutes + "m " + seconds + "s" : seconds + "s"; // Format time string
timerTxt.setText(timeString);
}, 1000);
var player = game.addChild(new Player());
player.x = 2048 / 2; // Center the player on the x-axis
player.y = 2732 / 2; // Center the player on the y-axis
game.up = function (x, y, obj) {
player.scaleX = 1;
player.scaleY = 1;
};
game.down = function (x, y, obj) {
player.scaleX = 0.5;
player.scaleY = 0.5;
};
// Create a list to store EnemyArrow instances
var enemyArrows = [];
// Create a timer that creates a new EnemyArrow every random interval between 1 and 2 seconds
var enemyArrowInterval = LK.setInterval(function () {
if (!gamestart) {
return;
}
var enemyArrow = game.addChild(new EnemyArrow());
enemyArrows.push(enemyArrow); // Add the new EnemyArrow to the list
// Set a timeout to remove the EnemyArrow after 20 seconds
LK.setTimeout(function () {
if (enemyArrows.includes(enemyArrow)) {
enemyArrow.destroy();
enemyArrows.splice(enemyArrows.indexOf(enemyArrow), 1);
}
}, 20000);
}, Math.random() * 380 + 1000);
var enemySaw = [];
LK.setTimeout(function () {
var enemySawInterval = LK.setInterval(function () {
if (!gamestart) {
return;
}
var newEnemySaw = game.addChild(new EnemySaw());
enemySaw.push(newEnemySaw); // Add the new EnemySaw to the list
// Set a timeout to remove the EnemySaw after 20 seconds
LK.setTimeout(function () {
if (enemySaw.includes(newEnemySaw)) {
newEnemySaw.destroy();
enemySaw.splice(enemySaw.indexOf(newEnemySaw), 1);
}
}, 20000);
}, 1500 + 1000);
}, 5000); // Delay the start by 30 seconds
var rangerlimited = game.addChild(new RangedLimiter());
rangerlimited.x = 2048 / 2; // Center the RangedLimiter on the x-axis
rangerlimited.y = 2732 / 2; // Center the RangedLimiter on the y-axis
// Create an initial menu
var menuContainer = new Container();
// Add a black background to the menu
var menuBackground = LK.getAsset('BackgroundMenu', {
anchorX: 0.5,
anchorY: 0.5
});
menuBackground.x = 2048 / 2;
menuBackground.y = 2732 / 2;
menuContainer.addChild(menuBackground);
// Add a title to the menu
var title = new Text2('Game Title', {
size: 150,
fill: 0xFFFFFF,
font: "'Press Start 2P', cursive" // Arcade style font
});
title.anchor.set(0.5, 0.5);
title.x = 2048 / 2;
title.y = 500;
menuContainer.addChild(title);
// Create buttons
var startButtonAsset = LK.getAsset('Buttom', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0 // Set transparency to 0
});
startButtonAsset.x = 2048 / 2;
startButtonAsset.y = 1000;
menuContainer.addChild(startButtonAsset);
var startButton = new Text2('Game Start', {
size: 100,
fill: 0xFFFFFF,
font: "'Press Start 2P', cursive" // Arcade style font
});
startButton.anchor.set(0.5, 0.5);
startButton.x = 2048 / 2;
startButton.y = 1000;
menuContainer.addChild(startButton);
var recordButtonAsset = LK.getAsset('Buttom', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0 // Set transparency to 0
});
recordButtonAsset.x = 2048 / 2;
recordButtonAsset.y = 1300;
menuContainer.addChild(recordButtonAsset);
var recordButton = new Text2('Record', {
size: 100,
fill: 0xFFFFFF,
font: "'Press Start 2P', cursive" // Arcade style font
});
recordButton.anchor.set(0.5, 0.5);
recordButton.x = 2048 / 2;
recordButton.y = 1300;
menuContainer.addChild(recordButton);
var howToPlayButtonAsset = LK.getAsset('Buttom', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0 // Set transparency to 0
});
howToPlayButtonAsset.x = 2048 / 2;
howToPlayButtonAsset.y = 1600;
menuContainer.addChild(howToPlayButtonAsset);
var howToPlayButton = new Text2('How to Play', {
size: 100,
fill: 0xFFFFFF,
font: "'Press Start 2P', cursive" // Arcade style font
});
howToPlayButton.anchor.set(0.5, 0.5);
howToPlayButton.x = 2048 / 2;
howToPlayButton.y = 1600;
menuContainer.addChild(howToPlayButton);
var creditsButtonAsset = LK.getAsset('Buttom', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0 // Set transparency to 0
});
creditsButtonAsset.x = 2048 / 2;
creditsButtonAsset.y = 1900;
menuContainer.addChild(creditsButtonAsset);
var creditsButton = new Text2('Credits', {
size: 100,
fill: 0xFFFFFF,
font: "'Press Start 2P', cursive" // Arcade style font
});
creditsButton.anchor.set(0.5, 0.5);
creditsButton.x = 2048 / 2;
creditsButton.y = 1900;
menuContainer.addChild(creditsButton);
game.addChild(menuContainer);
;
// Add event listener to 'Record' button
recordButtonAsset.down = function (x, y, obj) {
showRecordsPage(); // Show the records page
};
// Function to display the records page
function showRecordsPage() {
// Create a new container for the records page
var recordsContainer = new Container();
// Add a black background to the records page
var recordsBackground = LK.getAsset('BackgroundMenu', {
anchorX: 0.5,
anchorY: 0.5
});
recordsBackground.x = 2048 / 2;
recordsBackground.y = 2732 / 2;
recordsContainer.addChild(recordsBackground);
// Add a title to the records page
var recordsTitle = new Text2('Records', {
size: 150,
fill: 0xFFFFFF,
font: "'Press Start 2P', cursive"
});
recordsTitle.anchor.set(0.5, 0.5);
recordsTitle.x = 2048 / 2;
recordsTitle.y = 500;
recordsContainer.addChild(recordsTitle);
// Create a table for the records
var tableStartY = 700;
var rowHeight = 150;
var columnWidths = [200, 800, 400]; // Widths for Top, Name, Best Time columns
// Add table headers
var headers = ['Top', 'Name', 'Best Time'];
for (var i = 0; i < headers.length; i++) {
var header = new Text2(headers[i], {
size: 60,
fill: 0xFFFFFF,
font: "'Press Start 2P', cursive"
});
header.anchor.set(0.5, 0.5);
header.x = 2048 / 2 - 600 + columnWidths.slice(0, i).reduce(function (a, b) {
return a + b;
}, 0) + columnWidths[i] / 2;
header.y = tableStartY;
recordsContainer.addChild(header);
}
// Add table rows
for (var row = 0; row < 10; row++) {
for (var col = 0; col < headers.length; col++) {
var cellText = '';
if (row < records.length) {
if (col === 0) {
cellText = (row + 1).toString(); // Top position
} else if (col === 1) {
cellText = records[row].name; // Player name
} else if (col === 2) {
cellText = records[row].time.toString(); // Best time
}
}
var cell = new Text2(cellText, {
size: 80,
fill: 0xFFFFFF,
font: "'Press Start 2P', cursive"
});
cell.anchor.set(0.5, 0.5);
cell.x = 2048 / 2 - 600 + columnWidths.slice(0, col).reduce(function (a, b) {
return a + b;
}, 0) + columnWidths[col] / 2;
cell.y = tableStartY + (row + 1) * rowHeight;
recordsContainer.addChild(cell);
}
}
// Add a back button to return to the main menu
var backButtonAsset = LK.getAsset('Buttom', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0
});
backButtonAsset.x = 2048 / 2;
backButtonAsset.y = 2300;
recordsContainer.addChild(backButtonAsset);
var backButton = new Text2('Back', {
size: 100,
fill: 0xFFFFFF,
font: "'Press Start 2P', cursive"
});
backButton.anchor.set(0.5, 0.5);
backButton.x = 2048 / 2;
backButton.y = 2400;
recordsContainer.addChild(backButton);
// Add event listener to 'Back' button
backButtonAsset.down = function (x, y, obj) {
recordsContainer.visible = false; // Hide the records page
menuContainer.visible = true; // Show the main menu
};
// Add the records page to the game
game.addChild(recordsContainer);
}
// Add event listener to 'Game Start' button
startButtonAsset.down = function (x, y, obj) {
menuContainer.visible = false; // Hide the menu
gamestart = true; // Start the game
};