User prompt
when unselected, hide number again
User prompt
When a hex is selected, show the number in it.
Code edit (4 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'number')' in or related to this line: 'sumOfNeighbours = hexTiles[hexTiles.length - 2].number + hexTiles[hexTiles.length - 1].number;' Line Number: 144
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'number')' in or related to this line: 'sumOfNeighbours = hexTiles[hexTiles.length - 2].number + hexTiles[hexTiles.length - 1].number;' Line Number: 144
Code edit (1 edits merged)
Please save this source code
Initial prompt
Copy Hex memory numbers 2
/**** * 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; if (self.isSelected) { hexGraphics.alpha = 0.5; self.getChildAt(1).visible = true; } else { hexGraphics.alpha = 1; self.getChildAt(1).visible = false; } }; }); /**** * 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 = {}; var gridRows = [1, 2, 3, 2, 1]; 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++) { if (j > 0 && j < gridRows[i] - 1 && hexTiles.length > 1) { sumOfNeighbours = hexTiles[hexTiles.length - 2].number + hexTiles[hexTiles.length - 1].number; } 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); hexTile.getChildAt(1).setText(hexTile.number.toString()); if (selectedTiles.length == 2) { if (selectedTiles[0].number + selectedTiles[1].number === goalNumber) { console.log('Selected Hexes Addition:', selectedTiles[0].number + selectedTiles[1].number); 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); console.log('Correct guess'); } 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; // Reset correct guesses for the new level guessedPairs = {}; // Reset guessedPairs for the new level combinationsText.setText('Answers: ' + correctGuess + '/' + correctCombinations); levelText.setText('Level: ' + level); countdown = 15; goalText.visible = false; combinationsText.visible = false; countdownText.alpha = 1; goalText.visible = false; combinationsText.visible = false; 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); resetGameForNextLevel(); } } 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); } } 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
@@ -20,9 +20,15 @@
self.addChild(numberText);
self.isSelected = false;
self.toggleSelect = function () {
self.isSelected = !self.isSelected;
- hexGraphics.alpha = self.isSelected ? 0.5 : 1;
+ if (self.isSelected) {
+ hexGraphics.alpha = 0.5;
+ self.getChildAt(1).visible = true;
+ } else {
+ hexGraphics.alpha = 1;
+ self.getChildAt(1).visible = false;
+ }
};
});
/****