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 timeRemaining = 15000; // 15 seconds per problem var maxTime = 15000; var currentProblem = null; var symbolButtons = []; var timerBar = null; // 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); } // Reset timer timeRemaining = maxTime; updateTimerBar(); } 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 var timeBonus = Math.floor(timeRemaining / 1000); var levelBonus = currentLevel * 10; score += 100 + timeBonus + levelBonus; LK.setScore(score); updateScoreDisplay(); // Advance level every 3 correct answers if (score % 300 === 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); } function updateTimerBar() { if (timerBar) { timerBar.destroy(); } var barWidth = timeRemaining / maxTime * 1800; timerBar = game.addChild(LK.getAsset('timerBar', { width: barWidth, anchorX: 0, anchorY: 0 })); timerBar.x = 124; timerBar.y = 200; // Change color based on time remaining if (timeRemaining < 5000) { timerBar.tint = 0xff0000; // Red } else if (timeRemaining < 10000) { timerBar.tint = 0xffaa00; // Orange } else { timerBar.tint = 0x00aa00; // Green } } // 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; // Update timer timeRemaining -= 16.67; // Approximately 60 FPS if (timeRemaining <= 0) { // Time's up - wrong answer handleIncorrectAnswer(); return; } updateTimerBar(); };
===================================================================
--- original.js
+++ change.js
@@ -72,87 +72,228 @@
var maxTime = 15000;
var currentProblem = null;
var symbolButtons = [];
var timerBar = null;
-// Mathematical problems database
-var problemTypes = {
- 1: [
- // Basic arithmetic
- {
- question: "5 + 3 = ?",
- answers: ["8", "7", "9", "6"],
- correct: 0
- }, {
- question: "12 - 4 = ?",
- answers: ["8", "9", "7", "6"],
- correct: 0
- }, {
- question: "6 × 2 = ?",
- answers: ["12", "10", "14", "8"],
- correct: 0
- }, {
- question: "15 ÷ 3 = ?",
- answers: ["5", "4", "6", "3"],
- correct: 0
- }],
- 2: [
- // Comparison operators
- {
- question: "7 ? 5 (greater)",
- answers: [">", "<", "=", "≠"],
- correct: 0
- }, {
- question: "4 ? 4 (equal)",
- answers: ["=", "≠", ">", "<"],
- correct: 0
- }, {
- question: "3 ? 8 (less)",
- answers: ["<", ">", "=", "≠"],
- correct: 0
- }],
- 3: [
- // Powers and roots
- {
- question: "2³ = ?",
- answers: ["8", "6", "9", "4"],
- correct: 0
- }, {
- question: "√16 = ?",
- answers: ["4", "3", "5", "2"],
- correct: 0
- }, {
- question: "5² = ?",
- answers: ["25", "20", "30", "15"],
- correct: 0
- }],
- 4: [
- // Fractions
- {
- question: "1/2 + 1/4 = ?",
- answers: ["3/4", "1/3", "2/6", "1/2"],
- correct: 0
- }, {
- question: "2/3 × 3/2 = ?",
- answers: ["1", "4/6", "6/6", "2/3"],
- correct: 0
- }],
- 5: [
- // Trigonometry
- {
- question: "sin(90°) = ?",
- answers: ["1", "0", "√2/2", "-1"],
- correct: 0
- }, {
- question: "cos(0°) = ?",
- answers: ["1", "0", "√2/2", "-1"],
- correct: 0
- }]
+// 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) {
- var problemSet = problemTypes[Math.min(level, 5)];
- if (!problemSet) problemSet = problemTypes[1];
- var randomProblem = problemSet[Math.floor(Math.random() * problemSet.length)];
- return randomProblem;
+ 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();