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 playerTime = elapsedTime; // Set playerTime equal to elapsedTime gamestart = false; // Set gamestart to false // Add player record records.push({ name: nameplayer, time: playerTime }); // Sort records by playertime in descending order records.sort(function (a, b) { return b.time - a.time; }); // Keep only top 10 records if (records.length > 10) { records.pop(); } // Save updated records storage.records = records.map(function (record) { return { name: record.name, time: record.time }; }); 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 = "aaa"; // 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 records = storage.records || 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 };
===================================================================
--- original.js
+++ change.js
@@ -133,9 +133,14 @@
if (records.length > 10) {
records.pop();
}
// Save updated records
- storage.records = records;
+ storage.records = records.map(function (record) {
+ return {
+ name: record.name,
+ time: record.time
+ };
+ });
break;
}
}
// Check for collision with EnemySaw