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; 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 += 500; 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 = [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; // 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) { 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); 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 += 500; 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 });
/****
* 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 += 500;
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 = [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;
// 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) {
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);
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 += 500;
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
});