User prompt
no from every 10 questions correct bumps of the levels and make every correct answer worth 4 points
User prompt
make it so every 10 questions bump of the levels
User prompt
remove the time bar make so its infinite long
User prompt
make sure so the problems are random and used by 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 to make large, small, medium numbers
Code edit (1 edits merged)
Please save this source code
User prompt
MATH
User prompt
create a game called MATH a game where you are answering infinite of math by -, +, ×, ÷, =, ≠, <, >, ∓, ±, ., a^b, √a, 3√a, 4√a, n√a, %, ‰, ppm, ppb, ppt, mod, (x, y), ≈, ≡, :=, ≜, <<, >>, ≤, ≥, [ ], ( ), ∝, f(x), ⇒, ⇔, ∠, ∟, ⌢, ∥, ∦, ⟂, ≅, ~, △, °, rad or c, grad or g, |x-y|, π, ∈, ∉, ⊆, ⊂, ⊄, ⊇, ⊃, Ø, ∩, ε, ∫, ∫∫, ∫∫∫, ∮, ∮∮, ∮∮∮, ∇, ∞, ¬, ∧, ∨, ∀, ∃, N, Z, Q, R, C, ∑, ∏. Numbers 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 and more
Initial prompt
create a game called MATH a game where you are answering infinite of math by -, +, ×, ÷, =, ≠, <, >, ∓, ±, ., a^b, √a, 3√a, 4√a, n√a, %, ‰, ppm, ppb, ppt, mod, (x, y), ≈, ≡, :=, ≜, <<, >>, ≤, ≥, [ ], ( ), ∝, f(x), ⇒, ⇔, ∠, ∟, ⌢, ∥, ∦, ⟂, ≅, ~, △, °, rad or c, grad or g, |x-y|, π, ∈, ∉, ⊆, ⊂, ⊄, ⊇, ⊃, Ø, ∩, ε, ∫, ∫∫, ∫∫∫, ∮, ∮∮, ∮∮∮, ∇, ∞, ¬, ∧, ∨, ∀, ∃, N, Z, Q, R, C, ∑, ∏
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Problem = Container.expand(function (level) { var self = Container.call(this); var problemBg = self.attachAsset('problemBackground', { anchorX: 0.5, anchorY: 0.5 }); problemBg.alpha = 0.9; self.level = level; self.problemData = generateProblem(level); var problemText = new Text2(self.problemData.question, { size: 80, fill: 0x000000 }); problemText.anchor.set(0.5, 0.5); self.addChild(problemText); return self; }); var SymbolButton = Container.expand(function (symbol, isCorrect) { var self = Container.call(this); var buttonBg = self.attachAsset('symbolButton', { anchorX: 0.5, anchorY: 0.5 }); var symbolText = new Text2(symbol, { size: 60, fill: 0xFFFFFF }); symbolText.anchor.set(0.5, 0.5); self.addChild(symbolText); self.symbol = symbol; self.isCorrect = isCorrect; self.isPressed = false; self.down = function (x, y, obj) { if (gameState !== 'playing') return; self.isPressed = true; buttonBg.removeChild(); var pressedBg = self.attachAsset('symbolButtonPressed', { anchorX: 0.5, anchorY: 0.5 }); if (self.isCorrect) { handleCorrectAnswer(); } else { handleIncorrectAnswer(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ var gameState = 'playing'; var currentLevel = 1; var score = 0; var currentProblem = null; var symbolButtons = []; // Generate random numbers using digits 0-9 function generateRandomNumber(minDigits, maxDigits) { var digits = Math.floor(Math.random() * (maxDigits - minDigits + 1)) + minDigits; var number = 0; for (var i = 0; i < digits; i++) { var digit = Math.floor(Math.random() * 10); // 0-9 if (i === 0 && digits > 1 && digit === 0) { digit = Math.floor(Math.random() * 9) + 1; // First digit can't be 0 for multi-digit numbers } number = number * 10 + digit; } return number; } // Mathematical symbols and operators var mathSymbols = { basic: ['+', '-', '×', '÷'], comparison: ['=', '≠', '<', '>', '≤', '≥'], advanced: ['±', '∓', '^', '√', '%', '∞', '≈', '≡'], geometry: ['∠', '∟', '∥', '∦', '⟂', '≅', '~', '△', '°'], logic: ['∧', '∨', '¬', '∀', '∃', '⇒', '⇔'], sets: ['∈', '∉', '⊆', '⊂', '⊄', '⊇', '⊃', 'Ø', '∩'], calculus: ['∫', '∬', '∭', '∮', '∇', 'Σ', '∏'], numbers: ['N', 'Z', 'Q', 'R', 'C', 'π', 'ε'] }; // Generate random mathematical problems function generateArithmeticProblem(level) { var operations = ['+', '-', '×', '÷']; var operation = operations[Math.floor(Math.random() * operations.length)]; var maxSize = Math.min(level + 1, 4); // Increase number size with level var a = generateRandomNumber(1, maxSize); var b = generateRandomNumber(1, maxSize); // Ensure division results in whole numbers if (operation === '÷') { b = Math.max(1, b); a = b * generateRandomNumber(1, 2); // Make a divisible by b } // Ensure subtraction doesn't go negative if (operation === '-' && b > a) { var temp = a; a = b; b = temp; } var correctAnswer; switch (operation) { case '+': correctAnswer = a + b; break; case '-': correctAnswer = a - b; break; case '×': correctAnswer = a * b; break; case '÷': correctAnswer = a / b; break; } var wrongAnswers = []; for (var i = 0; i < 3; i++) { var wrong = correctAnswer + (Math.floor(Math.random() * 10) - 5); if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 5) + 1; while (wrongAnswers.indexOf(wrong) !== -1 || wrong === correctAnswer) { wrong = correctAnswer + (Math.floor(Math.random() * 10) - 5); if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 5) + 1; } wrongAnswers.push(wrong); } var allAnswers = [correctAnswer.toString()].concat(wrongAnswers.map(function (x) { return x.toString(); })); // Shuffle answers for (var i = allAnswers.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = allAnswers[i]; allAnswers[i] = allAnswers[j]; allAnswers[j] = temp; } return { question: a + " " + operation + " " + b + " = ?", answers: allAnswers, correct: allAnswers.indexOf(correctAnswer.toString()) }; } function generateComparisonProblem(level) { var a = generateRandomNumber(1, Math.min(level + 1, 3)); var b = generateRandomNumber(1, Math.min(level + 1, 3)); var correctSymbol; if (a > b) correctSymbol = '>';else if (a < b) correctSymbol = '<';else correctSymbol = '='; var symbols = ['>', '<', '=', '≠']; var wrongSymbols = symbols.filter(function (s) { return s !== correctSymbol; }); var allAnswers = [correctSymbol].concat(wrongSymbols); // Shuffle answers for (var i = allAnswers.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = allAnswers[i]; allAnswers[i] = allAnswers[j]; allAnswers[j] = temp; } return { question: a + " ? " + b, answers: allAnswers, correct: allAnswers.indexOf(correctSymbol) }; } function generateAdvancedProblem(level) { var problemType = Math.floor(Math.random() * 3); if (problemType === 0) { // Powers var base = generateRandomNumber(1, 1) + 1; // 2-9 var exponent = generateRandomNumber(1, 1) + 1; // 2-9 var correctAnswer = Math.pow(base, exponent); var wrongAnswers = []; for (var i = 0; i < 3; i++) { var wrong = correctAnswer + (Math.floor(Math.random() * 10) - 5); if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 5) + 1; while (wrongAnswers.indexOf(wrong) !== -1 || wrong === correctAnswer) { wrong = correctAnswer + (Math.floor(Math.random() * 10) - 5); if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 5) + 1; } wrongAnswers.push(wrong); } var allAnswers = [correctAnswer.toString()].concat(wrongAnswers.map(function (x) { return x.toString(); })); // Shuffle answers for (var i = allAnswers.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = allAnswers[i]; allAnswers[i] = allAnswers[j]; allAnswers[j] = temp; } return { question: base + "^" + exponent + " = ?", answers: allAnswers, correct: allAnswers.indexOf(correctAnswer.toString()) }; } else if (problemType === 1) { // Square roots var perfectSquares = [4, 9, 16, 25, 36, 49, 64, 81, 100]; var square = perfectSquares[Math.floor(Math.random() * perfectSquares.length)]; var correctAnswer = Math.sqrt(square); var wrongAnswers = []; for (var i = 0; i < 3; i++) { var wrong = correctAnswer + (Math.floor(Math.random() * 6) - 3); if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 3) + 1; while (wrongAnswers.indexOf(wrong) !== -1 || wrong === correctAnswer) { wrong = correctAnswer + (Math.floor(Math.random() * 6) - 3); if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 3) + 1; } wrongAnswers.push(wrong); } var allAnswers = [correctAnswer.toString()].concat(wrongAnswers.map(function (x) { return x.toString(); })); // Shuffle answers for (var i = allAnswers.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = allAnswers[i]; allAnswers[i] = allAnswers[j]; allAnswers[j] = temp; } return { question: "√" + square + " = ?", answers: allAnswers, correct: allAnswers.indexOf(correctAnswer.toString()) }; } else { // Percentages var whole = generateRandomNumber(2, 3); var percent = [10, 20, 25, 50, 75][Math.floor(Math.random() * 5)]; var correctAnswer = whole * percent / 100; if (correctAnswer !== Math.floor(correctAnswer)) { correctAnswer = correctAnswer.toFixed(1); } correctAnswer = correctAnswer.toString(); // Generate three random wrong answers var wrongAnswers = []; for (var i = 0; i < 3; i++) { var wrong = whole * (percent + (Math.floor(Math.random() * 20) - 10)) / 100; if (wrong <= 0) wrong = whole * (percent + Math.floor(Math.random() * 10) + 5) / 100; if (wrong !== Math.floor(wrong)) { wrong = wrong.toFixed(1); } wrong = wrong.toString(); while (wrongAnswers.indexOf(wrong) !== -1 || wrong === correctAnswer) { wrong = whole * (percent + (Math.floor(Math.random() * 20) - 10)) / 100; if (wrong <= 0) wrong = whole * (percent + Math.floor(Math.random() * 10) + 5) / 100; if (wrong !== Math.floor(wrong)) { wrong = wrong.toFixed(1); } wrong = wrong.toString(); } wrongAnswers.push(wrong); } var allAnswers = [correctAnswer].concat(wrongAnswers); // Shuffle answers for (var i = allAnswers.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = allAnswers[i]; allAnswers[i] = allAnswers[j]; allAnswers[j] = temp; } return { question: percent + "% of " + whole + " = ?", answers: allAnswers, correct: allAnswers.indexOf(correctAnswer) }; } } function generateProblem(level) { if (level <= 2) { return generateArithmeticProblem(level); } else if (level <= 4) { return Math.random() < 0.7 ? generateArithmeticProblem(level) : generateComparisonProblem(level); } else { var rand = Math.random(); if (rand < 0.5) return generateArithmeticProblem(level);else if (rand < 0.8) return generateComparisonProblem(level);else return generateAdvancedProblem(level); } } function createNewProblem() { if (currentProblem) { currentProblem.destroy(); } // Clear existing symbol buttons for (var i = 0; i < symbolButtons.length; i++) { symbolButtons[i].destroy(); } symbolButtons = []; currentProblem = game.addChild(new Problem(currentLevel)); currentProblem.x = 1024; currentProblem.y = 800; // Create symbol buttons var problemData = currentProblem.problemData; var buttonY = 1400; var buttonSpacing = 200; var startX = 1024 - buttonSpacing * 1.5; for (var i = 0; i < problemData.answers.length; i++) { var button = game.addChild(new SymbolButton(problemData.answers[i], i === problemData.correct)); button.x = startX + i * buttonSpacing; button.y = buttonY; symbolButtons.push(button); } } function handleCorrectAnswer() { gameState = 'answering'; LK.getSound('correct').play(); // Flash green var flash = game.addChild(LK.getAsset('correctFlash', { alpha: 0.3 })); tween(flash, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { flash.destroy(); } }); // Update score score += 4; LK.setScore(score); updateScoreDisplay(); // Advance level every 10 correct answers if (score % 40 === 0) { currentLevel++; } // Create new problem after delay LK.setTimeout(function () { gameState = 'playing'; createNewProblem(); }, 1000); } function handleIncorrectAnswer() { gameState = 'answering'; LK.getSound('incorrect').play(); // Flash red var flash = game.addChild(LK.getAsset('incorrectFlash', { alpha: 0.3 })); tween(flash, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { flash.destroy(); } }); // Show correct answer showCorrectAnswer(); // Game over after delay LK.setTimeout(function () { LK.showGameOver(); }, 2000); } function showCorrectAnswer() { var correctText = new Text2("Correct answer: " + currentProblem.problemData.answers[currentProblem.problemData.correct], { size: 60, fill: 0xFFFFFF }); correctText.anchor.set(0.5, 0.5); correctText.x = 1024; correctText.y = 1800; game.addChild(correctText); } // UI Setup var scoreText = new Text2('Score: 0', { size: 80, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); var levelText = new Text2('Level: 1', { size: 60, fill: 0xFFFFFF }); levelText.anchor.set(1, 0); LK.gui.topRight.addChild(levelText); function updateScoreDisplay() { scoreText.setText('Score: ' + score); levelText.setText('Level: ' + currentLevel); } // Initialize first problem createNewProblem(); game.update = function () { if (gameState !== 'playing') return; };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Problem = Container.expand(function (level) {
var self = Container.call(this);
var problemBg = self.attachAsset('problemBackground', {
anchorX: 0.5,
anchorY: 0.5
});
problemBg.alpha = 0.9;
self.level = level;
self.problemData = generateProblem(level);
var problemText = new Text2(self.problemData.question, {
size: 80,
fill: 0x000000
});
problemText.anchor.set(0.5, 0.5);
self.addChild(problemText);
return self;
});
var SymbolButton = Container.expand(function (symbol, isCorrect) {
var self = Container.call(this);
var buttonBg = self.attachAsset('symbolButton', {
anchorX: 0.5,
anchorY: 0.5
});
var symbolText = new Text2(symbol, {
size: 60,
fill: 0xFFFFFF
});
symbolText.anchor.set(0.5, 0.5);
self.addChild(symbolText);
self.symbol = symbol;
self.isCorrect = isCorrect;
self.isPressed = false;
self.down = function (x, y, obj) {
if (gameState !== 'playing') return;
self.isPressed = true;
buttonBg.removeChild();
var pressedBg = self.attachAsset('symbolButtonPressed', {
anchorX: 0.5,
anchorY: 0.5
});
if (self.isCorrect) {
handleCorrectAnswer();
} else {
handleIncorrectAnswer();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
var gameState = 'playing';
var currentLevel = 1;
var score = 0;
var currentProblem = null;
var symbolButtons = [];
// Generate random numbers using digits 0-9
function generateRandomNumber(minDigits, maxDigits) {
var digits = Math.floor(Math.random() * (maxDigits - minDigits + 1)) + minDigits;
var number = 0;
for (var i = 0; i < digits; i++) {
var digit = Math.floor(Math.random() * 10); // 0-9
if (i === 0 && digits > 1 && digit === 0) {
digit = Math.floor(Math.random() * 9) + 1; // First digit can't be 0 for multi-digit numbers
}
number = number * 10 + digit;
}
return number;
}
// Mathematical symbols and operators
var mathSymbols = {
basic: ['+', '-', '×', '÷'],
comparison: ['=', '≠', '<', '>', '≤', '≥'],
advanced: ['±', '∓', '^', '√', '%', '∞', '≈', '≡'],
geometry: ['∠', '∟', '∥', '∦', '⟂', '≅', '~', '△', '°'],
logic: ['∧', '∨', '¬', '∀', '∃', '⇒', '⇔'],
sets: ['∈', '∉', '⊆', '⊂', '⊄', '⊇', '⊃', 'Ø', '∩'],
calculus: ['∫', '∬', '∭', '∮', '∇', 'Σ', '∏'],
numbers: ['N', 'Z', 'Q', 'R', 'C', 'π', 'ε']
};
// Generate random mathematical problems
function generateArithmeticProblem(level) {
var operations = ['+', '-', '×', '÷'];
var operation = operations[Math.floor(Math.random() * operations.length)];
var maxSize = Math.min(level + 1, 4); // Increase number size with level
var a = generateRandomNumber(1, maxSize);
var b = generateRandomNumber(1, maxSize);
// Ensure division results in whole numbers
if (operation === '÷') {
b = Math.max(1, b);
a = b * generateRandomNumber(1, 2); // Make a divisible by b
}
// Ensure subtraction doesn't go negative
if (operation === '-' && b > a) {
var temp = a;
a = b;
b = temp;
}
var correctAnswer;
switch (operation) {
case '+':
correctAnswer = a + b;
break;
case '-':
correctAnswer = a - b;
break;
case '×':
correctAnswer = a * b;
break;
case '÷':
correctAnswer = a / b;
break;
}
var wrongAnswers = [];
for (var i = 0; i < 3; i++) {
var wrong = correctAnswer + (Math.floor(Math.random() * 10) - 5);
if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 5) + 1;
while (wrongAnswers.indexOf(wrong) !== -1 || wrong === correctAnswer) {
wrong = correctAnswer + (Math.floor(Math.random() * 10) - 5);
if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 5) + 1;
}
wrongAnswers.push(wrong);
}
var allAnswers = [correctAnswer.toString()].concat(wrongAnswers.map(function (x) {
return x.toString();
}));
// Shuffle answers
for (var i = allAnswers.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = allAnswers[i];
allAnswers[i] = allAnswers[j];
allAnswers[j] = temp;
}
return {
question: a + " " + operation + " " + b + " = ?",
answers: allAnswers,
correct: allAnswers.indexOf(correctAnswer.toString())
};
}
function generateComparisonProblem(level) {
var a = generateRandomNumber(1, Math.min(level + 1, 3));
var b = generateRandomNumber(1, Math.min(level + 1, 3));
var correctSymbol;
if (a > b) correctSymbol = '>';else if (a < b) correctSymbol = '<';else correctSymbol = '=';
var symbols = ['>', '<', '=', '≠'];
var wrongSymbols = symbols.filter(function (s) {
return s !== correctSymbol;
});
var allAnswers = [correctSymbol].concat(wrongSymbols);
// Shuffle answers
for (var i = allAnswers.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = allAnswers[i];
allAnswers[i] = allAnswers[j];
allAnswers[j] = temp;
}
return {
question: a + " ? " + b,
answers: allAnswers,
correct: allAnswers.indexOf(correctSymbol)
};
}
function generateAdvancedProblem(level) {
var problemType = Math.floor(Math.random() * 3);
if (problemType === 0) {
// Powers
var base = generateRandomNumber(1, 1) + 1; // 2-9
var exponent = generateRandomNumber(1, 1) + 1; // 2-9
var correctAnswer = Math.pow(base, exponent);
var wrongAnswers = [];
for (var i = 0; i < 3; i++) {
var wrong = correctAnswer + (Math.floor(Math.random() * 10) - 5);
if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 5) + 1;
while (wrongAnswers.indexOf(wrong) !== -1 || wrong === correctAnswer) {
wrong = correctAnswer + (Math.floor(Math.random() * 10) - 5);
if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 5) + 1;
}
wrongAnswers.push(wrong);
}
var allAnswers = [correctAnswer.toString()].concat(wrongAnswers.map(function (x) {
return x.toString();
}));
// Shuffle answers
for (var i = allAnswers.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = allAnswers[i];
allAnswers[i] = allAnswers[j];
allAnswers[j] = temp;
}
return {
question: base + "^" + exponent + " = ?",
answers: allAnswers,
correct: allAnswers.indexOf(correctAnswer.toString())
};
} else if (problemType === 1) {
// Square roots
var perfectSquares = [4, 9, 16, 25, 36, 49, 64, 81, 100];
var square = perfectSquares[Math.floor(Math.random() * perfectSquares.length)];
var correctAnswer = Math.sqrt(square);
var wrongAnswers = [];
for (var i = 0; i < 3; i++) {
var wrong = correctAnswer + (Math.floor(Math.random() * 6) - 3);
if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 3) + 1;
while (wrongAnswers.indexOf(wrong) !== -1 || wrong === correctAnswer) {
wrong = correctAnswer + (Math.floor(Math.random() * 6) - 3);
if (wrong <= 0) wrong = correctAnswer + Math.floor(Math.random() * 3) + 1;
}
wrongAnswers.push(wrong);
}
var allAnswers = [correctAnswer.toString()].concat(wrongAnswers.map(function (x) {
return x.toString();
}));
// Shuffle answers
for (var i = allAnswers.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = allAnswers[i];
allAnswers[i] = allAnswers[j];
allAnswers[j] = temp;
}
return {
question: "√" + square + " = ?",
answers: allAnswers,
correct: allAnswers.indexOf(correctAnswer.toString())
};
} else {
// Percentages
var whole = generateRandomNumber(2, 3);
var percent = [10, 20, 25, 50, 75][Math.floor(Math.random() * 5)];
var correctAnswer = whole * percent / 100;
if (correctAnswer !== Math.floor(correctAnswer)) {
correctAnswer = correctAnswer.toFixed(1);
}
correctAnswer = correctAnswer.toString();
// Generate three random wrong answers
var wrongAnswers = [];
for (var i = 0; i < 3; i++) {
var wrong = whole * (percent + (Math.floor(Math.random() * 20) - 10)) / 100;
if (wrong <= 0) wrong = whole * (percent + Math.floor(Math.random() * 10) + 5) / 100;
if (wrong !== Math.floor(wrong)) {
wrong = wrong.toFixed(1);
}
wrong = wrong.toString();
while (wrongAnswers.indexOf(wrong) !== -1 || wrong === correctAnswer) {
wrong = whole * (percent + (Math.floor(Math.random() * 20) - 10)) / 100;
if (wrong <= 0) wrong = whole * (percent + Math.floor(Math.random() * 10) + 5) / 100;
if (wrong !== Math.floor(wrong)) {
wrong = wrong.toFixed(1);
}
wrong = wrong.toString();
}
wrongAnswers.push(wrong);
}
var allAnswers = [correctAnswer].concat(wrongAnswers);
// Shuffle answers
for (var i = allAnswers.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = allAnswers[i];
allAnswers[i] = allAnswers[j];
allAnswers[j] = temp;
}
return {
question: percent + "% of " + whole + " = ?",
answers: allAnswers,
correct: allAnswers.indexOf(correctAnswer)
};
}
}
function generateProblem(level) {
if (level <= 2) {
return generateArithmeticProblem(level);
} else if (level <= 4) {
return Math.random() < 0.7 ? generateArithmeticProblem(level) : generateComparisonProblem(level);
} else {
var rand = Math.random();
if (rand < 0.5) return generateArithmeticProblem(level);else if (rand < 0.8) return generateComparisonProblem(level);else return generateAdvancedProblem(level);
}
}
function createNewProblem() {
if (currentProblem) {
currentProblem.destroy();
}
// Clear existing symbol buttons
for (var i = 0; i < symbolButtons.length; i++) {
symbolButtons[i].destroy();
}
symbolButtons = [];
currentProblem = game.addChild(new Problem(currentLevel));
currentProblem.x = 1024;
currentProblem.y = 800;
// Create symbol buttons
var problemData = currentProblem.problemData;
var buttonY = 1400;
var buttonSpacing = 200;
var startX = 1024 - buttonSpacing * 1.5;
for (var i = 0; i < problemData.answers.length; i++) {
var button = game.addChild(new SymbolButton(problemData.answers[i], i === problemData.correct));
button.x = startX + i * buttonSpacing;
button.y = buttonY;
symbolButtons.push(button);
}
}
function handleCorrectAnswer() {
gameState = 'answering';
LK.getSound('correct').play();
// Flash green
var flash = game.addChild(LK.getAsset('correctFlash', {
alpha: 0.3
}));
tween(flash, {
alpha: 0
}, {
duration: 500,
onFinish: function onFinish() {
flash.destroy();
}
});
// Update score
score += 4;
LK.setScore(score);
updateScoreDisplay();
// Advance level every 10 correct answers
if (score % 40 === 0) {
currentLevel++;
}
// Create new problem after delay
LK.setTimeout(function () {
gameState = 'playing';
createNewProblem();
}, 1000);
}
function handleIncorrectAnswer() {
gameState = 'answering';
LK.getSound('incorrect').play();
// Flash red
var flash = game.addChild(LK.getAsset('incorrectFlash', {
alpha: 0.3
}));
tween(flash, {
alpha: 0
}, {
duration: 500,
onFinish: function onFinish() {
flash.destroy();
}
});
// Show correct answer
showCorrectAnswer();
// Game over after delay
LK.setTimeout(function () {
LK.showGameOver();
}, 2000);
}
function showCorrectAnswer() {
var correctText = new Text2("Correct answer: " + currentProblem.problemData.answers[currentProblem.problemData.correct], {
size: 60,
fill: 0xFFFFFF
});
correctText.anchor.set(0.5, 0.5);
correctText.x = 1024;
correctText.y = 1800;
game.addChild(correctText);
}
// UI Setup
var scoreText = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
var levelText = new Text2('Level: 1', {
size: 60,
fill: 0xFFFFFF
});
levelText.anchor.set(1, 0);
LK.gui.topRight.addChild(levelText);
function updateScoreDisplay() {
scoreText.setText('Score: ' + score);
levelText.setText('Level: ' + currentLevel);
}
// Initialize first problem
createNewProblem();
game.update = function () {
if (gameState !== 'playing') return;
};