Code edit (2 edits merged)
Please save this source code
User prompt
Please replace switch (level) with if clause
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'length')' in or related to this line: 'var startY = (2732 - gridRows.length * tileSpacing) / 2 + tileSpacing / 2;' Line Number: 140
Code edit (4 edits merged)
Please save this source code
User prompt
replace switch statement in initializehextiles to an if clause
User prompt
Make sure hextile.number is visible when created in initializehextiles
User prompt
make sure hextile number is visible on each level start
User prompt
Please fix the bug: 'Timeout.tick error: getChildAt: Supplied index 1 does not exist in the child list, or the supplied DisplayObject must be a child of the caller' in or related to this line: 'hexTiles[i].getChildAt(1).setText('');' Line Number: 108
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toString')' in or related to this line: 'var numberText = new Text2(self.number.toString(), {' Line Number: 20
User prompt
hextile.number should be defined inside the intializeHexTiles function.
Code edit (2 edits merged)
Please save this source code
User prompt
HexTiles number should have different range of numbers depending on the level the player is.
User prompt
Please fix the bug: 'Uncaught ReferenceError: id is not defined' in or related to this line: 'id.numberRange = 3;' Line Number: 45
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Uncaught ReferenceError: numberRange is not defined' in or related to this line: 'self.number = Math.floor(Math.random() * numberRange) + 1;' Line Number: 20
User prompt
when a hexTiles.number is defined, use the range number in the level to define the math.floor number
User prompt
The HexTile.number range should be defined by level in the initializehextiles function.
Code edit (1 edits merged)
Please save this source code
User prompt
In the initializehexTiles() function, on the if statement that defines the gridRows for each level, also add a new variable to define the range of number values that can be assigned to the tiles in that grid.
User prompt
In the initializehexTiles() function, on the if statement that defines the gridRows for each level, also add a new variable to define the hextiles.number for each level too.
Code edit (7 edits merged)
Please save this source code
User prompt
replace switch (level) in initializehexTiles() for an if statement
Code edit (2 edits merged)
Please save this source code
User prompt
on level up, remove previous hex tile before initializehextiles function
User prompt
after every level up, execute initializeHexTiles();
/**** * Classes ****/ // HexTile class for the hexagon tiles var HexTile = Container.expand(function (id, colorIndex) { var self = Container.call(this); self.id = id; var hexGraphics = self.attachAsset('hexTile', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2 }); self.number = Math.floor(Math.random() * 7) + 1; var numberText = new Text2(self.number.toString(), { size: 100, fill: '#000000' }); numberText.anchor.set(0.5, 0.5); self.addChild(numberText); self.isSelected = false; self.toggleSelect = function () { self.isSelected = !self.isSelected; hexGraphics.alpha = self.isSelected ? 0.5 : 1; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with electric green background }); /**** * Game Code ****/ // Hexagon tile for matching function resetGameForNextLevel() { // Reset hexTiles numbers for (var i = 0; i < hexTiles.length; i++) { hexTiles[i].number = Math.floor(Math.random() * 7) + 1; hexTiles[i].getChildAt(1).setText(hexTiles[i].number.toString()); } // Reset goal var randomTile1 = hexTiles[Math.floor(Math.random() * hexTiles.length)]; var randomTile2 = hexTiles[Math.floor(Math.random() * hexTiles.length)]; while (randomTile1 === randomTile2) { randomTile2 = hexTiles[Math.floor(Math.random() * hexTiles.length)]; } goalNumber = randomTile1.number + randomTile2.number; goalText.setText('Sum: ' + goalNumber); // Reset combinations correctCombinations = 0; for (var i = 0; i < hexTiles.length; i++) { for (var j = i + 1; j < hexTiles.length; j++) { if (hexTiles[i].number + hexTiles[j].number === goalNumber) { correctCombinations++; } } } combinationsText.setText('Answers: ' + correctGuess + '/' + correctCombinations); } var level = 1; var levelText = new Text2('Level: ' + level, { size: 75, fill: '#ffffff' }); levelText.anchor.set(1, 0); LK.gui.topRight.addChild(levelText); correctGuess = 0; var correctGuess = 0; var lives = 3; var lifeIcons = []; for (var i = 0; i < lives; i++) { var lifeIcon = LK.getAsset('lifeIcon', { anchorX: 1, anchorY: 0, x: -i * 90, y: 100 }); LK.gui.topRight.addChild(lifeIcon); lifeIcons.push(lifeIcon); } var countdown = 15; if (hexTiles) { for (var i = 0; i < hexTiles.length; i++) { hexTiles[i].interactive = false; } } var countdownText = new Text2('Memorize: ' + countdown, { size: 100, fill: '#ffffff' }); countdownText.anchor.set(0.5, 1); LK.gui.top.addChild(countdownText); var countdownInterval = LK.setInterval(function () { countdown--; if (countdown <= 0) { for (var i = 0; i < hexTiles.length; i++) { hexTiles[i].interactive = true; } countdownText.alpha = 0; goalText.visible = true; combinationsText.visible = true; LK.clearInterval(countdownInterval); for (var i = 0; i < hexTiles.length; i++) { hexTiles[i].getChildAt(1).setText(''); } } else { countdownText.setText('Memorize: ' + countdown); } }, 1000); countdownText.y += 400; var scoreText = new Text2('Score: 0', { size: 75, fill: '#ffffff' }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); // Create goal number and display it below the score if (hexTiles && hexTiles.length > 1) { sumOfNeighbours = hexTiles[hexTiles.length - 2].number + hexTiles[hexTiles.length - 1].number; } // sumText initialization moved to after hexTiles initialization var sumOfNeighbours = 0; var hexTiles = []; var selectedTiles = []; var guessedPairs = {}; // Define gridRows based on the current game level var gridRows = [2, 3, 2]; var tileSpacing = 240; var startX = (2048 - Math.max.apply(Math, gridRows) * tileSpacing) / 2 + tileSpacing / 2; var startY = (2732 - gridRows.length * tileSpacing) / 2 + tileSpacing / 2; function initializeHexTiles() { function initializeHexTiles() { // Define gridRows based on the current game level var gridRows; if (level === 1) { gridRows = [2, 3, 2]; } else if (level === 3) { gridRows = [3, 4, 3]; } else if (level === 4) { gridRows = [4, 5, 4]; } else { // Default to the highest defined grid for levels beyond those explicitly defined gridRows = [4, 5, 4]; } var tileSpacing = 240; var startX = (2048 - Math.max.apply(Math, gridRows) * tileSpacing) / 2 + tileSpacing / 2; var startY = (2732 - gridRows.length * tileSpacing) / 2 + tileSpacing / 2; // Initialize hex tiles for (var i = 0; i < gridRows.length; i++) { for (var j = 0; j < gridRows[i]; j++) { var hexTile = new HexTile(i * gridRows.length + j); hexTile.x = startX + j * tileSpacing + (Math.max.apply(Math, gridRows) - gridRows[i]) * tileSpacing / 2; hexTile.y = startY + i * tileSpacing; game.addChild(hexTile); hexTiles.push(hexTile); (function (hexTile) { hexTile.on('down', function (obj) { if (countdown > 0) { return; } if (selectedTiles.length < 2) { hexTile.toggleSelect(); if (hexTile.isSelected) { selectedTiles.push(hexTile); if (selectedTiles.length == 2) { if (selectedTiles[0].number + selectedTiles[1].number === goalNumber) { var pairId = [selectedTiles[0].id, selectedTiles[1].id].sort().join('-'); if (!guessedPairs[pairId]) { LK.setScore(LK.getScore() + 1); scoreText.setText('Score: ' + LK.getScore()); guessedPairs[pairId] = true; correctGuess++; combinationsText.setText('Answers: ' + correctGuess + '/' + correctCombinations); } LK.setTimeout(function () { if (selectedTiles.length > 0) { selectedTiles[0].toggleSelect(); } if (selectedTiles.length > 1) { selectedTiles[1].toggleSelect(); } selectedTiles = []; }, 200); if (correctGuess === correctCombinations) { level++; correctGuess = 0; guessedPairs = {}; combinationsText.setText('Answers: ' + correctGuess + '/' + correctCombinations); levelText.setText('Level: ' + level); countdown = 15; goalText.visible = false; combinationsText.visible = false; countdownText.alpha = 1; countdownText.setText('Memorize: ' + countdown); LK.clearInterval(countdownInterval); countdownInterval = LK.setInterval(function () { countdown--; if (countdown <= 0) { countdownText.alpha = 0; goalText.visible = true; combinationsText.visible = true; LK.clearInterval(countdownInterval); for (var i = 0; i < hexTiles.length; i++) { hexTiles[i].getChildAt(1).setText(''); } } else { countdownText.setText('Memorize: ' + countdown); } }, 1000); LK.effects.flashScreen(0x00FF00, 500); // Remove previous hex tiles for (var i = 0; i < hexTiles.length; i++) { hexTiles[i].destroy(); } hexTiles = []; initializeHexTiles(); } } else { lives--; lifeIcons[lives].destroy(); if (lives <= 0) { LK.showGameOver(); } else { LK.effects.flashScreen(0xFF0000, 500); } LK.setTimeout(function () { if (selectedTiles.length > 0) { selectedTiles[0].toggleSelect(); } if (selectedTiles.length > 1) { selectedTiles[1].toggleSelect(); } selectedTiles = []; }, 200); } } } else { var index = selectedTiles.indexOf(hexTile); if (index > -1) { selectedTiles.splice(index, 1); } } } }); })(hexTile); } } } initializeHexTiles(); } initializeHexTiles(); var randomTile1 = hexTiles[Math.floor(Math.random() * hexTiles.length)]; var randomTile2 = hexTiles[Math.floor(Math.random() * hexTiles.length)]; while (randomTile1 === randomTile2) { randomTile2 = hexTiles[Math.floor(Math.random() * hexTiles.length)]; } var goalNumber = randomTile1.number + randomTile2.number; var goalText = new Text2('Sum: ' + goalNumber, { size: 100, fill: '#ffffff', alpha: 0 // Make invisible initially }); goalText.visible = false; goalText.anchor.set(0.5, 1); goalText.y += 400; LK.gui.top.addChild(goalText); // Calculate the number of unique correct combinations var correctCombinations = 0; for (var i = 0; i < hexTiles.length; i++) { for (var j = i + 1; j < hexTiles.length; j++) { if (hexTiles[i].number + hexTiles[j].number === goalNumber) { correctCombinations++; } } } // Display the number of unique correct combinations below the goal var combinationsText = new Text2('Answers: ' + correctGuess + '/' + correctCombinations, { size: 100, fill: '#ffffff', alpha: 1 // Make visible }); combinationsText.visible = false; combinationsText.anchor.set(0.5, 0); combinationsText.y += 1400; LK.gui.top.addChild(combinationsText); // Game tick function LK.on('tick', function () { // Game logic that needs to be executed every frame });
===================================================================
--- original.js
+++ change.js
@@ -127,47 +127,25 @@
var hexTiles = [];
var selectedTiles = [];
var guessedPairs = {};
// Define gridRows based on the current game level
-var gridRows;
-switch (level) {
- case 1:
- gridRows = [2, 3, 2];
- break;
- case 2:
- gridRows = [3, 4, 3];
- break;
- case 3:
- gridRows = [4, 5, 4];
- break;
- // Add more cases as needed for higher levels
- default:
- // Default to the highest defined grid for levels beyond those explicitly defined
- gridRows = [4, 5, 4];
- break;
-}
+var gridRows = [2, 3, 2];
var tileSpacing = 240;
var startX = (2048 - Math.max.apply(Math, gridRows) * tileSpacing) / 2 + tileSpacing / 2;
var startY = (2732 - gridRows.length * tileSpacing) / 2 + tileSpacing / 2;
function initializeHexTiles() {
function initializeHexTiles() {
// Define gridRows based on the current game level
var gridRows;
- switch (level) {
- case 1:
- gridRows = [2, 3, 2];
- break;
- case 2:
- gridRows = [2, 3, 2];
- break;
- case 3:
- gridRows = [4, 5, 4];
- break;
- // Add more cases as needed for higher levels
- default:
- // Default to the highest defined grid for levels beyond those explicitly defined
- gridRows = [4, 5, 4];
- break;
+ if (level === 1) {
+ gridRows = [2, 3, 2];
+ } else if (level === 3) {
+ gridRows = [3, 4, 3];
+ } else if (level === 4) {
+ gridRows = [4, 5, 4];
+ } else {
+ // Default to the highest defined grid for levels beyond those explicitly defined
+ gridRows = [4, 5, 4];
}
var tileSpacing = 240;
var startX = (2048 - Math.max.apply(Math, gridRows) * tileSpacing) / 2 + tileSpacing / 2;
var startY = (2732 - gridRows.length * tileSpacing) / 2 + tileSpacing / 2;