/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { highScore: 0 }); /**** * Classes ****/ var GameQuestion = Container.expand(function (character, correctShow, options) { var self = Container.call(this); var questionBox = self.attachAsset('questionBox', { anchorX: 0.5, anchorY: 0.5 }); var questionText = new Text2("Which show is " + character + " from?", { size: 90, fill: 0xFFFFFF }); questionText.anchor.set(0.5, 0.5); self.addChild(questionText); self.character = character; self.correctShow = correctShow; self.options = options; return self; }); var Option = Container.expand(function (optionText, optionId) { var self = Container.call(this); var optionBox = self.attachAsset('optionBox', { anchorX: 0.5, anchorY: 0.5 }); var text = new Text2(optionText, { size: 70, fill: 0xFFFFFF }); text.anchor.set(0.5, 0.5); self.addChild(text); self.optionId = optionId; self.originalColor = 0x6495ED; self.originalScale = { x: 1, y: 1 }; self.width = optionBox.width; self.height = optionBox.height; self.setSelected = function (selected) { if (selected) { tween(optionBox, { tint: 0x3A75C4 }, { duration: 200 }); tween(self, { scaleX: 1.05, scaleY: 1.05 }, { duration: 200 }); } else { tween(optionBox, { tint: self.originalColor }, { duration: 200 }); tween(self, { scaleX: self.originalScale.x, scaleY: self.originalScale.y }, { duration: 200 }); } }; self.setCorrect = function () { tween(optionBox, { tint: 0x32CD32 }, { duration: 300 }); }; self.setWrong = function () { tween(optionBox, { tint: 0xFF6347 }, { duration: 300 }); }; self.reset = function () { tween(optionBox, { tint: self.originalColor }, { duration: 200 }); tween(self, { scaleX: self.originalScale.x, scaleY: self.originalScale.y }, { duration: 200 }); }; self.down = function (x, y, obj) { self.setSelected(true); }; self.up = function (x, y, obj) { self.setSelected(false); if (gameState === "playing") { checkAnswer(self.optionId); } }; return self; }); var ScoreDisplay = Container.expand(function () { var self = Container.call(this); self.scoreText = new Text2("Score: 0", { size: 70, fill: 0xFFFFFF }); self.scoreText.anchor.set(0, 0); self.addChild(self.scoreText); self.updateScore = function (score) { self.scoreText.setText("Score: " + score); }; return self; }); var Timer = Container.expand(function (duration) { var self = Container.call(this); self.timerBar = self.attachAsset('optionBox', { anchorX: 0, anchorY: 0.5, tint: 0x32CD32 }); self.timerText = new Text2("Time: " + duration, { size: 60, fill: 0xFFFFFF }); self.timerText.anchor.set(0.5, 0.5); self.addChild(self.timerText); self.maxDuration = duration; self.currentTime = duration; self.maxWidth = self.timerBar.width; self.updateTimer = function (time) { self.currentTime = time; self.timerText.setText("Time: " + Math.ceil(time)); // Update timer bar width var percentLeft = time / self.maxDuration; self.timerBar.width = self.maxWidth * percentLeft; // Change color based on time left if (percentLeft > 0.6) { self.timerBar.tint = 0x32CD32; // Green } else if (percentLeft > 0.3) { self.timerBar.tint = 0xFFD700; // Yellow } else { self.timerBar.tint = 0xFF6347; // Red } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ // Game data var cartoonData = [{ character: "SpongeBob SquarePants", show: "SpongeBob SquarePants" }, { character: "Patrick Star", show: "SpongeBob SquarePants" }, { character: "Squidward Tentacles", show: "SpongeBob SquarePants" }, { character: "Mickey Mouse", show: "Mickey Mouse Clubhouse" }, { character: "Donald Duck", show: "DuckTales" }, { character: "Goofy", show: "Goof Troop" }, { character: "Bugs Bunny", show: "Looney Tunes" }, { character: "Daffy Duck", show: "Looney Tunes" }, { character: "Tweety Bird", show: "Looney Tunes" }, { character: "Scooby-Doo", show: "Scooby-Doo" }, { character: "Shaggy Rogers", show: "Scooby-Doo" }, { character: "Fred Flintstone", show: "The Flintstones" }, { character: "Barney Rubble", show: "The Flintstones" }, { character: "Homer Simpson", show: "The Simpsons" }, { character: "Bart Simpson", show: "The Simpsons" }, { character: "Lisa Simpson", show: "The Simpsons" }, { character: "Peter Griffin", show: "Family Guy" }, { character: "Stewie Griffin", show: "Family Guy" }, { character: "Brian Griffin", show: "Family Guy" }, { character: "Eric Cartman", show: "South Park" }, { character: "Stan Marsh", show: "South Park" }, { character: "Kyle Broflovski", show: "South Park" }, { character: "Finn the Human", show: "Adventure Time" }, { character: "Jake the Dog", show: "Adventure Time" }, { character: "Princess Bubblegum", show: "Adventure Time" }, { character: "Mordecai", show: "Regular Show" }, { character: "Rigby", show: "Regular Show" }, { character: "Tom", show: "Tom and Jerry" }, { character: "Jerry", show: "Tom and Jerry" }, { character: "Rick Sanchez", show: "Rick and Morty" }, { character: "Morty Smith", show: "Rick and Morty" }, { character: "Dexter", show: "Dexter's Laboratory" }, { character: "Johnny Bravo", show: "Johnny Bravo" }, { character: "The Powerpuff Girls", show: "The Powerpuff Girls" }, { character: "Courage", show: "Courage the Cowardly Dog" }, { character: "Ed, Edd n Eddy", show: "Ed, Edd n Eddy" }, { character: "Samurai Jack", show: "Samurai Jack" }, { character: "Ben Tennyson", show: "Ben 10" }, { character: "Gwen Tennyson", show: "Ben 10" }, { character: "Gumball Watterson", show: "The Amazing World of Gumball" }]; // List of shows for generating options var allShows = []; for (var i = 0; i < cartoonData.length; i++) { if (allShows.indexOf(cartoonData[i].show) === -1) { allShows.push(cartoonData[i].show); } } // Game variables var score = 0; var questionIndex = 0; var currentOptions = []; var correctAnswerIndex = 0; var gameState = "ready"; // ready, playing, gameOver var gameTime = 60; // 60 seconds game time var timeLeft = gameTime; var currentQuestion = null; var optionElements = []; var scoreDisplay = null; var timerDisplay = null; var gameTimer = null; var questionTimer = null; var timePerQuestion = 10; // 10 seconds per question var questionTimeLeft = timePerQuestion; var usedCharacters = []; // Initialize game elements function initGame() { // Reset game variables score = 0; questionIndex = 0; timeLeft = gameTime; questionTimeLeft = timePerQuestion; gameState = "ready"; usedCharacters = []; // Create score display scoreDisplay = new ScoreDisplay(); scoreDisplay.x = 100; scoreDisplay.y = 100; game.addChild(scoreDisplay); scoreDisplay.updateScore(score); // Create timer display timerDisplay = new Timer(timePerQuestion); timerDisplay.x = 1024; timerDisplay.y = 100; game.addChild(timerDisplay); timerDisplay.updateTimer(questionTimeLeft); // Create start game prompt var startPrompt = new Text2("Tap anywhere to start!", { size: 120, fill: 0xFFFFFF }); startPrompt.anchor.set(0.5, 0.5); startPrompt.x = 1024; startPrompt.y = 1366; game.addChild(startPrompt); // Animate the start prompt function pulseStartPrompt() { tween(startPrompt, { alpha: 0.5 }, { duration: 800, easing: tween.sinOut, onFinish: function onFinish() { tween(startPrompt, { alpha: 1 }, { duration: 800, easing: tween.sinIn, onFinish: pulseStartPrompt }); } }); } pulseStartPrompt(); // Store reference to start prompt for removal later game.startPrompt = startPrompt; } // Generate a new question function generateQuestion() { // Clean up previous question if exists if (currentQuestion) { game.removeChild(currentQuestion); for (var i = 0; i < optionElements.length; i++) { game.removeChild(optionElements[i]); } } // Reset arrays currentOptions = []; optionElements = []; // Get a random character that hasn't been used yet var availableCharacters = cartoonData.filter(function (character) { return usedCharacters.indexOf(character.character) === -1; }); // If we've used all characters, reset the used characters list if (availableCharacters.length === 0) { usedCharacters = []; availableCharacters = cartoonData; } var randomIndex = Math.floor(Math.random() * availableCharacters.length); var selectedCharacter = availableCharacters[randomIndex]; usedCharacters.push(selectedCharacter.character); var correctShow = selectedCharacter.show; // Generate 3 wrong options var wrongOptions = allShows.filter(function (show) { return show !== correctShow; }); var shuffledWrongOptions = shuffleArray(wrongOptions); var options = [correctShow, shuffledWrongOptions[0], shuffledWrongOptions[1], shuffledWrongOptions[2]]; options = shuffleArray(options); // Find where the correct answer is correctAnswerIndex = options.indexOf(correctShow); // Create question currentQuestion = new GameQuestion(selectedCharacter.character, correctShow, options); currentQuestion.x = 1024; currentQuestion.y = 400; game.addChild(currentQuestion); // Create options for (var i = 0; i < options.length; i++) { var option = new Option(options[i], i); option.x = i < 2 ? 512 : 1536; option.y = i % 2 === 0 ? 1000 : 1300; game.addChild(option); optionElements.push(option); currentOptions.push(options[i]); } // Reset question timer questionTimeLeft = timePerQuestion; timerDisplay.updateTimer(questionTimeLeft); } // Check if the selected answer is correct function checkAnswer(selectedIndex) { // Prevent multiple answers if (gameState !== "playing") return; // Temporarily pause question timer LK.clearInterval(questionTimer); var isCorrect = selectedIndex === correctAnswerIndex; if (isCorrect) { // Correct answer optionElements[selectedIndex].setCorrect(); score += Math.ceil(questionTimeLeft); // Award points based on time left scoreDisplay.updateScore(score); LK.getSound('correct').play(); } else { // Wrong answer optionElements[selectedIndex].setWrong(); optionElements[correctAnswerIndex].setCorrect(); LK.getSound('wrong').play(); } // Wait a moment before showing the next question LK.setTimeout(function () { if (gameState === "playing") { generateQuestion(); // Resume question timer questionTimer = LK.setInterval(updateQuestionTimer, 100); } }, 1500); } // Update the question timer function updateQuestionTimer() { questionTimeLeft -= 0.1; timerDisplay.updateTimer(questionTimeLeft); if (questionTimeLeft <= 0) { // Time's up for this question LK.clearInterval(questionTimer); // Show correct answer for (var i = 0; i < optionElements.length; i++) { if (i === correctAnswerIndex) { optionElements[i].setCorrect(); } else { optionElements[i].setWrong(); } } LK.getSound('wrong').play(); // Wait a moment before showing the next question LK.setTimeout(function () { if (gameState === "playing") { generateQuestion(); // Resume question timer questionTimer = LK.setInterval(updateQuestionTimer, 100); } }, 1500); } } // Start the game function startGame() { if (gameState !== "ready") return; // Remove the start prompt if (game.startPrompt) { game.removeChild(game.startPrompt); game.startPrompt = null; } gameState = "playing"; // Play background music LK.playMusic('gameMusic', { fade: { start: 0, end: 0.5, duration: 1000 } }); // Generate first question generateQuestion(); // Start question timer questionTimer = LK.setInterval(updateQuestionTimer, 100); // Start game timer gameTimer = LK.setInterval(function () { timeLeft -= 0.1; if (timeLeft <= 0) { endGame(); } }, 100); } // End the game function endGame() { // Clear timers LK.clearInterval(questionTimer); LK.clearInterval(gameTimer); gameState = "gameOver"; // Play game over sound LK.getSound('gameover').play(); LK.stopMusic(); // Update high score if needed if (score > storage.highScore) { storage.highScore = score; } // Show game over LK.setScore(score); LK.showGameOver(); } // Helper function to shuffle an array function shuffleArray(array) { var newArray = array.slice(); for (var i = newArray.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = newArray[i]; newArray[i] = newArray[j]; newArray[j] = temp; } return newArray; } // Handle tap to start game game.down = function (x, y, obj) { if (gameState === "ready") { startGame(); } }; // Initialize game initGame();
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
highScore: 0
});
/****
* Classes
****/
var GameQuestion = Container.expand(function (character, correctShow, options) {
var self = Container.call(this);
var questionBox = self.attachAsset('questionBox', {
anchorX: 0.5,
anchorY: 0.5
});
var questionText = new Text2("Which show is " + character + " from?", {
size: 90,
fill: 0xFFFFFF
});
questionText.anchor.set(0.5, 0.5);
self.addChild(questionText);
self.character = character;
self.correctShow = correctShow;
self.options = options;
return self;
});
var Option = Container.expand(function (optionText, optionId) {
var self = Container.call(this);
var optionBox = self.attachAsset('optionBox', {
anchorX: 0.5,
anchorY: 0.5
});
var text = new Text2(optionText, {
size: 70,
fill: 0xFFFFFF
});
text.anchor.set(0.5, 0.5);
self.addChild(text);
self.optionId = optionId;
self.originalColor = 0x6495ED;
self.originalScale = {
x: 1,
y: 1
};
self.width = optionBox.width;
self.height = optionBox.height;
self.setSelected = function (selected) {
if (selected) {
tween(optionBox, {
tint: 0x3A75C4
}, {
duration: 200
});
tween(self, {
scaleX: 1.05,
scaleY: 1.05
}, {
duration: 200
});
} else {
tween(optionBox, {
tint: self.originalColor
}, {
duration: 200
});
tween(self, {
scaleX: self.originalScale.x,
scaleY: self.originalScale.y
}, {
duration: 200
});
}
};
self.setCorrect = function () {
tween(optionBox, {
tint: 0x32CD32
}, {
duration: 300
});
};
self.setWrong = function () {
tween(optionBox, {
tint: 0xFF6347
}, {
duration: 300
});
};
self.reset = function () {
tween(optionBox, {
tint: self.originalColor
}, {
duration: 200
});
tween(self, {
scaleX: self.originalScale.x,
scaleY: self.originalScale.y
}, {
duration: 200
});
};
self.down = function (x, y, obj) {
self.setSelected(true);
};
self.up = function (x, y, obj) {
self.setSelected(false);
if (gameState === "playing") {
checkAnswer(self.optionId);
}
};
return self;
});
var ScoreDisplay = Container.expand(function () {
var self = Container.call(this);
self.scoreText = new Text2("Score: 0", {
size: 70,
fill: 0xFFFFFF
});
self.scoreText.anchor.set(0, 0);
self.addChild(self.scoreText);
self.updateScore = function (score) {
self.scoreText.setText("Score: " + score);
};
return self;
});
var Timer = Container.expand(function (duration) {
var self = Container.call(this);
self.timerBar = self.attachAsset('optionBox', {
anchorX: 0,
anchorY: 0.5,
tint: 0x32CD32
});
self.timerText = new Text2("Time: " + duration, {
size: 60,
fill: 0xFFFFFF
});
self.timerText.anchor.set(0.5, 0.5);
self.addChild(self.timerText);
self.maxDuration = duration;
self.currentTime = duration;
self.maxWidth = self.timerBar.width;
self.updateTimer = function (time) {
self.currentTime = time;
self.timerText.setText("Time: " + Math.ceil(time));
// Update timer bar width
var percentLeft = time / self.maxDuration;
self.timerBar.width = self.maxWidth * percentLeft;
// Change color based on time left
if (percentLeft > 0.6) {
self.timerBar.tint = 0x32CD32; // Green
} else if (percentLeft > 0.3) {
self.timerBar.tint = 0xFFD700; // Yellow
} else {
self.timerBar.tint = 0xFF6347; // Red
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB // Sky blue background
});
/****
* Game Code
****/
// Game data
var cartoonData = [{
character: "SpongeBob SquarePants",
show: "SpongeBob SquarePants"
}, {
character: "Patrick Star",
show: "SpongeBob SquarePants"
}, {
character: "Squidward Tentacles",
show: "SpongeBob SquarePants"
}, {
character: "Mickey Mouse",
show: "Mickey Mouse Clubhouse"
}, {
character: "Donald Duck",
show: "DuckTales"
}, {
character: "Goofy",
show: "Goof Troop"
}, {
character: "Bugs Bunny",
show: "Looney Tunes"
}, {
character: "Daffy Duck",
show: "Looney Tunes"
}, {
character: "Tweety Bird",
show: "Looney Tunes"
}, {
character: "Scooby-Doo",
show: "Scooby-Doo"
}, {
character: "Shaggy Rogers",
show: "Scooby-Doo"
}, {
character: "Fred Flintstone",
show: "The Flintstones"
}, {
character: "Barney Rubble",
show: "The Flintstones"
}, {
character: "Homer Simpson",
show: "The Simpsons"
}, {
character: "Bart Simpson",
show: "The Simpsons"
}, {
character: "Lisa Simpson",
show: "The Simpsons"
}, {
character: "Peter Griffin",
show: "Family Guy"
}, {
character: "Stewie Griffin",
show: "Family Guy"
}, {
character: "Brian Griffin",
show: "Family Guy"
}, {
character: "Eric Cartman",
show: "South Park"
}, {
character: "Stan Marsh",
show: "South Park"
}, {
character: "Kyle Broflovski",
show: "South Park"
}, {
character: "Finn the Human",
show: "Adventure Time"
}, {
character: "Jake the Dog",
show: "Adventure Time"
}, {
character: "Princess Bubblegum",
show: "Adventure Time"
}, {
character: "Mordecai",
show: "Regular Show"
}, {
character: "Rigby",
show: "Regular Show"
}, {
character: "Tom",
show: "Tom and Jerry"
}, {
character: "Jerry",
show: "Tom and Jerry"
}, {
character: "Rick Sanchez",
show: "Rick and Morty"
}, {
character: "Morty Smith",
show: "Rick and Morty"
}, {
character: "Dexter",
show: "Dexter's Laboratory"
}, {
character: "Johnny Bravo",
show: "Johnny Bravo"
}, {
character: "The Powerpuff Girls",
show: "The Powerpuff Girls"
}, {
character: "Courage",
show: "Courage the Cowardly Dog"
}, {
character: "Ed, Edd n Eddy",
show: "Ed, Edd n Eddy"
}, {
character: "Samurai Jack",
show: "Samurai Jack"
}, {
character: "Ben Tennyson",
show: "Ben 10"
}, {
character: "Gwen Tennyson",
show: "Ben 10"
}, {
character: "Gumball Watterson",
show: "The Amazing World of Gumball"
}];
// List of shows for generating options
var allShows = [];
for (var i = 0; i < cartoonData.length; i++) {
if (allShows.indexOf(cartoonData[i].show) === -1) {
allShows.push(cartoonData[i].show);
}
}
// Game variables
var score = 0;
var questionIndex = 0;
var currentOptions = [];
var correctAnswerIndex = 0;
var gameState = "ready"; // ready, playing, gameOver
var gameTime = 60; // 60 seconds game time
var timeLeft = gameTime;
var currentQuestion = null;
var optionElements = [];
var scoreDisplay = null;
var timerDisplay = null;
var gameTimer = null;
var questionTimer = null;
var timePerQuestion = 10; // 10 seconds per question
var questionTimeLeft = timePerQuestion;
var usedCharacters = [];
// Initialize game elements
function initGame() {
// Reset game variables
score = 0;
questionIndex = 0;
timeLeft = gameTime;
questionTimeLeft = timePerQuestion;
gameState = "ready";
usedCharacters = [];
// Create score display
scoreDisplay = new ScoreDisplay();
scoreDisplay.x = 100;
scoreDisplay.y = 100;
game.addChild(scoreDisplay);
scoreDisplay.updateScore(score);
// Create timer display
timerDisplay = new Timer(timePerQuestion);
timerDisplay.x = 1024;
timerDisplay.y = 100;
game.addChild(timerDisplay);
timerDisplay.updateTimer(questionTimeLeft);
// Create start game prompt
var startPrompt = new Text2("Tap anywhere to start!", {
size: 120,
fill: 0xFFFFFF
});
startPrompt.anchor.set(0.5, 0.5);
startPrompt.x = 1024;
startPrompt.y = 1366;
game.addChild(startPrompt);
// Animate the start prompt
function pulseStartPrompt() {
tween(startPrompt, {
alpha: 0.5
}, {
duration: 800,
easing: tween.sinOut,
onFinish: function onFinish() {
tween(startPrompt, {
alpha: 1
}, {
duration: 800,
easing: tween.sinIn,
onFinish: pulseStartPrompt
});
}
});
}
pulseStartPrompt();
// Store reference to start prompt for removal later
game.startPrompt = startPrompt;
}
// Generate a new question
function generateQuestion() {
// Clean up previous question if exists
if (currentQuestion) {
game.removeChild(currentQuestion);
for (var i = 0; i < optionElements.length; i++) {
game.removeChild(optionElements[i]);
}
}
// Reset arrays
currentOptions = [];
optionElements = [];
// Get a random character that hasn't been used yet
var availableCharacters = cartoonData.filter(function (character) {
return usedCharacters.indexOf(character.character) === -1;
});
// If we've used all characters, reset the used characters list
if (availableCharacters.length === 0) {
usedCharacters = [];
availableCharacters = cartoonData;
}
var randomIndex = Math.floor(Math.random() * availableCharacters.length);
var selectedCharacter = availableCharacters[randomIndex];
usedCharacters.push(selectedCharacter.character);
var correctShow = selectedCharacter.show;
// Generate 3 wrong options
var wrongOptions = allShows.filter(function (show) {
return show !== correctShow;
});
var shuffledWrongOptions = shuffleArray(wrongOptions);
var options = [correctShow, shuffledWrongOptions[0], shuffledWrongOptions[1], shuffledWrongOptions[2]];
options = shuffleArray(options);
// Find where the correct answer is
correctAnswerIndex = options.indexOf(correctShow);
// Create question
currentQuestion = new GameQuestion(selectedCharacter.character, correctShow, options);
currentQuestion.x = 1024;
currentQuestion.y = 400;
game.addChild(currentQuestion);
// Create options
for (var i = 0; i < options.length; i++) {
var option = new Option(options[i], i);
option.x = i < 2 ? 512 : 1536;
option.y = i % 2 === 0 ? 1000 : 1300;
game.addChild(option);
optionElements.push(option);
currentOptions.push(options[i]);
}
// Reset question timer
questionTimeLeft = timePerQuestion;
timerDisplay.updateTimer(questionTimeLeft);
}
// Check if the selected answer is correct
function checkAnswer(selectedIndex) {
// Prevent multiple answers
if (gameState !== "playing") return;
// Temporarily pause question timer
LK.clearInterval(questionTimer);
var isCorrect = selectedIndex === correctAnswerIndex;
if (isCorrect) {
// Correct answer
optionElements[selectedIndex].setCorrect();
score += Math.ceil(questionTimeLeft); // Award points based on time left
scoreDisplay.updateScore(score);
LK.getSound('correct').play();
} else {
// Wrong answer
optionElements[selectedIndex].setWrong();
optionElements[correctAnswerIndex].setCorrect();
LK.getSound('wrong').play();
}
// Wait a moment before showing the next question
LK.setTimeout(function () {
if (gameState === "playing") {
generateQuestion();
// Resume question timer
questionTimer = LK.setInterval(updateQuestionTimer, 100);
}
}, 1500);
}
// Update the question timer
function updateQuestionTimer() {
questionTimeLeft -= 0.1;
timerDisplay.updateTimer(questionTimeLeft);
if (questionTimeLeft <= 0) {
// Time's up for this question
LK.clearInterval(questionTimer);
// Show correct answer
for (var i = 0; i < optionElements.length; i++) {
if (i === correctAnswerIndex) {
optionElements[i].setCorrect();
} else {
optionElements[i].setWrong();
}
}
LK.getSound('wrong').play();
// Wait a moment before showing the next question
LK.setTimeout(function () {
if (gameState === "playing") {
generateQuestion();
// Resume question timer
questionTimer = LK.setInterval(updateQuestionTimer, 100);
}
}, 1500);
}
}
// Start the game
function startGame() {
if (gameState !== "ready") return;
// Remove the start prompt
if (game.startPrompt) {
game.removeChild(game.startPrompt);
game.startPrompt = null;
}
gameState = "playing";
// Play background music
LK.playMusic('gameMusic', {
fade: {
start: 0,
end: 0.5,
duration: 1000
}
});
// Generate first question
generateQuestion();
// Start question timer
questionTimer = LK.setInterval(updateQuestionTimer, 100);
// Start game timer
gameTimer = LK.setInterval(function () {
timeLeft -= 0.1;
if (timeLeft <= 0) {
endGame();
}
}, 100);
}
// End the game
function endGame() {
// Clear timers
LK.clearInterval(questionTimer);
LK.clearInterval(gameTimer);
gameState = "gameOver";
// Play game over sound
LK.getSound('gameover').play();
LK.stopMusic();
// Update high score if needed
if (score > storage.highScore) {
storage.highScore = score;
}
// Show game over
LK.setScore(score);
LK.showGameOver();
}
// Helper function to shuffle an array
function shuffleArray(array) {
var newArray = array.slice();
for (var i = newArray.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = newArray[i];
newArray[i] = newArray[j];
newArray[j] = temp;
}
return newArray;
}
// Handle tap to start game
game.down = function (x, y, obj) {
if (gameState === "ready") {
startGame();
}
};
// Initialize game
initGame();