/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { currentCategory: "space", progress: { space: 0, wildlife: 0, anatomy: 0 }, currentLevel: 1, highestLevel: 1 }); /**** * Classes ****/ var CategoryButton = Container.expand(function (category, title, description) { var self = Container.call(this); var buttonShape = self.attachAsset(category + 'Theme', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2(title, { size: 80, fill: 0x101010 }); titleText.anchor.set(0.5, 0); titleText.y = -80; self.addChild(titleText); var descText = new Text2(description, { size: 30, fill: 0x101010 }); descText.anchor.set(0.5, 0); descText.y = 10; descText.wordWrap = true; descText.wordWrapWidth = 450; self.addChild(descText); var progressLabel = new Text2("Progress: 0%", { size: 40, fill: 0x101010 }); progressLabel.anchor.set(0.5, 0); progressLabel.y = 80; self.addChild(progressLabel); self.category = category; self.updateProgress = function (progress) { progressLabel.setText("Progress: " + Math.floor(progress * 100) + "%"); }; self.down = function (x, y, obj) { LK.getSound('buttonClick').play(); buttonShape.alpha = 0.7; }; self.up = function (x, y, obj) { buttonShape.alpha = 1; selectCategory(self.category); }; return self; }); var OptionButton = Container.expand(function (text) { var self = Container.call(this); var buttonShape = self.attachAsset('optionButton', { anchorX: 0.5, anchorY: 0.5 }); var optionText = new Text2(text, { size: 50, fill: 0x101010 }); optionText.anchor.set(0.5, 0.5); self.addChild(optionText); self.isCorrect = false; self.setText = function (text) { optionText.setText(text); }; self.down = function (x, y, obj) { LK.getSound('buttonClick').play(); buttonShape.alpha = 0.9; }; self.up = function (x, y, obj) { buttonShape.alpha = 1; checkAnswer(self); }; self.setEnabled = function (enabled) { self.interactive = enabled; buttonShape.alpha = enabled ? 1 : 0.5; }; return self; }); var ProgressBar = Container.expand(function () { var self = Container.call(this); var barBackground = self.attachAsset('progressBar', { anchorX: 0, anchorY: 0.5 }); var barFill = self.attachAsset('progressFill', { anchorX: 0, anchorY: 0.5 }); var levelText = new Text2("Level 1", { size: 40, fill: 0x101010 }); levelText.anchor.set(0.5, 0.5); levelText.x = barBackground.width / 2; self.addChild(levelText); self.updateProgress = function (current, total) { var percentage = current / total; var targetWidth = barBackground.width * percentage; tween(barFill, { width: targetWidth }, { duration: 500, easing: tween.easeOut }); levelText.setText("Level " + storage.currentLevel); }; return self; }); var QuestionPanel = Container.expand(function () { var self = Container.call(this); var panel = self.attachAsset('questionPanel', { anchorX: 0.5, anchorY: 0.5 }); var questionText = new Text2("", { size: 50 * (1 + currentQuestionIndex * 0.1), // Increase font size by 10% for each question fill: 0x101010 }); questionText.anchor.set(0.5, 0); questionText.y = -250; questionText.wordWrap = true; questionText.wordWrapWidth = 1700; self.addChild(questionText); self.options = []; for (var i = 0; i < 4; i++) { var option = new OptionButton(""); option.x = i % 2 === 0 ? -400 : 400; option.y = i < 2 ? 0 : 150; self.options.push(option); self.addChild(option); } var feedbackIcon = self.attachAsset({ anchorX: 0.5, anchorY: 0.5 }, {}); feedbackIcon.visible = false; var feedbackText = new Text2("", { size: 45 }); feedbackText.anchor.set(0.5, 0.5); feedbackText.y = 350; feedbackText.wordWrap = true; feedbackText.wordWrapWidth = 1700; self.addChild(feedbackText); var nextButton = new OptionButton("Next Question"); nextButton.y = 850; nextButton.visible = false; self.addChild(nextButton); nextButton.up = function () { if (nextButton.buttonShape) { nextButton.buttonShape.alpha = 1; } loadNextQuestion(); }; self.setQuestion = function (question) { questionText.setText(question.question); for (var i = 0; i < self.options.length; i++) { self.options[i].setText(question.options[i]); self.options[i].isCorrect = i === question.correctIndex; self.options[i].setEnabled(true); } feedbackIcon.visible = false; feedbackText.setText("\n\n\n\n\n\n\n\n\n\n"); nextButton.visible = false; }; self.showFeedback = function (correct, explanation) { feedbackIcon.visible = true; if (correct) { feedbackIcon.texture = LK.getAsset({}, {}).texture; feedbackText.setText("Correct! " + explanation); feedbackText.setStyle({ fill: 0x101010, size: 45 // Further decrease font size for correct feedback }); // Add congratulation message var congratsText = new Text2("Congratulations!", { size: 90, fill: 0xFFD700 }); congratsText.anchor.set(0.5, 0.5); congratsText.x = 0; congratsText.y = -400; self.addChild(congratsText); // Animate paper blast effect var paperBlast = LK.getAsset('correctFeedback', { anchorX: 0.5, anchorY: 0.5, x: 0, y: 0 }); self.addChild(paperBlast); tween(paperBlast, { scaleX: 3, scaleY: 3, alpha: 0 }, { duration: 1000, easing: tween.easeOut, onComplete: function onComplete() { self.removeChild(paperBlast); self.removeChild(congratsText); } }); nextButton.up = function () { if (nextButton.buttonShape) { nextButton.buttonShape.alpha = 1; } self.removeChild(congratsText); // Ensure congratulation message is removed when next button is clicked loadNextQuestion(); }; } else { feedbackIcon.texture = LK.getAsset('incorrectFeedback', {}).texture; var sadEmoji = new Text2("😢", { size: 80, fill: 0x101010 }); sadEmoji.anchor.set(0.5, 0.5); sadEmoji.x = -1024; // Start off-screen to the left sadEmoji.y = 350; self.addChild(sadEmoji); // Animate the emoji to walk across the screen tween(sadEmoji, { x: 1024 // Move to off-screen to the right }, { duration: 3000, // 3 seconds to walk across easing: tween.easeInOut, onComplete: function onComplete() { self.removeChild(sadEmoji); // Remove emoji after animation } }); nextButton.up = function () { if (nextButton.buttonShape) { nextButton.buttonShape.alpha = 1; } self.removeChild(sadEmoji); // Ensure emoji is removed when next button is clicked loadNextQuestion(); }; feedbackText.setText("Incorrect. " + explanation); feedbackText.setStyle({ fill: 0x101010, fontSize: 45 // Further decrease font size for incorrect feedback }); } nextButton.visible = true; // Disable all option buttons for (var i = 0; i < self.options.length; i++) { self.options[i].setEnabled(false); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game state variables // LK.init.shape('correctFeedback', {width:100, height:100, color:0x34c759, shape:'ellipse'}) var currentScreen = "categories"; // categories, gameplay var questions = []; var currentQuestionIndex = 0; var categoryButtons = []; // Category and question data var categoryData = { space: { name: "Space", description: "Explore planets, stars, and galaxies", questions: [{ question: "Which planet is known as the Red Planet?", options: ["Venus", "Mars", "Jupiter", "Mercury"], correctIndex: 1, explanation: "Mars is called the Red Planet because of the reddish iron oxide on its surface." }, { question: "How many planets are in our solar system?", options: ["7", "8", "9", "10"], correctIndex: 1, explanation: "There are 8 planets: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, and Neptune." }, { question: "What is the largest planet in our solar system?", options: ["Earth", "Saturn", "Jupiter", "Neptune"], correctIndex: 2, explanation: "Jupiter is the largest planet in our solar system." }, { question: "What is the name of the galaxy we live in?", options: ["Andromeda", "Milky Way", "Triangulum", "Sombrero"], correctIndex: 1, explanation: "We live in the Milky Way galaxy, which contains billions of stars." }, { question: "What causes the phases of the Moon?", options: ["Earth's shadow", "Moon's rotation", "Moon's orbit and sunlight", "Solar flares"], correctIndex: 2, explanation: "The Moon's phases are caused by its position relative to Earth and the Sun as it orbits Earth." }, { question: "What is the closest star to Earth?", options: ["Alpha Centauri", "Proxima Centauri", "Sirius", "Betelgeuse"], correctIndex: 1, explanation: "Proxima Centauri is the closest known star to the Sun." }, { question: "What is the smallest planet in our solar system?", options: ["Mercury", "Mars", "Venus", "Earth"], correctIndex: 0, explanation: "Mercury is the smallest planet in our solar system." }, { question: "What is the hottest planet in our solar system?", options: ["Mercury", "Venus", "Mars", "Jupiter"], correctIndex: 1, explanation: "Venus is the hottest planet due to its thick, toxic atmosphere." }, { question: "What is the main component of the Sun?", options: ["Helium", "Oxygen", "Hydrogen", "Carbon"], correctIndex: 2, explanation: "The Sun is primarily composed of hydrogen." }, { question: "What is the name of the first artificial satellite sent into space?", options: ["Sputnik 1", "Explorer 1", "Vanguard 1", "Luna 1"], correctIndex: 0, explanation: "Sputnik 1 was the first artificial satellite launched by the Soviet Union in 1957." }, { question: "What is the term for a rocky object that orbits the Sun?", options: ["Comet", "Asteroid", "Meteor", "Meteorite"], correctIndex: 1, explanation: "Asteroids are rocky objects that orbit the Sun." }, { question: "What is the name of the largest volcano in the solar system?", options: ["Mount Everest", "Olympus Mons", "Mauna Kea", "Mount Etna"], correctIndex: 1, explanation: "Olympus Mons on Mars is the largest volcano in the solar system." }, { question: "What is the term for a star that suddenly increases in brightness?", options: ["Supernova", "Nova", "Pulsar", "Quasar"], correctIndex: 1, explanation: "A nova is a star that suddenly increases in brightness." }, { question: "What is the name of the first human to travel into space?", options: ["Neil Armstrong", "Yuri Gagarin", "Buzz Aldrin", "John Glenn"], correctIndex: 1, explanation: "Yuri Gagarin was the first human to travel into space in 1961." }, { question: "What is the term for the path an object takes as it moves around another object in space?", options: ["Orbit", "Trajectory", "Course", "Route"], correctIndex: 0, explanation: "An orbit is the path an object takes as it moves around another object in space." }, { question: "What is the name of the first American astronaut to orbit Earth?", options: ["John Glenn", "Alan Shepard", "Neil Armstrong", "Buzz Aldrin"], correctIndex: 0, explanation: "John Glenn was the first American astronaut to orbit Earth in 1962." }, { question: "What is the term for a small body of ice, rock, and cosmic dust that follows an elliptical orbit around the Sun?", options: ["Asteroid", "Comet", "Meteor", "Meteorite"], correctIndex: 1, explanation: "A comet is a small body of ice, rock, and cosmic dust that follows an elliptical orbit around the Sun." }, { question: "What is the name of the first spacecraft to land on the Moon?", options: ["Apollo 11", "Luna 2", "Viking 1", "Mariner 4"], correctIndex: 0, explanation: "Apollo 11 was the first spacecraft to land on the Moon in 1969." }, { question: "What is the term for the boundary around a black hole beyond which no light or other radiation can escape?", options: ["Event Horizon", "Singularity", "Accretion Disk", "Photon Sphere"], correctIndex: 0, explanation: "The event horizon is the boundary around a black hole beyond which no light or other radiation can escape." }, { question: "What is the name of the largest moon of Saturn?", options: ["Titan", "Europa", "Ganymede", "Callisto"], correctIndex: 0, explanation: "Titan is the largest moon of Saturn." }, { question: "What is the term for the apparent shift in position of an object when viewed from different angles?", options: ["Parallax", "Refraction", "Reflection", "Diffraction"], correctIndex: 0, explanation: "Parallax is the apparent shift in position of an object when viewed from different angles." }, { question: "What is the name of the first space station launched into orbit?", options: ["Skylab", "Mir", "Salyut 1", "International Space Station"], correctIndex: 2, explanation: "Salyut 1 was the first space station launched into orbit by the Soviet Union in 1971." }, { question: "What is the term for the point in an orbit closest to the Earth?", options: ["Apogee", "Perigee", "Zenith", "Nadir"], correctIndex: 1, explanation: "Perigee is the point in an orbit closest to the Earth." }] }, wildlife: { name: "Wildlife", description: "Discover amazing animals and their habitats", questions: [{ question: "Which is the fastest land animal?", options: ["Lion", "Cheetah", "Gazelle", "Elephant"], correctIndex: 1, explanation: "Cheetahs can run up to 70 mph (112 km/h) for short bursts." }, { question: "What do koalas mainly eat?", options: ["Bamboo", "Eucalyptus leaves", "Fruits", "Insects"], correctIndex: 1, explanation: "Koalas primarily eat eucalyptus leaves, which are toxic to many other animals." }, { question: "Which animal is known as the 'King of the Jungle'?", options: ["Tiger", "Lion", "Gorilla", "Panther"], correctIndex: 1, explanation: "Lions are called 'King of the Jungle' despite living in savannas, not jungles." }, { question: "How many hearts does an octopus have?", options: ["1", "2", "3", "4"], correctIndex: 2, explanation: "Octopuses have three hearts: two pump blood through the gills and one pumps it through the body." }, { question: "Which bird can fly backward?", options: ["Eagle", "Sparrow", "Hummingbird", "Penguin"], correctIndex: 2, explanation: "Hummingbirds are the only birds that can fly backward, upside down, and hover in mid-air." }, { question: "What is the largest land animal?", options: ["Elephant", "Giraffe", "Hippopotamus", "Rhinoceros"], correctIndex: 0, explanation: "The African elephant is the largest land animal." }, { question: "What is the only mammal capable of true flight?", options: ["Bat", "Flying Squirrel", "Sugar Glider", "Flying Lemur"], correctIndex: 0, explanation: "Bats are the only mammals capable of true flight." }, { question: "What is the largest species of shark?", options: ["Great White Shark", "Hammerhead Shark", "Whale Shark", "Tiger Shark"], correctIndex: 2, explanation: "The whale shark is the largest species of shark." }, { question: "What is the primary diet of a panda?", options: ["Bamboo", "Insects", "Fish", "Fruits"], correctIndex: 0, explanation: "Pandas primarily eat bamboo." }, { question: "What is the fastest bird in the world?", options: ["Peregrine Falcon", "Eagle", "Hawk", "Owl"], correctIndex: 0, explanation: "The peregrine falcon is the fastest bird, reaching speeds over 240 mph (386 km/h) during dives." }, { question: "What is the largest species of cat?", options: ["Lion", "Tiger", "Cheetah", "Leopard"], correctIndex: 1, explanation: "The tiger is the largest species of cat." }, { question: "What is the only bird that can fly both forwards and backwards?", options: ["Hummingbird", "Sparrow", "Eagle", "Parrot"], correctIndex: 0, explanation: "Hummingbirds are the only birds that can fly both forwards and backwards." }, { question: "What is the largest species of bear?", options: ["Polar Bear", "Grizzly Bear", "Black Bear", "Panda Bear"], correctIndex: 0, explanation: "The polar bear is the largest species of bear." }, { question: "What is the primary diet of a carnivorous animal?", options: ["Plants", "Insects", "Meat", "Fruits"], correctIndex: 2, explanation: "Carnivorous animals primarily eat meat." }, { question: "What is the largest species of primate?", options: ["Gorilla", "Chimpanzee", "Orangutan", "Gibbon"], correctIndex: 0, explanation: "The gorilla is the largest species of primate." }, { question: "What is the primary diet of a herbivorous animal?", options: ["Plants", "Insects", "Meat", "Fruits"], correctIndex: 0, explanation: "Herbivorous animals primarily eat plants." }, { question: "What is the largest species of reptile?", options: ["Komodo Dragon", "Crocodile", "Alligator", "Iguana"], correctIndex: 1, explanation: "The saltwater crocodile is the largest species of reptile." }, { question: "What is the primary diet of an omnivorous animal?", options: ["Plants", "Insects", "Meat and Plants", "Fruits"], correctIndex: 2, explanation: "Omnivorous animals eat both meat and plants." }, { question: "What is the largest species of amphibian?", options: ["Frog", "Toad", "Salamander", "Newt"], correctIndex: 2, explanation: "The Chinese giant salamander is the largest species of amphibian." }, { question: "What is the primary diet of a frugivorous animal?", options: ["Plants", "Insects", "Fruits", "Meat"], correctIndex: 2, explanation: "Frugivorous animals primarily eat fruits." }, { question: "What is the largest species of fish?", options: ["Great White Shark", "Whale Shark", "Hammerhead Shark", "Tiger Shark"], correctIndex: 1, explanation: "The whale shark is the largest species of fish." }] }, anatomy: { name: "Human Anatomy", description: "Learn about the amazing human body", questions: [{ question: "What is the largest organ in the human body?", options: ["Heart", "Liver", "Skin", "Brain"], correctIndex: 2, explanation: "The skin is the body's largest organ, covering about 20 square feet in adults." }, { question: "How many bones are in the adult human body?", options: ["206", "186", "226", "246"], correctIndex: 0, explanation: "The adult human body has 206 bones. Babies are born with about 300 bones that fuse as they grow." }, { question: "What is the strongest muscle in the human body?", options: ["Biceps", "Heart", "Jaw muscles", "Gluteus maximus"], correctIndex: 2, explanation: "The masseter (jaw muscle) is the strongest based on its size and the force it can exert." }, { question: "What percentage of the human body is water?", options: ["50-60%", "60-70%", "70-80%", "80-90%"], correctIndex: 1, explanation: "The human body is composed of about 60-70% water, varying by age, gender, and body composition." }, { question: "Which part of the body produces insulin?", options: ["Liver", "Kidney", "Pancreas", "Gallbladder"], correctIndex: 2, explanation: "The pancreas produces insulin, which regulates blood sugar levels." }, { question: "What is the smallest bone in the human body?", options: ["Stapes", "Incus", "Malleus", "Humerus"], correctIndex: 0, explanation: "The stapes, located in the middle ear, is the smallest bone in the human body." }, { question: "What is the main function of red blood cells?", options: ["Fight infections", "Transport oxygen", "Clot blood", "Regulate temperature"], correctIndex: 1, explanation: "Red blood cells transport oxygen from the lungs to the rest of the body." }, { question: "What is the largest artery in the human body?", options: ["Aorta", "Carotid", "Femoral", "Pulmonary"], correctIndex: 0, explanation: "The aorta is the largest artery in the human body." }, { question: "What is the main function of the liver?", options: ["Produce insulin", "Filter blood", "Store calcium", "Regulate temperature"], correctIndex: 1, explanation: "The liver filters blood, detoxifies chemicals, and metabolizes drugs." }, { question: "What is the main function of the kidneys?", options: ["Produce insulin", "Filter blood", "Store calcium", "Regulate temperature"], correctIndex: 1, explanation: "The kidneys filter waste products from the blood and excrete them as urine." }, { question: "What is the main function of the lungs?", options: ["Produce insulin", "Filter blood", "Exchange oxygen and carbon dioxide", "Regulate temperature"], correctIndex: 2, explanation: "The lungs exchange oxygen and carbon dioxide between the air and the blood." }, { question: "What is the main function of the heart?", options: ["Produce insulin", "Pump blood", "Store calcium", "Regulate temperature"], correctIndex: 1, explanation: "The heart pumps blood throughout the body, supplying oxygen and nutrients to tissues." }, { question: "What is the main function of the brain?", options: ["Produce insulin", "Control body functions", "Store calcium", "Regulate temperature"], correctIndex: 1, explanation: "The brain controls body functions, processes sensory information, and coordinates movement." }, { question: "What is the main function of the stomach?", options: ["Produce insulin", "Digest food", "Store calcium", "Regulate temperature"], correctIndex: 1, explanation: "The stomach digests food by secreting acid and enzymes." }, { question: "What is the main function of the intestines?", options: ["Produce insulin", "Absorb nutrients", "Store calcium", "Regulate temperature"], correctIndex: 1, explanation: "The intestines absorb nutrients from digested food into the bloodstream." }, { question: "What is the main function of the pancreas?", options: ["Produce insulin", "Filter blood", "Store calcium", "Regulate temperature"], correctIndex: 0, explanation: "The pancreas produces insulin and other hormones that regulate blood sugar levels." }, { question: "What is the main function of the spleen?", options: ["Produce insulin", "Filter blood", "Store calcium", "Regulate temperature"], correctIndex: 1, explanation: "The spleen filters blood, recycles old red blood cells, and helps fight infections." }, { question: "What is the main function of the gallbladder?", options: ["Produce insulin", "Store bile", "Store calcium", "Regulate temperature"], correctIndex: 1, explanation: "The gallbladder stores bile produced by the liver, which helps digest fats." }, { question: "What is the main function of the thyroid gland?", options: ["Produce insulin", "Regulate metabolism", "Store calcium", "Regulate temperature"], correctIndex: 1, explanation: "The thyroid gland produces hormones that regulate metabolism, growth, and development." }, { question: "What is the main function of the adrenal glands?", options: ["Produce insulin", "Regulate metabolism", "Produce adrenaline", "Regulate temperature"], correctIndex: 2, explanation: "The adrenal glands produce hormones like adrenaline that help regulate metabolism and stress response." }] } }; // UI Elements var questionPanel = new QuestionPanel(); questionPanel.x = 2048 / 2; questionPanel.y = 2732 / 2 + 200; questionPanel.visible = false; var progressBar = new ProgressBar(); progressBar.x = 124; progressBar.y = 100; progressBar.visible = false; var badges = []; // Helper functions function getCategoryName(category) { return categoryData[category].name; } function selectCategory(category) { currentScreen = "gameplay"; storage.currentCategory = category; // Update UI visibility showGameplayScreen(); // Add back and quit buttons var backButton = new OptionButton("Back"); backButton.x = 2048 / 2 - 200; backButton.y = 2732 - 100; // Move to bottom of the page backButton.down = function (x, y, obj) { LK.getSound('buttonClick').play(); if (backButton.buttonShape) { backButton.buttonShape.alpha = 0.7; } }; backButton.up = function (x, y, obj) { if (backButton.buttonShape) { backButton.buttonShape.alpha = 1; } showCategoriesScreen(); }; game.addChild(backButton); var quitButton = new OptionButton("Quit"); quitButton.x = 2048 / 2 + 200; quitButton.y = 2732 - 100; // Move to bottom of the page quitButton.down = function (x, y, obj) { LK.getSound('buttonClick').play(); if (quitButton.buttonShape) { quitButton.buttonShape.alpha = 0.7; } }; quitButton.up = function (x, y, obj) { if (quitButton.buttonShape) { quitButton.buttonShape.alpha = 1; } LK.showGameOver(); // Use LK's built-in game over screen to quit }; game.addChild(quitButton); // Load questions questions = categoryData[category].questions; currentQuestionIndex = 0; // Show first question loadQuestion(currentQuestionIndex); // Update progress bar progressBar.updateProgress(currentQuestionIndex, questions.length); LK.playMusic('gameMusic'); } function showCategoriesScreen() { currentScreen = "categories"; // Hide gameplay elements questionPanel.visible = false; progressBar.visible = false; // Show category buttons for (var i = 0; i < categoryButtons.length; i++) { categoryButtons[i].visible = true; categoryButtons[i].updateProgress(storage.progress[categoryButtons[i].category]); } } function showGameplayScreen() { // Hide category buttons for (var i = 0; i < categoryButtons.length; i++) { categoryButtons[i].visible = false; } // Show gameplay elements questionPanel.visible = true; progressBar.visible = true; } function loadQuestion(index) { if (index < questions.length) { questionPanel.setQuestion(questions[index]); } else { completeCategoryProgress(); } } function loadNextQuestion() { currentQuestionIndex++; progressBar.updateProgress(currentQuestionIndex, questions.length); loadQuestion(currentQuestionIndex); } function checkAnswer(selectedOption) { var isCorrect = selectedOption.isCorrect; if (isCorrect) { LK.getSound('correct').play(); LK.setScore(LK.getScore() + 10); } else { LK.getSound('incorrect').play(); } questionPanel.showFeedback(isCorrect, questions[currentQuestionIndex].explanation); // Update progress if (isCorrect) { var categoryProgress = storage.progress[storage.currentCategory]; var newProgress = (currentQuestionIndex + 1) / questions.length; if (newProgress > categoryProgress) { storage.progress[storage.currentCategory] = newProgress; } } } function completeCategoryProgress() { // Play level complete sound if all questions are completed if (storage.progress[storage.currentCategory] >= 1) { LK.getSound('levelComplete').play(); } showCategoriesScreen(); } // Initialize game function initializeGame() { // Create category selection screen var spaceButton = new CategoryButton('space', "SPACE", ""); spaceButton.x = 2048 / 2 - 550; spaceButton.y = 2732 / 2; game.addChild(spaceButton); categoryButtons.push(spaceButton); var wildlifeButton = new CategoryButton('wildlife', "WILDLIFE", ""); wildlifeButton.x = 2048 / 2; wildlifeButton.y = 2732 / 2; game.addChild(wildlifeButton); categoryButtons.push(wildlifeButton); var anatomyButton = new CategoryButton('anatomy', "ANATOMY", ""); anatomyButton.x = 2048 / 2 + 550; anatomyButton.y = 2732 / 2; game.addChild(anatomyButton); categoryButtons.push(anatomyButton); // Create title var titleText = new Text2("SCIENCE EXPLORER", { size: 180, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.x = 2048 / 2; titleText.y = 400; game.addChild(titleText); var subtitleText = new Text2("Choose a topic to explore", { size: 50, fill: 0xFFFFFF }); subtitleText.anchor.set(0.5, 0.5); subtitleText.x = 2048 / 2; subtitleText.y = 600; game.addChild(subtitleText); // Create score display var scoreText = new Text2("Score: 0", { size: 50, fill: 0x101010 }); scoreText.anchor.set(1, 0); LK.gui.topRight.addChild(scoreText); // Add quit button var quitButton = new OptionButton("Quit"); quitButton.x = 2048 / 2; quitButton.y = 2732 / 2 + 400; quitButton.down = function (x, y, obj) { LK.getSound('buttonClick').play(); if (quitButton.buttonShape) { quitButton.buttonShape.alpha = 0.7; } }; quitButton.up = function (x, y, obj) { if (quitButton.buttonShape) { quitButton.buttonShape.alpha = 1; } LK.showGameOver(); // Use LK's built-in game over screen to quit }; game.addChild(quitButton); // Add gameplay elements game.addChild(questionPanel); game.addChild(progressBar); // Update category buttons with saved progress for (var i = 0; i < categoryButtons.length; i++) { categoryButtons[i].updateProgress(storage.progress[categoryButtons[i].category]); } // Update UI based on initial screen if (currentScreen === "categories") { showCategoriesScreen(); } else { showGameplayScreen(); } // Update score display LK.setScore(0); } initializeGame(); // Game update loop game.update = function () { // Update score display var scoreDisplay = LK.gui.topRight.children[0]; if (scoreDisplay) { scoreDisplay.setText("Score: " + LK.getScore()); } }; LK.playMusic('gameMusic');
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
currentCategory: "space",
progress: {
space: 0,
wildlife: 0,
anatomy: 0
},
currentLevel: 1,
highestLevel: 1
});
/****
* Classes
****/
var CategoryButton = Container.expand(function (category, title, description) {
var self = Container.call(this);
var buttonShape = self.attachAsset(category + 'Theme', {
anchorX: 0.5,
anchorY: 0.5
});
var titleText = new Text2(title, {
size: 80,
fill: 0x101010
});
titleText.anchor.set(0.5, 0);
titleText.y = -80;
self.addChild(titleText);
var descText = new Text2(description, {
size: 30,
fill: 0x101010
});
descText.anchor.set(0.5, 0);
descText.y = 10;
descText.wordWrap = true;
descText.wordWrapWidth = 450;
self.addChild(descText);
var progressLabel = new Text2("Progress: 0%", {
size: 40,
fill: 0x101010
});
progressLabel.anchor.set(0.5, 0);
progressLabel.y = 80;
self.addChild(progressLabel);
self.category = category;
self.updateProgress = function (progress) {
progressLabel.setText("Progress: " + Math.floor(progress * 100) + "%");
};
self.down = function (x, y, obj) {
LK.getSound('buttonClick').play();
buttonShape.alpha = 0.7;
};
self.up = function (x, y, obj) {
buttonShape.alpha = 1;
selectCategory(self.category);
};
return self;
});
var OptionButton = Container.expand(function (text) {
var self = Container.call(this);
var buttonShape = self.attachAsset('optionButton', {
anchorX: 0.5,
anchorY: 0.5
});
var optionText = new Text2(text, {
size: 50,
fill: 0x101010
});
optionText.anchor.set(0.5, 0.5);
self.addChild(optionText);
self.isCorrect = false;
self.setText = function (text) {
optionText.setText(text);
};
self.down = function (x, y, obj) {
LK.getSound('buttonClick').play();
buttonShape.alpha = 0.9;
};
self.up = function (x, y, obj) {
buttonShape.alpha = 1;
checkAnswer(self);
};
self.setEnabled = function (enabled) {
self.interactive = enabled;
buttonShape.alpha = enabled ? 1 : 0.5;
};
return self;
});
var ProgressBar = Container.expand(function () {
var self = Container.call(this);
var barBackground = self.attachAsset('progressBar', {
anchorX: 0,
anchorY: 0.5
});
var barFill = self.attachAsset('progressFill', {
anchorX: 0,
anchorY: 0.5
});
var levelText = new Text2("Level 1", {
size: 40,
fill: 0x101010
});
levelText.anchor.set(0.5, 0.5);
levelText.x = barBackground.width / 2;
self.addChild(levelText);
self.updateProgress = function (current, total) {
var percentage = current / total;
var targetWidth = barBackground.width * percentage;
tween(barFill, {
width: targetWidth
}, {
duration: 500,
easing: tween.easeOut
});
levelText.setText("Level " + storage.currentLevel);
};
return self;
});
var QuestionPanel = Container.expand(function () {
var self = Container.call(this);
var panel = self.attachAsset('questionPanel', {
anchorX: 0.5,
anchorY: 0.5
});
var questionText = new Text2("", {
size: 50 * (1 + currentQuestionIndex * 0.1),
// Increase font size by 10% for each question
fill: 0x101010
});
questionText.anchor.set(0.5, 0);
questionText.y = -250;
questionText.wordWrap = true;
questionText.wordWrapWidth = 1700;
self.addChild(questionText);
self.options = [];
for (var i = 0; i < 4; i++) {
var option = new OptionButton("");
option.x = i % 2 === 0 ? -400 : 400;
option.y = i < 2 ? 0 : 150;
self.options.push(option);
self.addChild(option);
}
var feedbackIcon = self.attachAsset({
anchorX: 0.5,
anchorY: 0.5
}, {});
feedbackIcon.visible = false;
var feedbackText = new Text2("", {
size: 45
});
feedbackText.anchor.set(0.5, 0.5);
feedbackText.y = 350;
feedbackText.wordWrap = true;
feedbackText.wordWrapWidth = 1700;
self.addChild(feedbackText);
var nextButton = new OptionButton("Next Question");
nextButton.y = 850;
nextButton.visible = false;
self.addChild(nextButton);
nextButton.up = function () {
if (nextButton.buttonShape) {
nextButton.buttonShape.alpha = 1;
}
loadNextQuestion();
};
self.setQuestion = function (question) {
questionText.setText(question.question);
for (var i = 0; i < self.options.length; i++) {
self.options[i].setText(question.options[i]);
self.options[i].isCorrect = i === question.correctIndex;
self.options[i].setEnabled(true);
}
feedbackIcon.visible = false;
feedbackText.setText("\n\n\n\n\n\n\n\n\n\n");
nextButton.visible = false;
};
self.showFeedback = function (correct, explanation) {
feedbackIcon.visible = true;
if (correct) {
feedbackIcon.texture = LK.getAsset({}, {}).texture;
feedbackText.setText("Correct! " + explanation);
feedbackText.setStyle({
fill: 0x101010,
size: 45 // Further decrease font size for correct feedback
});
// Add congratulation message
var congratsText = new Text2("Congratulations!", {
size: 90,
fill: 0xFFD700
});
congratsText.anchor.set(0.5, 0.5);
congratsText.x = 0;
congratsText.y = -400;
self.addChild(congratsText);
// Animate paper blast effect
var paperBlast = LK.getAsset('correctFeedback', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0
});
self.addChild(paperBlast);
tween(paperBlast, {
scaleX: 3,
scaleY: 3,
alpha: 0
}, {
duration: 1000,
easing: tween.easeOut,
onComplete: function onComplete() {
self.removeChild(paperBlast);
self.removeChild(congratsText);
}
});
nextButton.up = function () {
if (nextButton.buttonShape) {
nextButton.buttonShape.alpha = 1;
}
self.removeChild(congratsText); // Ensure congratulation message is removed when next button is clicked
loadNextQuestion();
};
} else {
feedbackIcon.texture = LK.getAsset('incorrectFeedback', {}).texture;
var sadEmoji = new Text2("😢", {
size: 80,
fill: 0x101010
});
sadEmoji.anchor.set(0.5, 0.5);
sadEmoji.x = -1024; // Start off-screen to the left
sadEmoji.y = 350;
self.addChild(sadEmoji);
// Animate the emoji to walk across the screen
tween(sadEmoji, {
x: 1024 // Move to off-screen to the right
}, {
duration: 3000,
// 3 seconds to walk across
easing: tween.easeInOut,
onComplete: function onComplete() {
self.removeChild(sadEmoji); // Remove emoji after animation
}
});
nextButton.up = function () {
if (nextButton.buttonShape) {
nextButton.buttonShape.alpha = 1;
}
self.removeChild(sadEmoji); // Ensure emoji is removed when next button is clicked
loadNextQuestion();
};
feedbackText.setText("Incorrect. " + explanation);
feedbackText.setStyle({
fill: 0x101010,
fontSize: 45 // Further decrease font size for incorrect feedback
});
}
nextButton.visible = true;
// Disable all option buttons
for (var i = 0; i < self.options.length; i++) {
self.options[i].setEnabled(false);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game state variables
// LK.init.shape('correctFeedback', {width:100, height:100, color:0x34c759, shape:'ellipse'})
var currentScreen = "categories"; // categories, gameplay
var questions = [];
var currentQuestionIndex = 0;
var categoryButtons = [];
// Category and question data
var categoryData = {
space: {
name: "Space",
description: "Explore planets, stars, and galaxies",
questions: [{
question: "Which planet is known as the Red Planet?",
options: ["Venus", "Mars", "Jupiter", "Mercury"],
correctIndex: 1,
explanation: "Mars is called the Red Planet because of the reddish iron oxide on its surface."
}, {
question: "How many planets are in our solar system?",
options: ["7", "8", "9", "10"],
correctIndex: 1,
explanation: "There are 8 planets: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, and Neptune."
}, {
question: "What is the largest planet in our solar system?",
options: ["Earth", "Saturn", "Jupiter", "Neptune"],
correctIndex: 2,
explanation: "Jupiter is the largest planet in our solar system."
}, {
question: "What is the name of the galaxy we live in?",
options: ["Andromeda", "Milky Way", "Triangulum", "Sombrero"],
correctIndex: 1,
explanation: "We live in the Milky Way galaxy, which contains billions of stars."
}, {
question: "What causes the phases of the Moon?",
options: ["Earth's shadow", "Moon's rotation", "Moon's orbit and sunlight", "Solar flares"],
correctIndex: 2,
explanation: "The Moon's phases are caused by its position relative to Earth and the Sun as it orbits Earth."
}, {
question: "What is the closest star to Earth?",
options: ["Alpha Centauri", "Proxima Centauri", "Sirius", "Betelgeuse"],
correctIndex: 1,
explanation: "Proxima Centauri is the closest known star to the Sun."
}, {
question: "What is the smallest planet in our solar system?",
options: ["Mercury", "Mars", "Venus", "Earth"],
correctIndex: 0,
explanation: "Mercury is the smallest planet in our solar system."
}, {
question: "What is the hottest planet in our solar system?",
options: ["Mercury", "Venus", "Mars", "Jupiter"],
correctIndex: 1,
explanation: "Venus is the hottest planet due to its thick, toxic atmosphere."
}, {
question: "What is the main component of the Sun?",
options: ["Helium", "Oxygen", "Hydrogen", "Carbon"],
correctIndex: 2,
explanation: "The Sun is primarily composed of hydrogen."
}, {
question: "What is the name of the first artificial satellite sent into space?",
options: ["Sputnik 1", "Explorer 1", "Vanguard 1", "Luna 1"],
correctIndex: 0,
explanation: "Sputnik 1 was the first artificial satellite launched by the Soviet Union in 1957."
}, {
question: "What is the term for a rocky object that orbits the Sun?",
options: ["Comet", "Asteroid", "Meteor", "Meteorite"],
correctIndex: 1,
explanation: "Asteroids are rocky objects that orbit the Sun."
}, {
question: "What is the name of the largest volcano in the solar system?",
options: ["Mount Everest", "Olympus Mons", "Mauna Kea", "Mount Etna"],
correctIndex: 1,
explanation: "Olympus Mons on Mars is the largest volcano in the solar system."
}, {
question: "What is the term for a star that suddenly increases in brightness?",
options: ["Supernova", "Nova", "Pulsar", "Quasar"],
correctIndex: 1,
explanation: "A nova is a star that suddenly increases in brightness."
}, {
question: "What is the name of the first human to travel into space?",
options: ["Neil Armstrong", "Yuri Gagarin", "Buzz Aldrin", "John Glenn"],
correctIndex: 1,
explanation: "Yuri Gagarin was the first human to travel into space in 1961."
}, {
question: "What is the term for the path an object takes as it moves around another object in space?",
options: ["Orbit", "Trajectory", "Course", "Route"],
correctIndex: 0,
explanation: "An orbit is the path an object takes as it moves around another object in space."
}, {
question: "What is the name of the first American astronaut to orbit Earth?",
options: ["John Glenn", "Alan Shepard", "Neil Armstrong", "Buzz Aldrin"],
correctIndex: 0,
explanation: "John Glenn was the first American astronaut to orbit Earth in 1962."
}, {
question: "What is the term for a small body of ice, rock, and cosmic dust that follows an elliptical orbit around the Sun?",
options: ["Asteroid", "Comet", "Meteor", "Meteorite"],
correctIndex: 1,
explanation: "A comet is a small body of ice, rock, and cosmic dust that follows an elliptical orbit around the Sun."
}, {
question: "What is the name of the first spacecraft to land on the Moon?",
options: ["Apollo 11", "Luna 2", "Viking 1", "Mariner 4"],
correctIndex: 0,
explanation: "Apollo 11 was the first spacecraft to land on the Moon in 1969."
}, {
question: "What is the term for the boundary around a black hole beyond which no light or other radiation can escape?",
options: ["Event Horizon", "Singularity", "Accretion Disk", "Photon Sphere"],
correctIndex: 0,
explanation: "The event horizon is the boundary around a black hole beyond which no light or other radiation can escape."
}, {
question: "What is the name of the largest moon of Saturn?",
options: ["Titan", "Europa", "Ganymede", "Callisto"],
correctIndex: 0,
explanation: "Titan is the largest moon of Saturn."
}, {
question: "What is the term for the apparent shift in position of an object when viewed from different angles?",
options: ["Parallax", "Refraction", "Reflection", "Diffraction"],
correctIndex: 0,
explanation: "Parallax is the apparent shift in position of an object when viewed from different angles."
}, {
question: "What is the name of the first space station launched into orbit?",
options: ["Skylab", "Mir", "Salyut 1", "International Space Station"],
correctIndex: 2,
explanation: "Salyut 1 was the first space station launched into orbit by the Soviet Union in 1971."
}, {
question: "What is the term for the point in an orbit closest to the Earth?",
options: ["Apogee", "Perigee", "Zenith", "Nadir"],
correctIndex: 1,
explanation: "Perigee is the point in an orbit closest to the Earth."
}]
},
wildlife: {
name: "Wildlife",
description: "Discover amazing animals and their habitats",
questions: [{
question: "Which is the fastest land animal?",
options: ["Lion", "Cheetah", "Gazelle", "Elephant"],
correctIndex: 1,
explanation: "Cheetahs can run up to 70 mph (112 km/h) for short bursts."
}, {
question: "What do koalas mainly eat?",
options: ["Bamboo", "Eucalyptus leaves", "Fruits", "Insects"],
correctIndex: 1,
explanation: "Koalas primarily eat eucalyptus leaves, which are toxic to many other animals."
}, {
question: "Which animal is known as the 'King of the Jungle'?",
options: ["Tiger", "Lion", "Gorilla", "Panther"],
correctIndex: 1,
explanation: "Lions are called 'King of the Jungle' despite living in savannas, not jungles."
}, {
question: "How many hearts does an octopus have?",
options: ["1", "2", "3", "4"],
correctIndex: 2,
explanation: "Octopuses have three hearts: two pump blood through the gills and one pumps it through the body."
}, {
question: "Which bird can fly backward?",
options: ["Eagle", "Sparrow", "Hummingbird", "Penguin"],
correctIndex: 2,
explanation: "Hummingbirds are the only birds that can fly backward, upside down, and hover in mid-air."
}, {
question: "What is the largest land animal?",
options: ["Elephant", "Giraffe", "Hippopotamus", "Rhinoceros"],
correctIndex: 0,
explanation: "The African elephant is the largest land animal."
}, {
question: "What is the only mammal capable of true flight?",
options: ["Bat", "Flying Squirrel", "Sugar Glider", "Flying Lemur"],
correctIndex: 0,
explanation: "Bats are the only mammals capable of true flight."
}, {
question: "What is the largest species of shark?",
options: ["Great White Shark", "Hammerhead Shark", "Whale Shark", "Tiger Shark"],
correctIndex: 2,
explanation: "The whale shark is the largest species of shark."
}, {
question: "What is the primary diet of a panda?",
options: ["Bamboo", "Insects", "Fish", "Fruits"],
correctIndex: 0,
explanation: "Pandas primarily eat bamboo."
}, {
question: "What is the fastest bird in the world?",
options: ["Peregrine Falcon", "Eagle", "Hawk", "Owl"],
correctIndex: 0,
explanation: "The peregrine falcon is the fastest bird, reaching speeds over 240 mph (386 km/h) during dives."
}, {
question: "What is the largest species of cat?",
options: ["Lion", "Tiger", "Cheetah", "Leopard"],
correctIndex: 1,
explanation: "The tiger is the largest species of cat."
}, {
question: "What is the only bird that can fly both forwards and backwards?",
options: ["Hummingbird", "Sparrow", "Eagle", "Parrot"],
correctIndex: 0,
explanation: "Hummingbirds are the only birds that can fly both forwards and backwards."
}, {
question: "What is the largest species of bear?",
options: ["Polar Bear", "Grizzly Bear", "Black Bear", "Panda Bear"],
correctIndex: 0,
explanation: "The polar bear is the largest species of bear."
}, {
question: "What is the primary diet of a carnivorous animal?",
options: ["Plants", "Insects", "Meat", "Fruits"],
correctIndex: 2,
explanation: "Carnivorous animals primarily eat meat."
}, {
question: "What is the largest species of primate?",
options: ["Gorilla", "Chimpanzee", "Orangutan", "Gibbon"],
correctIndex: 0,
explanation: "The gorilla is the largest species of primate."
}, {
question: "What is the primary diet of a herbivorous animal?",
options: ["Plants", "Insects", "Meat", "Fruits"],
correctIndex: 0,
explanation: "Herbivorous animals primarily eat plants."
}, {
question: "What is the largest species of reptile?",
options: ["Komodo Dragon", "Crocodile", "Alligator", "Iguana"],
correctIndex: 1,
explanation: "The saltwater crocodile is the largest species of reptile."
}, {
question: "What is the primary diet of an omnivorous animal?",
options: ["Plants", "Insects", "Meat and Plants", "Fruits"],
correctIndex: 2,
explanation: "Omnivorous animals eat both meat and plants."
}, {
question: "What is the largest species of amphibian?",
options: ["Frog", "Toad", "Salamander", "Newt"],
correctIndex: 2,
explanation: "The Chinese giant salamander is the largest species of amphibian."
}, {
question: "What is the primary diet of a frugivorous animal?",
options: ["Plants", "Insects", "Fruits", "Meat"],
correctIndex: 2,
explanation: "Frugivorous animals primarily eat fruits."
}, {
question: "What is the largest species of fish?",
options: ["Great White Shark", "Whale Shark", "Hammerhead Shark", "Tiger Shark"],
correctIndex: 1,
explanation: "The whale shark is the largest species of fish."
}]
},
anatomy: {
name: "Human Anatomy",
description: "Learn about the amazing human body",
questions: [{
question: "What is the largest organ in the human body?",
options: ["Heart", "Liver", "Skin", "Brain"],
correctIndex: 2,
explanation: "The skin is the body's largest organ, covering about 20 square feet in adults."
}, {
question: "How many bones are in the adult human body?",
options: ["206", "186", "226", "246"],
correctIndex: 0,
explanation: "The adult human body has 206 bones. Babies are born with about 300 bones that fuse as they grow."
}, {
question: "What is the strongest muscle in the human body?",
options: ["Biceps", "Heart", "Jaw muscles", "Gluteus maximus"],
correctIndex: 2,
explanation: "The masseter (jaw muscle) is the strongest based on its size and the force it can exert."
}, {
question: "What percentage of the human body is water?",
options: ["50-60%", "60-70%", "70-80%", "80-90%"],
correctIndex: 1,
explanation: "The human body is composed of about 60-70% water, varying by age, gender, and body composition."
}, {
question: "Which part of the body produces insulin?",
options: ["Liver", "Kidney", "Pancreas", "Gallbladder"],
correctIndex: 2,
explanation: "The pancreas produces insulin, which regulates blood sugar levels."
}, {
question: "What is the smallest bone in the human body?",
options: ["Stapes", "Incus", "Malleus", "Humerus"],
correctIndex: 0,
explanation: "The stapes, located in the middle ear, is the smallest bone in the human body."
}, {
question: "What is the main function of red blood cells?",
options: ["Fight infections", "Transport oxygen", "Clot blood", "Regulate temperature"],
correctIndex: 1,
explanation: "Red blood cells transport oxygen from the lungs to the rest of the body."
}, {
question: "What is the largest artery in the human body?",
options: ["Aorta", "Carotid", "Femoral", "Pulmonary"],
correctIndex: 0,
explanation: "The aorta is the largest artery in the human body."
}, {
question: "What is the main function of the liver?",
options: ["Produce insulin", "Filter blood", "Store calcium", "Regulate temperature"],
correctIndex: 1,
explanation: "The liver filters blood, detoxifies chemicals, and metabolizes drugs."
}, {
question: "What is the main function of the kidneys?",
options: ["Produce insulin", "Filter blood", "Store calcium", "Regulate temperature"],
correctIndex: 1,
explanation: "The kidneys filter waste products from the blood and excrete them as urine."
}, {
question: "What is the main function of the lungs?",
options: ["Produce insulin", "Filter blood", "Exchange oxygen and carbon dioxide", "Regulate temperature"],
correctIndex: 2,
explanation: "The lungs exchange oxygen and carbon dioxide between the air and the blood."
}, {
question: "What is the main function of the heart?",
options: ["Produce insulin", "Pump blood", "Store calcium", "Regulate temperature"],
correctIndex: 1,
explanation: "The heart pumps blood throughout the body, supplying oxygen and nutrients to tissues."
}, {
question: "What is the main function of the brain?",
options: ["Produce insulin", "Control body functions", "Store calcium", "Regulate temperature"],
correctIndex: 1,
explanation: "The brain controls body functions, processes sensory information, and coordinates movement."
}, {
question: "What is the main function of the stomach?",
options: ["Produce insulin", "Digest food", "Store calcium", "Regulate temperature"],
correctIndex: 1,
explanation: "The stomach digests food by secreting acid and enzymes."
}, {
question: "What is the main function of the intestines?",
options: ["Produce insulin", "Absorb nutrients", "Store calcium", "Regulate temperature"],
correctIndex: 1,
explanation: "The intestines absorb nutrients from digested food into the bloodstream."
}, {
question: "What is the main function of the pancreas?",
options: ["Produce insulin", "Filter blood", "Store calcium", "Regulate temperature"],
correctIndex: 0,
explanation: "The pancreas produces insulin and other hormones that regulate blood sugar levels."
}, {
question: "What is the main function of the spleen?",
options: ["Produce insulin", "Filter blood", "Store calcium", "Regulate temperature"],
correctIndex: 1,
explanation: "The spleen filters blood, recycles old red blood cells, and helps fight infections."
}, {
question: "What is the main function of the gallbladder?",
options: ["Produce insulin", "Store bile", "Store calcium", "Regulate temperature"],
correctIndex: 1,
explanation: "The gallbladder stores bile produced by the liver, which helps digest fats."
}, {
question: "What is the main function of the thyroid gland?",
options: ["Produce insulin", "Regulate metabolism", "Store calcium", "Regulate temperature"],
correctIndex: 1,
explanation: "The thyroid gland produces hormones that regulate metabolism, growth, and development."
}, {
question: "What is the main function of the adrenal glands?",
options: ["Produce insulin", "Regulate metabolism", "Produce adrenaline", "Regulate temperature"],
correctIndex: 2,
explanation: "The adrenal glands produce hormones like adrenaline that help regulate metabolism and stress response."
}]
}
};
// UI Elements
var questionPanel = new QuestionPanel();
questionPanel.x = 2048 / 2;
questionPanel.y = 2732 / 2 + 200;
questionPanel.visible = false;
var progressBar = new ProgressBar();
progressBar.x = 124;
progressBar.y = 100;
progressBar.visible = false;
var badges = [];
// Helper functions
function getCategoryName(category) {
return categoryData[category].name;
}
function selectCategory(category) {
currentScreen = "gameplay";
storage.currentCategory = category;
// Update UI visibility
showGameplayScreen();
// Add back and quit buttons
var backButton = new OptionButton("Back");
backButton.x = 2048 / 2 - 200;
backButton.y = 2732 - 100; // Move to bottom of the page
backButton.down = function (x, y, obj) {
LK.getSound('buttonClick').play();
if (backButton.buttonShape) {
backButton.buttonShape.alpha = 0.7;
}
};
backButton.up = function (x, y, obj) {
if (backButton.buttonShape) {
backButton.buttonShape.alpha = 1;
}
showCategoriesScreen();
};
game.addChild(backButton);
var quitButton = new OptionButton("Quit");
quitButton.x = 2048 / 2 + 200;
quitButton.y = 2732 - 100; // Move to bottom of the page
quitButton.down = function (x, y, obj) {
LK.getSound('buttonClick').play();
if (quitButton.buttonShape) {
quitButton.buttonShape.alpha = 0.7;
}
};
quitButton.up = function (x, y, obj) {
if (quitButton.buttonShape) {
quitButton.buttonShape.alpha = 1;
}
LK.showGameOver(); // Use LK's built-in game over screen to quit
};
game.addChild(quitButton);
// Load questions
questions = categoryData[category].questions;
currentQuestionIndex = 0;
// Show first question
loadQuestion(currentQuestionIndex);
// Update progress bar
progressBar.updateProgress(currentQuestionIndex, questions.length);
LK.playMusic('gameMusic');
}
function showCategoriesScreen() {
currentScreen = "categories";
// Hide gameplay elements
questionPanel.visible = false;
progressBar.visible = false;
// Show category buttons
for (var i = 0; i < categoryButtons.length; i++) {
categoryButtons[i].visible = true;
categoryButtons[i].updateProgress(storage.progress[categoryButtons[i].category]);
}
}
function showGameplayScreen() {
// Hide category buttons
for (var i = 0; i < categoryButtons.length; i++) {
categoryButtons[i].visible = false;
}
// Show gameplay elements
questionPanel.visible = true;
progressBar.visible = true;
}
function loadQuestion(index) {
if (index < questions.length) {
questionPanel.setQuestion(questions[index]);
} else {
completeCategoryProgress();
}
}
function loadNextQuestion() {
currentQuestionIndex++;
progressBar.updateProgress(currentQuestionIndex, questions.length);
loadQuestion(currentQuestionIndex);
}
function checkAnswer(selectedOption) {
var isCorrect = selectedOption.isCorrect;
if (isCorrect) {
LK.getSound('correct').play();
LK.setScore(LK.getScore() + 10);
} else {
LK.getSound('incorrect').play();
}
questionPanel.showFeedback(isCorrect, questions[currentQuestionIndex].explanation);
// Update progress
if (isCorrect) {
var categoryProgress = storage.progress[storage.currentCategory];
var newProgress = (currentQuestionIndex + 1) / questions.length;
if (newProgress > categoryProgress) {
storage.progress[storage.currentCategory] = newProgress;
}
}
}
function completeCategoryProgress() {
// Play level complete sound if all questions are completed
if (storage.progress[storage.currentCategory] >= 1) {
LK.getSound('levelComplete').play();
}
showCategoriesScreen();
}
// Initialize game
function initializeGame() {
// Create category selection screen
var spaceButton = new CategoryButton('space', "SPACE", "");
spaceButton.x = 2048 / 2 - 550;
spaceButton.y = 2732 / 2;
game.addChild(spaceButton);
categoryButtons.push(spaceButton);
var wildlifeButton = new CategoryButton('wildlife', "WILDLIFE", "");
wildlifeButton.x = 2048 / 2;
wildlifeButton.y = 2732 / 2;
game.addChild(wildlifeButton);
categoryButtons.push(wildlifeButton);
var anatomyButton = new CategoryButton('anatomy', "ANATOMY", "");
anatomyButton.x = 2048 / 2 + 550;
anatomyButton.y = 2732 / 2;
game.addChild(anatomyButton);
categoryButtons.push(anatomyButton);
// Create title
var titleText = new Text2("SCIENCE EXPLORER", {
size: 180,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 400;
game.addChild(titleText);
var subtitleText = new Text2("Choose a topic to explore", {
size: 50,
fill: 0xFFFFFF
});
subtitleText.anchor.set(0.5, 0.5);
subtitleText.x = 2048 / 2;
subtitleText.y = 600;
game.addChild(subtitleText);
// Create score display
var scoreText = new Text2("Score: 0", {
size: 50,
fill: 0x101010
});
scoreText.anchor.set(1, 0);
LK.gui.topRight.addChild(scoreText);
// Add quit button
var quitButton = new OptionButton("Quit");
quitButton.x = 2048 / 2;
quitButton.y = 2732 / 2 + 400;
quitButton.down = function (x, y, obj) {
LK.getSound('buttonClick').play();
if (quitButton.buttonShape) {
quitButton.buttonShape.alpha = 0.7;
}
};
quitButton.up = function (x, y, obj) {
if (quitButton.buttonShape) {
quitButton.buttonShape.alpha = 1;
}
LK.showGameOver(); // Use LK's built-in game over screen to quit
};
game.addChild(quitButton);
// Add gameplay elements
game.addChild(questionPanel);
game.addChild(progressBar);
// Update category buttons with saved progress
for (var i = 0; i < categoryButtons.length; i++) {
categoryButtons[i].updateProgress(storage.progress[categoryButtons[i].category]);
}
// Update UI based on initial screen
if (currentScreen === "categories") {
showCategoriesScreen();
} else {
showGameplayScreen();
}
// Update score display
LK.setScore(0);
}
initializeGame();
// Game update loop
game.update = function () {
// Update score display
var scoreDisplay = LK.gui.topRight.children[0];
if (scoreDisplay) {
scoreDisplay.setText("Score: " + LK.getScore());
}
};
LK.playMusic('gameMusic');