/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var AnswerButton = Container.expand(function (answer, isCorrect) { var self = Container.call(this); var buttonGraphics = self.attachAsset('answerButton', { anchorX: 0.5, anchorY: 0.5 }); var answerText = new Text2(answer.toString(), { size: 60, fill: 0xFFFFFF }); answerText.anchor.set(0.5, 0.5); answerText.x = 0; answerText.y = 0; self.addChild(answerText); self.answer = answer; self.isCorrect = isCorrect; self.isClicked = false; self.down = function (x, y, obj) { if (self.isClicked) { return; } self.isClicked = true; if (self.isCorrect) { self.removeChild(buttonGraphics); var correctGraphics = self.attachAsset('correctButton', { anchorX: 0.5, anchorY: 0.5 }); LK.getSound('correct').play(); LK.setScore(LK.getScore() + 1); scoreTxt.setText(LK.getScore()); LK.setTimeout(function () { nextQuestion(); }, 1000); } else { self.removeChild(buttonGraphics); var wrongGraphics = self.attachAsset('wrongButton', { anchorX: 0.5, anchorY: 0.5 }); LK.getSound('wrong').play(); LK.setTimeout(function () { showGameOver(); }, 1000); } }; return self; }); var JokerButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('jokerButton', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (jokerUsed || gameState !== 'playing') { return; } jokerUsed = true; LK.effects.flashObject(self, 0xFFFFFF, 300); // Show correct answer by highlighting correct button for (var i = 0; i < answerButtons.length; i++) { if (answerButtons[i].isCorrect) { LK.effects.flashObject(answerButtons[i], 0x27ae60, 1500); break; } } // Hide joker button after use self.alpha = 0.3; }; return self; }); var LevelJokerButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('levelJokerButton', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (levelJokerUsed || gameState !== 'playing') { return; } levelJokerUsed = true; LK.effects.flashObject(self, 0xFFFFFF, 300); // Store current level and switch to level 8 originalLevel = currentLevel; currentLevel = 8; levelTxt.setText('Level: 8 (TEMP)'); // Flash screen to show level bonus LK.effects.flashScreen(0xe67e22, 500); // Hide joker button after use self.alpha = 0.3; // Set timer to revert back after 10 seconds LK.setTimeout(function () { if (gameState === 'playing') { currentLevel = originalLevel; levelTxt.setText('Level: ' + currentLevel); LK.effects.flashScreen(0x3498db, 300); } }, 10000); }; return self; }); var MenuButton = Container.expand(function (text, callback) { var self = Container.call(this); var buttonGraphics = self.attachAsset('menuButton', { anchorX: 0.5, anchorY: 0.5 }); var buttonText = new Text2(text, { size: 50, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); self.callback = callback; self.down = function (x, y, obj) { LK.effects.flashObject(self, 0xFFFFFF, 200); LK.setTimeout(function () { self.callback(); }, 200); }; return self; }); var TimeJokerButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('timeJokerButton', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (timeJokerUsed || gameState !== 'playing') { return; } timeJokerUsed = true; LK.effects.flashObject(self, 0xFFFFFF, 300); // Add 30 seconds to timer timeLeft += 30; timerTxt.setText('Time: ' + timeLeft); // Flash screen to show time bonus LK.effects.flashScreen(0x9b59b6, 500); // Hide joker button after use self.alpha = 0.3; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x34495e }); /**** * Game Code ****/ var gameState = 'menu'; // 'menu', 'playing', 'gameover' var currentLevel = 1; var questionsAnswered = 0; var maxQuestions = 10; var questionsPerLevel = 3; var timeLeft = 60; var gameTimer = null; var currentQuestion = null; var answerButtons = []; var menuElements = []; var jokerUsed = false; var jokerButton = null; var timeJokerUsed = false; var timeJokerButton = null; var levelJokerUsed = false; var levelJokerButton = null; var originalLevel = 1; // Add notebook background var notebookBackground = LK.getAsset('notebook_background', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366 }); game.addChild(notebookBackground); // UI Elements - initially hidden var questionBox = LK.getAsset('questionBox', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 800 }); var questionText = new Text2('', { size: 80, fill: 0x000000 }); questionText.anchor.set(0.5, 0.5); questionText.x = 1024; questionText.y = 800; var scoreTxt = new Text2('Score: 0', { size: 60, fill: 0xFFFFFF }); scoreTxt.anchor.set(0, 0); scoreTxt.x = 100; scoreTxt.y = 150; var timerTxt = new Text2('Time: 60', { size: 60, fill: 0xFFFFFF }); timerTxt.anchor.set(1, 0); timerTxt.x = 1948; timerTxt.y = 150; var levelTxt = new Text2('Level: 1', { size: 50, fill: 0xFFFFFF }); levelTxt.anchor.set(0.5, 0); levelTxt.x = 1024; levelTxt.y = 150; var furkanText = new Text2('Furkan Çelebi', { size: 40, fill: 0xFFFFFF }); furkanText.anchor.set(0.5, 0); furkanText.x = 1024; furkanText.y = 100; // Create joker button jokerButton = new JokerButton(); jokerButton.x = 1024 - 200; jokerButton.y = 980; // Create time joker button timeJokerButton = new TimeJokerButton(); timeJokerButton.x = 1024; timeJokerButton.y = 980; // Create level joker button levelJokerButton = new LevelJokerButton(); levelJokerButton.x = 1024 + 200; levelJokerButton.y = 980; function showMenu() { gameState = 'menu'; // Clear any existing menu elements for (var i = 0; i < menuElements.length; i++) { menuElements[i].destroy(); } menuElements = []; // Hide game elements if (questionBox.parent) { questionBox.parent.removeChild(questionBox); } if (questionText.parent) { questionText.parent.removeChild(questionText); } if (scoreTxt.parent) { scoreTxt.parent.removeChild(scoreTxt); } if (timerTxt.parent) { timerTxt.parent.removeChild(timerTxt); } if (levelTxt.parent) { levelTxt.parent.removeChild(levelTxt); } if (jokerButton && jokerButton.parent) { jokerButton.parent.removeChild(jokerButton); } if (timeJokerButton && timeJokerButton.parent) { timeJokerButton.parent.removeChild(timeJokerButton); } if (levelJokerButton && levelJokerButton.parent) { levelJokerButton.parent.removeChild(levelJokerButton); } if (furkanText.parent) { furkanText.parent.removeChild(furkanText); } // Create menu background var menuBg = game.addChild(LK.getAsset('menuBackground', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366 })); menuElements.push(menuBg); // Create title var titleText = new Text2('Math Challenge', { size: 120, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 1024; titleText.y = 800; game.addChild(titleText); menuElements.push(titleText); // Create subtitle var subtitleText = new Text2('Test your arithmetic skills!', { size: 60, fill: 0xBDC3C7 }); subtitleText.anchor.set(0.5, 0.5); subtitleText.x = 1024; subtitleText.y = 920; game.addChild(subtitleText); menuElements.push(subtitleText); // Create start button var startButton = new MenuButton('', function () { startGameFromMenu(); }); startButton.x = 1024; startButton.y = 1150; game.addChild(startButton); menuElements.push(startButton); // Create instructions var instructionsText = new Text2('Answer math questions correctly to score points!\nProgress through 10 levels: basic arithmetic to exponents!\nLevels 8-10 feature challenging exponent expressions like 3^4!\nExponents get harder as you advance!\nYou have 60 seconds to complete all levels.', { size: 32, fill: 0x95A5A6 }); instructionsText.anchor.set(0.5, 0.5); instructionsText.x = 1024; instructionsText.y = 1400; game.addChild(instructionsText); menuElements.push(instructionsText); } function hideMenu() { // Clear menu elements for (var i = 0; i < menuElements.length; i++) { menuElements[i].destroy(); } menuElements = []; // Show game elements game.addChild(questionBox); game.addChild(questionText); game.addChild(scoreTxt); game.addChild(timerTxt); game.addChild(levelTxt); game.addChild(furkanText); game.addChild(jokerButton); game.addChild(timeJokerButton); game.addChild(levelJokerButton); } function startGameFromMenu() { gameState = 'playing'; hideMenu(); // Reset game state currentLevel = 1; questionsAnswered = 0; timeLeft = 60; jokerUsed = false; LK.setScore(0); scoreTxt.setText('Score: 0'); timerTxt.setText('Time: 60'); levelTxt.setText('Level: 1'); // Reset joker button if (jokerButton) { jokerButton.alpha = 1; } // Reset time joker button timeJokerUsed = false; if (timeJokerButton) { timeJokerButton.alpha = 1; } // Reset level joker button levelJokerUsed = false; if (levelJokerButton) { levelJokerButton.alpha = 1; } // Start background music when game begins LK.playMusic('background_music'); startGame(); } function generateQuestion() { var num1, num2, operator, correctAnswer; var operations = ['+', '-', '*', '/']; if (currentLevel === 1) { // Level 1: Single digit addition num1 = Math.floor(Math.random() * 9) + 1; num2 = Math.floor(Math.random() * 9) + 1; operator = '+'; } else if (currentLevel === 2) { // Level 2: Single digit subtraction num1 = Math.floor(Math.random() * 9) + 1; num2 = Math.floor(Math.random() * 9) + 1; operator = '-'; if (num2 > num1) { var temp = num1; num1 = num2; num2 = temp; } } else if (currentLevel === 3) { // Level 3: Single digit multiplication num1 = Math.floor(Math.random() * 9) + 1; num2 = Math.floor(Math.random() * 9) + 1; operator = '*'; } else if (currentLevel === 4) { // Level 4: Single digit division num2 = Math.floor(Math.random() * 9) + 1; num1 = num2 * (Math.floor(Math.random() * 9) + 1); operator = '/'; } else if (currentLevel === 5) { // Level 5: Two digit addition num1 = Math.floor(Math.random() * 90) + 10; num2 = Math.floor(Math.random() * 90) + 10; operator = '+'; } else if (currentLevel === 6) { // Level 6: Two digit subtraction num1 = Math.floor(Math.random() * 90) + 10; num2 = Math.floor(Math.random() * 90) + 10; operator = '-'; if (num2 > num1) { var temp = num1; num1 = num2; num2 = temp; } } else if (currentLevel === 7) { // Level 7: Two digit multiplication num1 = Math.floor(Math.random() * 20) + 1; num2 = Math.floor(Math.random() * 20) + 1; operator = '*'; } else if (currentLevel === 8) { // Level 8: Mixed operations with exponents (simple) var questionType = Math.floor(Math.random() * 2); // 0 for regular math, 1 for exponents if (questionType === 0) { num1 = Math.floor(Math.random() * 50) + 10; num2 = Math.floor(Math.random() * 20) + 1; operator = operations[Math.floor(Math.random() * 4)]; if (operator === '-' && num2 > num1) { var temp = num1; num1 = num2; num2 = temp; } if (operator === '/' && num1 % num2 !== 0) { num1 = num2 * Math.floor(Math.random() * 8 + 1); } } else { // Simple exponents: base 2-5, exponent 2-3 var base = Math.floor(Math.random() * 4) + 2; // Base from 2-5 var exponent = Math.floor(Math.random() * 2) + 2; // Exponent from 2-3 correctAnswer = Math.pow(base, exponent); return { text: base + '^' + exponent + ' = ?', answer: correctAnswer }; } } else if (currentLevel === 9) { // Level 9: Complex mixed operations with more exponents var questionType = Math.floor(Math.random() * 3); // 0,1 for regular math, 2 for exponents if (questionType < 2) { num1 = Math.floor(Math.random() * 100) + 20; num2 = Math.floor(Math.random() * 30) + 1; operator = operations[Math.floor(Math.random() * 4)]; if (operator === '-' && num2 > num1) { var temp = num1; num1 = num2; num2 = temp; } if (operator === '/' && num1 % num2 !== 0) { num1 = num2 * Math.floor(Math.random() * 10 + 1); } } else { // Medium exponents: base 2-7, exponent 2-4 var base = Math.floor(Math.random() * 6) + 2; // Base from 2-7 var exponent = Math.floor(Math.random() * 3) + 2; // Exponent from 2-4 correctAnswer = Math.pow(base, exponent); return { text: base + '^' + exponent + ' = ?', answer: correctAnswer }; } } else if (currentLevel === 10) { // Level 10: Advanced exponent expressions (mostly exponents) var questionType = Math.floor(Math.random() * 4); // 0 for regular math, 1,2,3 for exponents if (questionType === 0) { // Occasional complex math problem num1 = Math.floor(Math.random() * 150) + 50; num2 = Math.floor(Math.random() * 25) + 5; operator = operations[Math.floor(Math.random() * 4)]; if (operator === '-' && num2 > num1) { var temp = num1; num1 = num2; num2 = temp; } if (operator === '/' && num1 % num2 !== 0) { num1 = num2 * Math.floor(Math.random() * 15 + 1); } } else { // Advanced exponents: base 2-10, exponent 2-5 var base = Math.floor(Math.random() * 9) + 2; // Base from 2-10 var exponent = Math.floor(Math.random() * 4) + 2; // Exponent from 2-5 correctAnswer = Math.pow(base, exponent); return { text: base + '^' + exponent + ' = ?', answer: correctAnswer }; } } switch (operator) { case '+': correctAnswer = num1 + num2; break; case '-': correctAnswer = num1 - num2; break; case '*': correctAnswer = num1 * num2; break; case '/': correctAnswer = num1 / num2; break; } return { text: num1 + ' ' + operator + ' ' + num2 + ' = ?', answer: correctAnswer }; } function generateWrongAnswers(correctAnswer) { var wrongAnswers = []; var range = Math.max(5, Math.floor(correctAnswer * 0.3)); while (wrongAnswers.length < 3) { var wrong = correctAnswer + Math.floor(Math.random() * range * 2) - range; if (wrong !== correctAnswer && wrongAnswers.indexOf(wrong) === -1 && wrong >= 0) { wrongAnswers.push(wrong); } } return wrongAnswers; } function clearAnswerButtons() { for (var i = 0; i < answerButtons.length; i++) { answerButtons[i].destroy(); } answerButtons = []; } function showQuestion() { clearAnswerButtons(); currentQuestion = generateQuestion(); questionText.setText(currentQuestion.text); var answers = [currentQuestion.answer]; var wrongAnswers = generateWrongAnswers(currentQuestion.answer); answers = answers.concat(wrongAnswers); // Shuffle answers for (var i = answers.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = answers[i]; answers[i] = answers[j]; answers[j] = temp; } // Create answer buttons var buttonStartX = 1024 - (4 * 350 + 3 * 50) / 2 + 175; var buttonY = 1200; for (var i = 0; i < 4; i++) { var button = new AnswerButton(answers[i], answers[i] === currentQuestion.answer); button.x = buttonStartX + i * 400; button.y = buttonY; answerButtons.push(button); game.addChild(button); } } function nextQuestion() { questionsAnswered++; if (questionsAnswered % questionsPerLevel === 0 && currentLevel < 10) { currentLevel++; levelTxt.setText('Level: ' + currentLevel); LK.effects.flashScreen(0x27ae60, 500); showQuestion(); } else if (currentLevel === 10 && questionsAnswered % questionsPerLevel === 0) { LK.showYouWin(); return; } else { showQuestion(); } } function showGameOver() { LK.clearInterval(gameTimer); gameState = 'gameover'; // Stop background music when game ends LK.stopMusic(); LK.showGameOver(); // Show LK game over functionality } function startGame() { // Start timer gameTimer = LK.setInterval(function () { timeLeft--; timerTxt.setText('Time: ' + timeLeft); if (timeLeft <= 0) { showGameOver(); } }, 1000); // Show first question showQuestion(); } // Show menu first instead of starting game directly showMenu();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var AnswerButton = Container.expand(function (answer, isCorrect) {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('answerButton', {
anchorX: 0.5,
anchorY: 0.5
});
var answerText = new Text2(answer.toString(), {
size: 60,
fill: 0xFFFFFF
});
answerText.anchor.set(0.5, 0.5);
answerText.x = 0;
answerText.y = 0;
self.addChild(answerText);
self.answer = answer;
self.isCorrect = isCorrect;
self.isClicked = false;
self.down = function (x, y, obj) {
if (self.isClicked) {
return;
}
self.isClicked = true;
if (self.isCorrect) {
self.removeChild(buttonGraphics);
var correctGraphics = self.attachAsset('correctButton', {
anchorX: 0.5,
anchorY: 0.5
});
LK.getSound('correct').play();
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore());
LK.setTimeout(function () {
nextQuestion();
}, 1000);
} else {
self.removeChild(buttonGraphics);
var wrongGraphics = self.attachAsset('wrongButton', {
anchorX: 0.5,
anchorY: 0.5
});
LK.getSound('wrong').play();
LK.setTimeout(function () {
showGameOver();
}, 1000);
}
};
return self;
});
var JokerButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('jokerButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (jokerUsed || gameState !== 'playing') {
return;
}
jokerUsed = true;
LK.effects.flashObject(self, 0xFFFFFF, 300);
// Show correct answer by highlighting correct button
for (var i = 0; i < answerButtons.length; i++) {
if (answerButtons[i].isCorrect) {
LK.effects.flashObject(answerButtons[i], 0x27ae60, 1500);
break;
}
}
// Hide joker button after use
self.alpha = 0.3;
};
return self;
});
var LevelJokerButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('levelJokerButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (levelJokerUsed || gameState !== 'playing') {
return;
}
levelJokerUsed = true;
LK.effects.flashObject(self, 0xFFFFFF, 300);
// Store current level and switch to level 8
originalLevel = currentLevel;
currentLevel = 8;
levelTxt.setText('Level: 8 (TEMP)');
// Flash screen to show level bonus
LK.effects.flashScreen(0xe67e22, 500);
// Hide joker button after use
self.alpha = 0.3;
// Set timer to revert back after 10 seconds
LK.setTimeout(function () {
if (gameState === 'playing') {
currentLevel = originalLevel;
levelTxt.setText('Level: ' + currentLevel);
LK.effects.flashScreen(0x3498db, 300);
}
}, 10000);
};
return self;
});
var MenuButton = Container.expand(function (text, callback) {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('menuButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2(text, {
size: 50,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.callback = callback;
self.down = function (x, y, obj) {
LK.effects.flashObject(self, 0xFFFFFF, 200);
LK.setTimeout(function () {
self.callback();
}, 200);
};
return self;
});
var TimeJokerButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('timeJokerButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (timeJokerUsed || gameState !== 'playing') {
return;
}
timeJokerUsed = true;
LK.effects.flashObject(self, 0xFFFFFF, 300);
// Add 30 seconds to timer
timeLeft += 30;
timerTxt.setText('Time: ' + timeLeft);
// Flash screen to show time bonus
LK.effects.flashScreen(0x9b59b6, 500);
// Hide joker button after use
self.alpha = 0.3;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x34495e
});
/****
* Game Code
****/
var gameState = 'menu'; // 'menu', 'playing', 'gameover'
var currentLevel = 1;
var questionsAnswered = 0;
var maxQuestions = 10;
var questionsPerLevel = 3;
var timeLeft = 60;
var gameTimer = null;
var currentQuestion = null;
var answerButtons = [];
var menuElements = [];
var jokerUsed = false;
var jokerButton = null;
var timeJokerUsed = false;
var timeJokerButton = null;
var levelJokerUsed = false;
var levelJokerButton = null;
var originalLevel = 1;
// Add notebook background
var notebookBackground = LK.getAsset('notebook_background', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
});
game.addChild(notebookBackground);
// UI Elements - initially hidden
var questionBox = LK.getAsset('questionBox', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 800
});
var questionText = new Text2('', {
size: 80,
fill: 0x000000
});
questionText.anchor.set(0.5, 0.5);
questionText.x = 1024;
questionText.y = 800;
var scoreTxt = new Text2('Score: 0', {
size: 60,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 100;
scoreTxt.y = 150;
var timerTxt = new Text2('Time: 60', {
size: 60,
fill: 0xFFFFFF
});
timerTxt.anchor.set(1, 0);
timerTxt.x = 1948;
timerTxt.y = 150;
var levelTxt = new Text2('Level: 1', {
size: 50,
fill: 0xFFFFFF
});
levelTxt.anchor.set(0.5, 0);
levelTxt.x = 1024;
levelTxt.y = 150;
var furkanText = new Text2('Furkan Çelebi', {
size: 40,
fill: 0xFFFFFF
});
furkanText.anchor.set(0.5, 0);
furkanText.x = 1024;
furkanText.y = 100;
// Create joker button
jokerButton = new JokerButton();
jokerButton.x = 1024 - 200;
jokerButton.y = 980;
// Create time joker button
timeJokerButton = new TimeJokerButton();
timeJokerButton.x = 1024;
timeJokerButton.y = 980;
// Create level joker button
levelJokerButton = new LevelJokerButton();
levelJokerButton.x = 1024 + 200;
levelJokerButton.y = 980;
function showMenu() {
gameState = 'menu';
// Clear any existing menu elements
for (var i = 0; i < menuElements.length; i++) {
menuElements[i].destroy();
}
menuElements = [];
// Hide game elements
if (questionBox.parent) {
questionBox.parent.removeChild(questionBox);
}
if (questionText.parent) {
questionText.parent.removeChild(questionText);
}
if (scoreTxt.parent) {
scoreTxt.parent.removeChild(scoreTxt);
}
if (timerTxt.parent) {
timerTxt.parent.removeChild(timerTxt);
}
if (levelTxt.parent) {
levelTxt.parent.removeChild(levelTxt);
}
if (jokerButton && jokerButton.parent) {
jokerButton.parent.removeChild(jokerButton);
}
if (timeJokerButton && timeJokerButton.parent) {
timeJokerButton.parent.removeChild(timeJokerButton);
}
if (levelJokerButton && levelJokerButton.parent) {
levelJokerButton.parent.removeChild(levelJokerButton);
}
if (furkanText.parent) {
furkanText.parent.removeChild(furkanText);
}
// Create menu background
var menuBg = game.addChild(LK.getAsset('menuBackground', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 1366
}));
menuElements.push(menuBg);
// Create title
var titleText = new Text2('Math Challenge', {
size: 120,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 800;
game.addChild(titleText);
menuElements.push(titleText);
// Create subtitle
var subtitleText = new Text2('Test your arithmetic skills!', {
size: 60,
fill: 0xBDC3C7
});
subtitleText.anchor.set(0.5, 0.5);
subtitleText.x = 1024;
subtitleText.y = 920;
game.addChild(subtitleText);
menuElements.push(subtitleText);
// Create start button
var startButton = new MenuButton('', function () {
startGameFromMenu();
});
startButton.x = 1024;
startButton.y = 1150;
game.addChild(startButton);
menuElements.push(startButton);
// Create instructions
var instructionsText = new Text2('Answer math questions correctly to score points!\nProgress through 10 levels: basic arithmetic to exponents!\nLevels 8-10 feature challenging exponent expressions like 3^4!\nExponents get harder as you advance!\nYou have 60 seconds to complete all levels.', {
size: 32,
fill: 0x95A5A6
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 1024;
instructionsText.y = 1400;
game.addChild(instructionsText);
menuElements.push(instructionsText);
}
function hideMenu() {
// Clear menu elements
for (var i = 0; i < menuElements.length; i++) {
menuElements[i].destroy();
}
menuElements = [];
// Show game elements
game.addChild(questionBox);
game.addChild(questionText);
game.addChild(scoreTxt);
game.addChild(timerTxt);
game.addChild(levelTxt);
game.addChild(furkanText);
game.addChild(jokerButton);
game.addChild(timeJokerButton);
game.addChild(levelJokerButton);
}
function startGameFromMenu() {
gameState = 'playing';
hideMenu();
// Reset game state
currentLevel = 1;
questionsAnswered = 0;
timeLeft = 60;
jokerUsed = false;
LK.setScore(0);
scoreTxt.setText('Score: 0');
timerTxt.setText('Time: 60');
levelTxt.setText('Level: 1');
// Reset joker button
if (jokerButton) {
jokerButton.alpha = 1;
}
// Reset time joker button
timeJokerUsed = false;
if (timeJokerButton) {
timeJokerButton.alpha = 1;
}
// Reset level joker button
levelJokerUsed = false;
if (levelJokerButton) {
levelJokerButton.alpha = 1;
}
// Start background music when game begins
LK.playMusic('background_music');
startGame();
}
function generateQuestion() {
var num1, num2, operator, correctAnswer;
var operations = ['+', '-', '*', '/'];
if (currentLevel === 1) {
// Level 1: Single digit addition
num1 = Math.floor(Math.random() * 9) + 1;
num2 = Math.floor(Math.random() * 9) + 1;
operator = '+';
} else if (currentLevel === 2) {
// Level 2: Single digit subtraction
num1 = Math.floor(Math.random() * 9) + 1;
num2 = Math.floor(Math.random() * 9) + 1;
operator = '-';
if (num2 > num1) {
var temp = num1;
num1 = num2;
num2 = temp;
}
} else if (currentLevel === 3) {
// Level 3: Single digit multiplication
num1 = Math.floor(Math.random() * 9) + 1;
num2 = Math.floor(Math.random() * 9) + 1;
operator = '*';
} else if (currentLevel === 4) {
// Level 4: Single digit division
num2 = Math.floor(Math.random() * 9) + 1;
num1 = num2 * (Math.floor(Math.random() * 9) + 1);
operator = '/';
} else if (currentLevel === 5) {
// Level 5: Two digit addition
num1 = Math.floor(Math.random() * 90) + 10;
num2 = Math.floor(Math.random() * 90) + 10;
operator = '+';
} else if (currentLevel === 6) {
// Level 6: Two digit subtraction
num1 = Math.floor(Math.random() * 90) + 10;
num2 = Math.floor(Math.random() * 90) + 10;
operator = '-';
if (num2 > num1) {
var temp = num1;
num1 = num2;
num2 = temp;
}
} else if (currentLevel === 7) {
// Level 7: Two digit multiplication
num1 = Math.floor(Math.random() * 20) + 1;
num2 = Math.floor(Math.random() * 20) + 1;
operator = '*';
} else if (currentLevel === 8) {
// Level 8: Mixed operations with exponents (simple)
var questionType = Math.floor(Math.random() * 2); // 0 for regular math, 1 for exponents
if (questionType === 0) {
num1 = Math.floor(Math.random() * 50) + 10;
num2 = Math.floor(Math.random() * 20) + 1;
operator = operations[Math.floor(Math.random() * 4)];
if (operator === '-' && num2 > num1) {
var temp = num1;
num1 = num2;
num2 = temp;
}
if (operator === '/' && num1 % num2 !== 0) {
num1 = num2 * Math.floor(Math.random() * 8 + 1);
}
} else {
// Simple exponents: base 2-5, exponent 2-3
var base = Math.floor(Math.random() * 4) + 2; // Base from 2-5
var exponent = Math.floor(Math.random() * 2) + 2; // Exponent from 2-3
correctAnswer = Math.pow(base, exponent);
return {
text: base + '^' + exponent + ' = ?',
answer: correctAnswer
};
}
} else if (currentLevel === 9) {
// Level 9: Complex mixed operations with more exponents
var questionType = Math.floor(Math.random() * 3); // 0,1 for regular math, 2 for exponents
if (questionType < 2) {
num1 = Math.floor(Math.random() * 100) + 20;
num2 = Math.floor(Math.random() * 30) + 1;
operator = operations[Math.floor(Math.random() * 4)];
if (operator === '-' && num2 > num1) {
var temp = num1;
num1 = num2;
num2 = temp;
}
if (operator === '/' && num1 % num2 !== 0) {
num1 = num2 * Math.floor(Math.random() * 10 + 1);
}
} else {
// Medium exponents: base 2-7, exponent 2-4
var base = Math.floor(Math.random() * 6) + 2; // Base from 2-7
var exponent = Math.floor(Math.random() * 3) + 2; // Exponent from 2-4
correctAnswer = Math.pow(base, exponent);
return {
text: base + '^' + exponent + ' = ?',
answer: correctAnswer
};
}
} else if (currentLevel === 10) {
// Level 10: Advanced exponent expressions (mostly exponents)
var questionType = Math.floor(Math.random() * 4); // 0 for regular math, 1,2,3 for exponents
if (questionType === 0) {
// Occasional complex math problem
num1 = Math.floor(Math.random() * 150) + 50;
num2 = Math.floor(Math.random() * 25) + 5;
operator = operations[Math.floor(Math.random() * 4)];
if (operator === '-' && num2 > num1) {
var temp = num1;
num1 = num2;
num2 = temp;
}
if (operator === '/' && num1 % num2 !== 0) {
num1 = num2 * Math.floor(Math.random() * 15 + 1);
}
} else {
// Advanced exponents: base 2-10, exponent 2-5
var base = Math.floor(Math.random() * 9) + 2; // Base from 2-10
var exponent = Math.floor(Math.random() * 4) + 2; // Exponent from 2-5
correctAnswer = Math.pow(base, exponent);
return {
text: base + '^' + exponent + ' = ?',
answer: correctAnswer
};
}
}
switch (operator) {
case '+':
correctAnswer = num1 + num2;
break;
case '-':
correctAnswer = num1 - num2;
break;
case '*':
correctAnswer = num1 * num2;
break;
case '/':
correctAnswer = num1 / num2;
break;
}
return {
text: num1 + ' ' + operator + ' ' + num2 + ' = ?',
answer: correctAnswer
};
}
function generateWrongAnswers(correctAnswer) {
var wrongAnswers = [];
var range = Math.max(5, Math.floor(correctAnswer * 0.3));
while (wrongAnswers.length < 3) {
var wrong = correctAnswer + Math.floor(Math.random() * range * 2) - range;
if (wrong !== correctAnswer && wrongAnswers.indexOf(wrong) === -1 && wrong >= 0) {
wrongAnswers.push(wrong);
}
}
return wrongAnswers;
}
function clearAnswerButtons() {
for (var i = 0; i < answerButtons.length; i++) {
answerButtons[i].destroy();
}
answerButtons = [];
}
function showQuestion() {
clearAnswerButtons();
currentQuestion = generateQuestion();
questionText.setText(currentQuestion.text);
var answers = [currentQuestion.answer];
var wrongAnswers = generateWrongAnswers(currentQuestion.answer);
answers = answers.concat(wrongAnswers);
// Shuffle answers
for (var i = answers.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = answers[i];
answers[i] = answers[j];
answers[j] = temp;
}
// Create answer buttons
var buttonStartX = 1024 - (4 * 350 + 3 * 50) / 2 + 175;
var buttonY = 1200;
for (var i = 0; i < 4; i++) {
var button = new AnswerButton(answers[i], answers[i] === currentQuestion.answer);
button.x = buttonStartX + i * 400;
button.y = buttonY;
answerButtons.push(button);
game.addChild(button);
}
}
function nextQuestion() {
questionsAnswered++;
if (questionsAnswered % questionsPerLevel === 0 && currentLevel < 10) {
currentLevel++;
levelTxt.setText('Level: ' + currentLevel);
LK.effects.flashScreen(0x27ae60, 500);
showQuestion();
} else if (currentLevel === 10 && questionsAnswered % questionsPerLevel === 0) {
LK.showYouWin();
return;
} else {
showQuestion();
}
}
function showGameOver() {
LK.clearInterval(gameTimer);
gameState = 'gameover';
// Stop background music when game ends
LK.stopMusic();
LK.showGameOver(); // Show LK game over functionality
}
function startGame() {
// Start timer
gameTimer = LK.setInterval(function () {
timeLeft--;
timerTxt.setText('Time: ' + timeLeft);
if (timeLeft <= 0) {
showGameOver();
}
}, 1000);
// Show first question
showQuestion();
}
// Show menu first instead of starting game directly
showMenu();
Bir Buton . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Bir masa ve üstünde defter . No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Üstünde "Joker" Yazan Bir Buton. No background. Transparent background. Blank background. No shadows. 2d. In-Game asset. flat
Arka Planı sil
Arka Planı Sil