<!-- wp:html --> <!DOCTYPE html> <html lang="hi"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>MCQ Quiz</title> <style> /* Basic CSS resets */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Arial, sans-serif; background-color: #f1f8e9; color: #33691e; } .content-container { background-color: #dcedc8; padding: 5px; border-radius: 5px; max-width: auto; margin: 20px auto; box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); position: relative; } .header { background-color: #7cb342; color: #ffffff; text-align: center; padding: 20px; border-radius: 10px; margin-bottom: 20px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); position: relative; } .header h1 { margin: 0; font-size: 28px; } /* Hamburger Menu Icon */ .hamburger { position: absolute; top: 8px; left: 8px; z-index: 1000; width: 20px; height: 15px; display: flex; flex-direction: column; justify-content: space-between; cursor: pointer; } .hamburger-line { height: 3px; background-color: #fff; border-radius: 2px; } /* Sidebar (Question Nav) */ #questionNavOverlay { position: fixed; top: 0; left: -250px; /* hidden by default */ width: 250px; height: 100%; background-color: #fff; transition: left 0.3s ease-in-out; z-index: 2000; box-shadow: 2px 0 6px rgba(0,0,0,0.3); padding: 20px; overflow-y: auto; } #questionNavOverlay.show { left: 0; /* slide in */ } #questionNavTitle { margin-bottom: 10px; font-weight: bold; font-size: 1.1rem; } .question-nav { display: flex; flex-wrap: wrap; gap: 5px; } .circle-number { width: 30px; height: 30px; border-radius: 50%; background-color: #ccc; color: #000; display: flex; justify-content: center; align-items: center; cursor: pointer; user-select: none; /* Prevent text selection */ transition: background-color 0.2s; } .circle-number:hover { background-color: #aaa; } .circle-number.active { background-color: #4CAF50; color: #fff; } /* Quiz Container */ .quiz-container { background-color: #fff; border-radius: 10px; padding: 5px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); max-width: auto; width: 100%; margin: 0 auto; text-align: center; position: relative; } .question-counter { font-weight: bold; padding: 5px 10px; border-radius: 5px; background-color: #d9edf7; position: absolute; top: 10px; left: 10px; } /* Timer display */ .timer { font-weight: bold; padding: 5px 10px; border-radius: 5px; background-color: #ffcccb; position: absolute; top: 10px; right: 10px; } .question { font-size: 1.2rem; margin-top: 40px; margin-bottom: 20px; text-align: left; } .choices { display: flex; flex-direction: column; gap: 10px; } .choice { padding: 10px; background-color: #f0f0f0; border: 1px solid #ddd; border-radius: 5px; cursor: pointer; transition: background-color 0.3s, box-shadow 0.3s; } .choice:hover { background-color: #e0e0e0; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .choice.selected { background-color: #28a745; /* More vivid green */ color: #fff; } .choice.correct { background-color: #28a745; /* More vivid green */ border-color: #28a745; color: #fff; } .choice.incorrect { background-color: #dc3545; /* More vivid red */ border-color: #dc3545; color: #fff; } .choice.disabled { cursor: not-allowed; pointer-events: none; opacity: 0.6; } .explanation { margin-top: 20px; text-align: left; background-color: #e7f3fe; padding: 15px; border-left: 5px solid #2196F3; border-radius: 5px; } .buttons { display: flex; justify-content: center; gap: 10px; margin-top: 20px; flex-wrap: wrap; } .btn { flex: 1 1 auto; padding: 8px 12px; background-color: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 0.9rem; text-align: center; min-width: 100px; max-width: 150px; transition: none; } .btn.disabled { background-color: #cccccc; cursor: not-allowed; } .hidden { display: none; } /* Result Section */ #resultContent { text-align: center; margin-top: 20px; } .congrats { font-size: 1.5rem; color: #4CAF50; } .sad { font-size: 1.5rem; color: #d32f2f; } /* Popup Message (Optional) */ #popupMessage { position: fixed; top: 20px; left: 50%; transform: translateX(-50%); color: white; padding: 10px 20px; border-radius: 5px; font-size: 1rem; z-index: 5000; display: none; } #popupMessage.show { display: block; } #popupMessage.correct { background-color: #28a745; } #popupMessage.incorrect { background-color: #dc3545; } </style> </head> <body> <div class="content-container"> <div class="header"> <!-- Hamburger menu button --> <div class="hamburger" id="hamburgerBtn"> <div class="hamburger-line"></div> <div class="hamburger-line"></div> <div class="hamburger-line"></div> </div> <h1>MCQs Quiz</h1> </div> <!-- Sidebar (Question Nav) --> <div id="questionNavOverlay"> <div id="questionNavTitle">Questions</div> <div class="question-nav" id="questionNav"></div> </div> <!-- Quiz Container --> <div class="quiz-container" id="quizContent"> <div class="question-counter" id="questionCounter">1/3</div> <!-- Timer display here --> <div class="timer" id="timer">Time: 00:00</div> <div class="question" id="question">Loading question...</div> <div class="choices" id="choices"></div> <!-- Explanation and feedback --> <div class="explanation hidden" id="explanation"></div> <!-- Buttons for navigation and submission --> <div class="buttons"> <button class="btn" id="prevButton">Previous</button> <button class="btn" id="submitAnswerButton">Submit Answer</button> <button class="btn hidden" id="nextButton">Next</button> </div> </div> <!-- Result Section --> <div id="resultContent" class="hidden"> <h2>Quiz Completed</h2> <div id="resultMessage"></div> <p id="scoreMessage"></p> </div> </div> <!-- Optional Popup Message --> <div id="popupMessage" class="hidden"></div> <script> /***** JavaScript Code *****/ // Quiz data (sample) const quizData = [ { "question": "ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के चार मुख्य सिद्धांत कौन से हैं?", "options": [ "इनहेरिटेंस, पॉलीमॉर्फिज़्म, एब्सट्रैक्शन, एनकैप्सुलेशन", "कन्ट्रोल स्ट्रक्चर, डेटा स्ट्रक्चर, एल्गोरिदम, इनहेरिटेंस", "क्लास, ऑब्जेक्ट, फंक्शन, मॉड्यूल", "फंक्शनल प्रोग्रामिंग, लॉजिकल प्रोग्रामिंग, प्रोसिड्यूरल प्रोग्रामिंग, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग" ], "correct": 0, "explanation": "ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के चार मुख्य सिद्धांत हैं: इनहेरिटेंस (Inheritance), पॉलीमॉर्फिज़्म (Polymorphism), एब्सट्रैक्शन (Abstraction), और एनकैप्सुलेशन (Encapsulation)। ये सिद्धांत प्रोग्रामिंग को अधिक सुव्यवस्थित, पुन: प्रयोज्य, और मेंटेन करने योग्य बनाते हैं।" }, { "question": "क्लास और ऑब्जेक्ट में क्या अंतर है?", "options": [ "क्लास एक डेटा संरचना है, जबकि ऑब्जेक्ट एक फंक्शन है", "क्लास एक ब्लूप्रिंट है, जबकि ऑब्जेक्ट क्लास का एक उदाहरण है", "क्लास कोड लिखने के लिए उपयोग किया जाता है, जबकि ऑब्जेक्ट डेटा स्टोर करने के लिए", "क्लास और ऑब्जेक्ट एक ही चीज हैं" ], "correct": 1, "explanation": "क्लास एक ब्लूप्रिंट या टेम्पलेट है जो ऑब्जेक्ट्स के गुणों (attributes) और व्यवहारों (methods) को परिभाषित करता है। ऑब्जेक्ट क्लास का एक उदाहरण होता है, जिसमें क्लास में परिभाषित सभी गुण और व्यवहार होते हैं। उदाहरण के लिए, 'कार' क्लास हो सकती है, और 'मेरा कार' एक ऑब्जेक्ट हो सकता है।" }, { "question": "इनहेरिटेंस (Inheritance) का मुख्य लाभ क्या है?", "options": [ "डेटा को एन्कोड करना", "कोड का पुन: उपयोग और हायरार्की को स्थापित करना", "डेटा को स्टोर करने के लिए अधिक मेमोरी प्रदान करना", "फंक्शनल प्रोग्रामिंग के सिद्धांतों को लागू करना" ], "correct": 1, "explanation": "इनहेरिटेंस का मुख्य लाभ कोड का पुन: उपयोग है। यह एक क्लास को दूसरी क्लास के गुण और व्यवहारों को विरासत में लेने की अनुमति देता है, जिससे कोड को पुनः लिखने की आवश्यकता नहीं होती। इसके अलावा, यह एक हायरार्की को स्थापित करने में भी मदद करता है, जिससे प्रोग्रामिंग संरचना अधिक सुव्यवस्थित बनती है।" }, { "question": "पॉलीमॉर्फिज़्म (Polymorphism) का मतलब क्या है?", "options": [ "एक ही नाम के साथ विभिन्न कार्यों को परिभाषित करना", "डेटा को स्टोर करने के लिए विभिन्न प्रकार की संरचनाओं का उपयोग करना", "क्लास के गुणों को छिपाना", "कोड को विभिन्न मॉड्यूल में विभाजित करना" ], "correct": 0, "explanation": "पॉलीमॉर्फिज़्म का मतलब है एक ही नाम के साथ विभिन्न कार्यों को परिभाषित करना। यह ओवरलोडिंग (overloading) और ओवरराइडिंग (overriding) के माध्यम से किया जाता है, जिससे एक ही फंक्शन या मेथड का विभिन्न प्रकार के ऑब्जेक्ट्स पर विभिन्न व्यवहार हो सकते हैं। यह कोड की लचीलापन और पुन: उपयोगिता को बढ़ाता है।" }, { "question": "एब्सट्रैक्शन (Abstraction) का क्या उद्देश्य है?", "options": [ "डेटा को छिपाना और आवश्यक जानकारी को उजागर करना", "कोड को छोटे फंक्शन्स में विभाजित करना", "मल्टीपल क्लासेस के बीच संबंध स्थापित करना", "सभी फंक्शन्स को एक साथ समूहित करना" ], "correct": 0, "explanation": "एब्सट्रैक्शन का उद्देश्य डेटा को छिपाना और आवश्यक जानकारी को उजागर करना है। यह प्रोग्रामिंग में जटिलताओं को कम करता है और उपयोगकर्ताओं को सिर्फ आवश्यक इंटरफेस प्रदान करता है। इससे कोड को समझना और मेंटेन करना आसान होता है।" }, { "question": "एनकैप्सुलेशन (Encapsulation) क्या है?", "options": [ "कोड को फंक्शन्स में विभाजित करना", "डेटा और मेथड्स को एक ही इकाई में बांधना और डेटा को सीधे एक्सेस से रोकना", "क्लासेस के बीच वंशानुक्रम स्थापित करना", "एक ही नाम के साथ विभिन्न प्रकार के मेथड्स बनाना" ], "correct": 1, "explanation": "एनकैप्सुलेशन डेटा और मेथड्स को एक ही इकाई में बांधता है और डेटा को सीधे एक्सेस से रोकता है। इसके माध्यम से, डेटा को सुरक्षित रखा जाता है और केवल नियंत्रित तरीकों से ही एक्सेस किया जा सकता है। यह कोड की सुरक्षा और विश्वसनीयता को बढ़ाता है।" }, { "question": "कंस्ट्रक्टर्स (Constructors) का क्या कार्य है?", "options": [ "ऑब्जेक्ट को नष्ट करना", "क्लास के ऑब्जेक्ट्स के लिए प्रारंभिक सेटअप करना", "डेटा को स्टोर करने के लिए मेथड्स बनाना", "ऑब्जेक्ट्स के बीच संबंध स्थापित करना" ], "correct": 1, "explanation": "कंस्ट्रक्टर्स क्लास के ऑब्जेक्ट्स के लिए प्रारंभिक सेटअप करते हैं। यह विशेष मेथड्स होते हैं जो ऑब्जेक्ट बनते ही कॉल होते हैं और ऑब्जेक्ट के गुणों को प्रारंभिक मान प्रदान करते हैं। कंस्ट्रक्टर्स का कोई रिटर्न टाइप नहीं होता है।" }, { "question": "डिस्ट्रक्टर्स (Destructors) का क्या कार्य है?", "options": [ "ऑब्जेक्ट को नष्ट करना और संसाधनों को मुक्त करना", "ऑब्जेक्ट के गुणों को सेट करना", "कोड को पुन: उपयोग योग्य बनाना", "क्लासेस को एक दूसरे से जोड़ना" ], "correct": 0, "explanation": "डिस्ट्रक्टर्स ऑब्जेक्ट को नष्ट करने और उसके द्वारा उपयोग किए जा रहे संसाधनों को मुक्त करने का कार्य करते हैं। यह विशेष मेथड्स होते हैं जो ऑब्जेक्ट का जीवन समाप्त होने पर कॉल होते हैं। डिस्ट्रक्टर्स का उपयोग मेमोरी लीक को रोकने के लिए महत्वपूर्ण है।" }, { "question": "किस सिद्धांत के माध्यम से एक क्लास अपने बेस क्लास के गुणों और मेथड्स को प्राप्त कर सकता है?", "options": [ "एनकैप्सुलेशन", "एब्सट्रैक्शन", "इनहेरिटेंस", "पॉलीमॉर्फिज़्म" ], "correct": 2, "explanation": "इनहेरिटेंस (Inheritance) के माध्यम से एक क्लास अपने बेस क्लास के गुणों और मेथड्स को प्राप्त कर सकता है। यह एक क्लास को दूसरी क्लास से विशेषताओं को विरासत में लेने की अनुमति देता है, जिससे कोड का पुन: उपयोग बढ़ता है और हायरार्की स्थापित होती है।" }, { "question": "किस सिद्धांत के माध्यम से एक ऑब्जेक्ट विभिन्न प्रकार के व्यवहार दिखा सकता है?", "options": [ "एनकैप्सुलेशन", "पॉलीमॉर्फिज़्म", "इनहेरिटेंस", "एब्सट्रैक्शन" ], "correct": 1, "explanation": "पॉलीमॉर्फिज़्म (Polymorphism) के माध्यम से एक ऑब्जेक्ट विभिन्न प्रकार के व्यवहार दिखा सकता है। यह सिद्धांत मेथड ओवरराइडिंग और ओवरलोडिंग के माध्यम से कार्यान्वित होता है, जिससे एक ही मेथड का विभिन्न क्लासेस में विभिन्न कार्यान्वयन हो सकता है।" }, { "question": "एब्सट्रैक्शन का मुख्य उद्देश्य क्या है?", "options": [ "डेटा को सीधे एक्सेस करना", "डेटा और मेथड्स को एक इकाई में बांधना", "जटिलताओं को छिपाना और उपयोगकर्ताओं को आवश्यक इंटरफेस प्रदान करना", "कोड को पुन: उपयोग करना" ], "correct": 2, "explanation": "एब्सट्रैक्शन का मुख्य उद्देश्य जटिलताओं को छिपाना और उपयोगकर्ताओं को आवश्यक इंटरफेस प्रदान करना है। यह प्रोग्रामिंग में केवल महत्वपूर्ण जानकारी को उजागर करता है, जिससे कोड को समझना और मेंटेन करना आसान होता है।" }, { "question": "एनकैप्सुलेशन के माध्यम से क्या सुनिश्चित किया जाता है?", "options": [ "कोड का पुन: उपयोग", "डेटा की सुरक्षा और नियंत्रित एक्सेस", "क्लासेस के बीच संबंध", "क्लासेस को विस्तार करना" ], "correct": 1, "explanation": "एनकैप्सुलेशन के माध्यम से डेटा की सुरक्षा और नियंत्रित एक्सेस सुनिश्चित किया जाता है। यह प्राइवेट और पब्लिक एक्सेस स्पेसिफायर्स का उपयोग करके डेटा को छिपाता है और केवल आवश्यक तरीकों से ही डेटा तक पहुँच प्रदान करता है।" }, { "question": "कंस्ट्रक्टर्स और डिस्ट्रक्टर्स में मुख्य अंतर क्या है?", "options": [ "कंस्ट्रक्टर्स ऑब्जेक्ट्स को बनाते हैं, जबकि डिस्ट्रक्टर्स उन्हें नष्ट करते हैं", "कंस्ट्रक्टर्स डेटा को जोड़ते हैं, जबकि डिस्ट्रक्टर्स डेटा को घटाते हैं", "दोनों एक ही प्रकार के होते हैं", "कंस्ट्रक्टर्स कोड को स्टोर करते हैं, जबकि डिस्ट्रक्टर्स कोड को हटाते हैं" ], "correct": 0, "explanation": "कंस्ट्रक्टर्स विशेष मेथड्स होते हैं जो ऑब्जेक्ट्स को बनाने और प्रारंभिक सेटअप करने के लिए उपयोग किए जाते हैं, जबकि डिस्ट्रक्टर्स ऑब्जेक्ट्स को नष्ट करने और उनके द्वारा उपयोग किए गए संसाधनों को मुक्त करने के लिए उपयोग किए जाते हैं।" }, { "question": "किस सिद्धांत के माध्यम से एक क्लास में मौजूदा क्लास की विशेषताओं को शामिल किया जा सकता है?", "options": [ "एनकैप्सुलेशन", "इनहेरिटेंस", "पॉलीमॉर्फिज़्म", "एब्सट्रैक्शन" ], "correct": 1, "explanation": "इनहेरिटेंस (Inheritance) के माध्यम से एक क्लास में मौजूदा क्लास की विशेषताओं को शामिल किया जा सकता है। यह क्लासेस के बीच पुन: उपयोग योग्य कोड को बढ़ावा देता है और प्रोग्रामिंग में लचीलापन प्रदान करता है।" }, { "question": "पॉलीमॉर्फिज़्म का उपयोग किन मामलों में किया जाता है?", "options": [ "जब विभिन्न क्लासेस में एक ही मेथड को विभिन्न तरीकों से इम्प्लीमेंट करना हो", "जब डेटा को एन्कोड करना हो", "जब क्लासेस को एक साथ समूहित करना हो", "जब क्लासेस को विभाजित करना हो" ], "correct": 0, "explanation": "पॉलीमॉर्फिज़्म का उपयोग तब किया जाता है जब विभिन्न क्लासेस में एक ही मेथड को विभिन्न तरीकों से इम्प्लीमेंट करना हो। यह कोड की लचीलापन और पुन: उपयोगिता को बढ़ाता है, जिससे विभिन्न ऑब्जेक्ट्स के लिए एक समान इंटरफेस प्रदान किया जा सकता है।" }, { "question": "एनकैप्सुलेशन कैसे डेटा को सुरक्षित रखता है?", "options": [ "डेटा को क्लास से बाहर एक्सपोज़ करके", "डेटा को फंक्शन्स से बांधकर", "प्राइवेट और पब्लिक एक्सेस स्पेसिफायर्स का उपयोग करके", "क्लासेस को एक साथ समूहित करके" ], "correct": 2, "explanation": "एनकैप्सुलेशन प्राइवेट और पब्लिक एक्सेस स्पेसिफायर्स का उपयोग करके डेटा को सुरक्षित रखता है। यह डेटा को सीधे एक्सेस से रोकता है और केवल निर्धारित तरीकों से ही डेटा तक पहुँच प्रदान करता है, जिससे डेटा की अखंडता बनी रहती है।" }, { "question": "कंस्ट्रक्टर्स का कोई रिटर्न टाइप नहीं होता है। इसका कारण क्या है?", "options": [ "वे केवल डेटा को जोड़ते हैं", "वे क्लास के नाम के समान होते हैं और ऑब्जेक्ट को लौटाने के लिए डिजाइन किए जाते हैं", "वे केवल मेथड्स को स्टोर करते हैं", "वे फंक्शन्स नहीं होते हैं" ], "correct": 1, "explanation": "कंस्ट्रक्टर्स का कोई रिटर्न टाइप नहीं होता है क्योंकि वे क्लास के नाम के समान होते हैं और ऑब्जेक्ट को प्रारंभ करने के लिए डिजाइन किए जाते हैं। इसका उद्देश्य ऑब्जेक्ट को बनाना और उसकी प्रारंभिक स्थिति सेट करना होता है, न कि किसी वैल्यू को लौटाना।" }, { "question": "डिस्ट्रक्टर्स को किस स्थिति में कॉल किया जाता है?", "options": [ "जब ऑब्जेक्ट बनाया जाता है", "जब ऑब्जेक्ट का उपयोग किया जाता है", "जब ऑब्जेक्ट का जीवन समाप्त हो जाता है", "जब ऑब्जेक्ट को पुनः सेट किया जाता है" ], "correct": 2, "explanation": "डिस्ट्रक्टर्स को तब कॉल किया जाता है जब ऑब्जेक्ट का जीवन समाप्त हो जाता है। यह ऑब्जेक्ट द्वारा उपयोग किए गए संसाधनों को मुक्त करने के लिए जिम्मेदार होता है, जिससे मेमोरी लीक को रोका जा सके।" }, { "question": "एब्सट्रैक्शन का उपयोग किस प्रकार के प्रोग्रामिंग समस्याओं को हल करने में मदद करता है?", "options": [ "जटिलता को कम करने और महत्वपूर्ण विवरणों पर ध्यान केंद्रित करने में", "डेटा को जोड़ने में", "क्लासेस को समूहित करने में", "कोड को पुन: उपयोग करने में" ], "correct": 0, "explanation": "एब्सट्रैक्शन का उपयोग जटिलता को कम करने और महत्वपूर्ण विवरणों पर ध्यान केंद्रित करने में मदद करता है। यह प्रोग्रामर्स को केवल आवश्यक इंटरफेस पर काम करने की अनुमति देता है, जिससे सिस्टम का डिजाइन अधिक सरल और समझने में आसान बन जाता है।" }, { "question": "एनकैप्सुलेशन कोड की सुरक्षा के लिए क्यों महत्वपूर्ण है?", "options": [ "क्योंकि यह कोड को तेज बनाता है", "क्योंकि यह डेटा को सीधे एक्सेस से रोकता है और नियंत्रित तरीके से एक्सेस प्रदान करता है", "क्योंकि यह कोड को छोटा बनाता है", "क्योंकि यह कोड को अलग-अलग मॉड्यूल में बांटता है" ], "correct": 1, "explanation": "एनकैप्सुलेशन कोड की सुरक्षा के लिए महत्वपूर्ण है क्योंकि यह डेटा को सीधे एक्सेस से रोकता है और केवल नियंत्रित तरीकों से ही डेटा तक पहुँच प्रदान करता है। इससे अनधिकृत एक्सेस और डेटा की गलत उपयोग से बचा जा सकता है, जिससे कोड अधिक सुरक्षित और विश्वसनीय बनता है।" }, { "question": "कंस्ट्रक्टर्स का मुख्य कार्य क्या है?", "options": [ "ऑब्जेक्ट्स को नष्ट करना", "ऑब्जेक्ट्स को बनाना और उनकी प्रारंभिक स्थिति सेट करना", "डेटा को स्टोर करना", "ऑब्जेक्ट्स के बीच संबंध स्थापित करना" ], "correct": 1, "explanation": "कंस्ट्रक्टर्स का मुख्य कार्य ऑब्जेक्ट्स को बनाना और उनकी प्रारंभिक स्थिति सेट करना होता है। यह विशेष मेथड्स होते हैं जो ऑब्जेक्ट्स के निर्माण के समय कॉल होते हैं और उनके गुणों को प्रारंभिक मान प्रदान करते हैं।" }, { "question": "डिस्ट्रक्टर्स का मुख्य कार्य क्या है?", "options": [ "ऑब्जेक्ट्स को स्टोर करना", "ऑब्जेक्ट्स को जोड़ना", "ऑब्जेक्ट्स को नष्ट करना और संसाधनों को मुक्त करना", "ऑब्जेक्ट्स के बीच संबंध स्थापित करना" ], "correct": 2, "explanation": "डिस्ट्रक्टर्स का मुख्य कार्य ऑब्जेक्ट्स को नष्ट करना और उनके द्वारा उपयोग किए गए संसाधनों को मुक्त करना होता है। यह मेथड्स ऑब्जेक्ट्स के जीवन चक्र के अंत में कॉल होते हैं, जिससे मेमोरी लीक को रोका जा सके और सिस्टम की दक्षता बढ़ाई जा सके।" }, { "question": "किस सिद्धांत के माध्यम से एक क्लास में एक से अधिक बेस क्लासेज़ हो सकते हैं?", "options": [ "एनकैप्सुलेशन", "मल्टीपल इनहेरिटेंस", "पॉलीमॉर्फिज़्म", "एब्सट्रैक्शन" ], "correct": 1, "explanation": "मल्टीपल इनहेरिटेंस (Multiple Inheritance) के माध्यम से एक क्लास में एक से अधिक बेस क्लासेज़ हो सकते हैं। यह एक क्लास को विभिन्न स्रोतों से गुणों और मेथड्स को विरासत में लेने की अनुमति देता है, जिससे कोड का पुन: उपयोग और लचीलापन बढ़ता है।" }, { "question": "पॉलीमॉर्फिज़्म का क्या लाभ है?", "options": [ "कोड को स्थिर बनाना", "कोड की पुन: उपयोगिता और लचीलापन बढ़ाना", "डेटा को एन्कोड करना", "क्लासेस को विभाजित करना" ], "correct": 1, "explanation": "पॉलीमॉर्फिज़्म का लाभ कोड की पुन: उपयोगिता और लचीलापन बढ़ाना है। यह एक ही इंटरफेस के माध्यम से विभिन्न प्रकार के ऑब्जेक्ट्स के साथ काम करने की अनुमति देता है, जिससे कोड अधिक लचीला और पुन: प्रयोज्य बनता है।" }, { "question": "एनकैप्सुलेशन कोड को कैसे संरक्षित करता है?", "options": [ "डेटा को समूहित करके", "डेटा और मेथड्स को एक ही इकाई में बांधकर और डेटा को सीधे एक्सेस से रोककर", "क्लासेस को एक साथ बांधकर", "डेटा को एन्कोड करके" ], "correct": 1, "explanation": "एनकैप्सुलेशन डेटा और मेथड्स को एक ही इकाई में बांधता है और डेटा को सीधे एक्सेस से रोकता है। इसके माध्यम से, केवल निर्धारित मेथड्स के माध्यम से ही डेटा तक पहुँच प्रदान की जाती है, जिससे डेटा की सुरक्षा और अखंडता बनी रहती है।" }, { "question": "कंस्ट्रक्टर्स को ऑब्जेक्ट्स के निर्माण के समय क्यों कॉल किया जाता है?", "options": [ "क्योंकि उन्हें डेटा को जोड़ने की आवश्यकता होती है", "क्योंकि उन्हें ऑब्जेक्ट्स को स्टोर करने की आवश्यकता होती है", "क्योंकि उन्हें ऑब्जेक्ट्स के गुणों को प्रारंभिक मान प्रदान करना होता है", "क्योंकि उन्हें ऑब्जेक्ट्स को नष्ट करना होता है" ], "correct": 2, "explanation": "कंस्ट्रक्टर्स को ऑब्जेक्ट्स के निर्माण के समय इसलिए कॉल किया जाता है क्योंकि उन्हें ऑब्जेक्ट्स के गुणों को प्रारंभिक मान प्रदान करना होता है। इससे ऑब्जेक्ट्स को सही ढंग से सेटअप किया जा सकता है और उनका उपयोग तैयार हो जाता है।" }, { "question": "डिस्ट्रक्टर्स का उपयोग किन स्थितियों में महत्वपूर्ण होता है?", "options": [ "जब ऑब्जेक्ट्स का निर्माण होता है", "जब ऑब्जेक्ट्स का उपयोग होता है", "जब ऑब्जेक्ट्स का जीवन समाप्त हो जाता है", "जब ऑब्जेक्ट्स को पुनः सेट किया जाता है" ], "correct": 2, "explanation": "डिस्ट्रक्टर्स का उपयोग तब महत्वपूर्ण होता है जब ऑब्जेक्ट्स का जीवन समाप्त हो जाता है। यह संसाधनों को मुक्त करने और मेमोरी लीक को रोकने के लिए आवश्यक होता है, जिससे सिस्टम की दक्षता बनी रहती है।" }, { "question": "किस सिद्धांत के माध्यम से एक ऑब्जेक्ट अपने बेस क्लास के मेथड्स को ओवरराइड कर सकता है?", "options": [ "एनकैप्सुलेशन", "इनहेरिटेंस", "पॉलीमॉर्फिज़्म", "एब्सट्रैक्शन" ], "correct": 2, "explanation": "पॉलीमॉर्फिज़्म (Polymorphism) के माध्यम से एक ऑब्जेक्ट अपने बेस क्लास के मेथड्स को ओवरराइड कर सकता है। यह सिद्धांत ऑवरराइडिंग को संभव बनाता है, जिससे बेस क्लास के मेथड्स का नया व्यवहार निर्धारित किया जा सकता है।" }, { "question": "एब्सट्रैक्शन के बिना ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का क्या नुकसान होता है?", "options": [ "कोड को तेज बनाने में", "जटिलता बढ़ने में और कोड की समझ में कठिनाई", "डेटा को स्टोर करने में", "कोड को पुन: उपयोग करने में" ], "correct": 1, "explanation": "एब्सट्रैक्शन के बिना ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में जटिलता बढ़ सकती है और कोड की समझ में कठिनाई हो सकती है। एब्सट्रैक्शन प्रोग्रामर्स को आवश्यक विवरणों पर ध्यान केंद्रित करने और अनावश्यक जटिलताओं को छिपाने में मदद करता है, जिससे कोड अधिक सुव्यवस्थित और समझने में आसान बनता है।" }, { "question": "एनकैप्सुलेशन का उपयोग किन प्रकार की समस्याओं को हल करने में मदद करता है?", "options": [ "जटिलता को कम करने में", "डेटा की सुरक्षा और नियंत्रित एक्सेस प्रदान करने में", "कोड को तेज करने में", "डेटा को एन्कोड करने में" ], "correct": 1, "explanation": "एनकैप्सुलेशन का उपयोग डेटा की सुरक्षा और नियंत्रित एक्सेस प्रदान करने में मदद करता है। यह प्राइवेट और पब्लिक एक्सेस स्पेसिफायर्स का उपयोग करके डेटा को छिपाता है और केवल आवश्यक मेथड्स के माध्यम से ही डेटा तक पहुँच प्रदान करता है, जिससे डेटा की अखंडता बनी रहती है।" }, { "question": "कंस्ट्रक्टर्स और डिस्ट्रक्टर्स के नाम में क्या समानता होती है?", "options": [ "दोनों का कोई समानता नहीं होती", "दोनों का नाम क्लास के नाम के समान होता है", "दोनों का नाम ऑब्जेक्ट के नाम के समान होता है", "दोनों का नाम फंक्शन के नाम के समान होता है" ], "correct": 1, "explanation": "कंस्ट्रक्टर्स और डिस्ट्रक्टर्स दोनों का नाम क्लास के नाम के समान होता है। इससे यह स्पष्ट होता है कि ये विशेष मेथड्स क्लास के ऑब्जेक्ट्स के निर्माण और विनाश के लिए हैं।" }, { "question": "पॉलीमॉर्फिज़्म का क्या लाभ है?", "options": [ "कोड को सुरक्षित बनाना", "कोड की पुन: उपयोगिता और लचीलापन बढ़ाना", "डेटा को स्टोर करना", "कोड को स्थिर बनाना" ], "correct": 1, "explanation": "पॉलीमॉर्फिज़्म का लाभ कोड की पुन: उपयोगिता और लचीलापन बढ़ाना है। यह एक ही इंटरफेस के माध्यम से विभिन्न प्रकार के ऑब्जेक्ट्स के साथ काम करने की अनुमति देता है, जिससे कोड अधिक लचीला और पुन: प्रयोज्य बनता है।" }, { "question": "क्लास में प्राइवेट गुणों को कैसे एक्सेस किया जा सकता है?", "options": [ "सीधे ऑब्जेक्ट से", "क्लास के पब्लिक मेथड्स के माध्यम से", "किसी भी तरीके से नहीं", "क्लास के अंदर ही एक्सेस किया जा सकता है" ], "correct": 1, "explanation": "क्लास में प्राइवेट गुणों को पब्लिक मेथड्स (जैसे गेटर्स और सेटर) के माध्यम से एक्सेस किया जा सकता है। यह एनकैप्सुलेशन के माध्यम से डेटा की सुरक्षा सुनिश्चित करता है और नियंत्रित तरीके से एक्सेस प्रदान करता है।" }, { "question": "किस सिद्धांत के माध्यम से एक क्लास में मौजूदा क्लास के गुणों और मेथड्स को शामिल किया जा सकता है?", "options": [ "एनकैप्सुलेशन", "इनहेरिटेंस", "पॉलीमॉर्फिज़्म", "एब्सट्रैक्शन" ], "correct": 1, "explanation": "इनहेरिटेंस (Inheritance) के माध्यम से एक क्लास में मौजूदा क्लास के गुणों और मेथड्स को शामिल किया जा सकता है। यह क्लासेस के बीच पुन: उपयोग योग्य कोड को बढ़ावा देता है और प्रोग्रामिंग में लचीलापन प्रदान करता है।" }, { "question": "एब्सट्रैक्शन के माध्यम से क्या किया जा सकता है?", "options": [ "डेटा को सीधे एक्सेस करना", "क्लासेस के बीच संबंध स्थापित करना", "जटिलताओं को छिपाना और केवल आवश्यक इंटरफेस प्रदान करना", "फंक्शन्स को छोटे मेथड्स में विभाजित करना" ], "correct": 2, "explanation": "एब्सट्रैक्शन के माध्यम से जटिलताओं को छिपाया जा सकता है और केवल आवश्यक इंटरफेस प्रदान किया जा सकता है। यह प्रोग्रामर्स को सिर्फ महत्वपूर्ण विवरणों पर ध्यान केंद्रित करने में मदद करता है, जिससे कोड को समझना और मेंटेन करना आसान होता है।" }, { "question": "किस सिद्धांत के माध्यम से एक क्लास में एक से अधिक बेस क्लासेज़ हो सकते हैं?", "options": [ "एनकैप्सुलेशन", "मल्टीपल इनहेरिटेंस", "पॉलीमॉर्फिज़्म", "एब्सट्रैक्शन" ], "correct": 1, "explanation": "मल्टीपल इनहेरिटेंस (Multiple Inheritance) के माध्यम से एक क्लास में एक से अधिक बेस क्लासेज़ हो सकते हैं। यह क्लास को विभिन्न स्रोतों से गुणों और मेथड्स को विरासत में लेने की अनुमति देता है, जिससे कोड का पुन: उपयोग और लचीलापन बढ़ता है।" }, { "question": "किस सिद्धांत के माध्यम से एक क्लास में मौजूदा क्लास की विशेषताओं को शामिल किया जा सकता है?", "options": [ "एनकैप्सुलेशन", "इनहेरिटेंस", "पॉलीमॉर्फिज़्म", "एब्सट्रैक्शन" ], "correct": 1, "explanation": "इनहेरिटेंस (Inheritance) के माध्यम से एक क्लास में मौजूदा क्लास की विशेषताओं को शामिल किया जा सकता है। यह कोड का पुन: उपयोग बढ़ाता है और प्रोग्रामिंग में संरचना को सुव्यवस्थित बनाता है।" }, { "question": "किस सिद्धांत के माध्यम से एक ऑब्जेक्ट विभिन्न प्रकार के व्यवहार दिखा सकता है?", "options": [ "एनकैप्सुलेशन", "पॉलीमॉर्फिज़्म", "इनहेरिटेंस", "एब्सट्रैक्शन" ], "correct": 1, "explanation": "पॉलीमॉर्फिज़्म (Polymorphism) के माध्यम से एक ऑब्जेक्ट विभिन्न प्रकार के व्यवहार दिखा सकता है। यह ओवरराइडिंग और ओवरलोडिंग के माध्यम से कार्यान्वित होता है, जिससे एक ही मेथड का विभिन्न क्लासेस में विभिन्न व्यवहार हो सकता है।" }, { "question": "एनकैप्सुलेशन क्या है?", "options": [ "डेटा और मेथड्स को एक ही इकाई में बांधना और डेटा को सीधे एक्सेस से रोकना", "डेटा को स्टोर करने के लिए विभिन्न प्रकार की संरचनाओं का उपयोग करना", "क्लासेस के बीच संबंध स्थापित करना", "कोड को पुन: उपयोग करना" ], "correct": 0, "explanation": "एनकैप्सुलेशन डेटा और मेथड्स को एक ही इकाई में बांधता है और डेटा को सीधे एक्सेस से रोकता है। यह प्राइवेट और पब्लिक एक्सेस स्पेसिफायर्स का उपयोग करके डेटा को छिपाता है और केवल आवश्यक मेथड्स के माध्यम से ही डेटा तक पहुँच प्रदान करता है।" }, { "question": "कंस्ट्रक्टर्स का उपयोग किस लिए किया जाता है?", "options": [ "ऑब्जेक्ट्स को नष्ट करने के लिए", "ऑब्जेक्ट्स को बनाने और उनकी प्रारंभिक स्थिति सेट करने के लिए", "डेटा को स्टोर करने के लिए", "ऑब्जेक्ट्स के बीच संबंध स्थापित करने के लिए" ], "correct": 1, "explanation": "कंस्ट्रक्टर्स का उपयोग ऑब्जेक्ट्स को बनाने और उनकी प्रारंभिक स्थिति सेट करने के लिए किया जाता है। यह विशेष मेथड्स होते हैं जो ऑब्जेक्ट्स के निर्माण के समय कॉल होते हैं और उनके गुणों को प्रारंभिक मान प्रदान करते हैं।" }, { "question": "डिस्ट्रक्टर्स का क्या कार्य होता है?", "options": [ "ऑब्जेक्ट्स को स्टोर करना", "ऑब्जेक्ट्स को जोड़ना", "ऑब्जेक्ट्स को नष्ट करना और संसाधनों को मुक्त करना", "ऑब्जेक्ट्स के बीच संबंध स्थापित करना" ], "correct": 2, "explanation": "डिस्ट्रक्टर्स का कार्य ऑब्जेक्ट्स को नष्ट करना और उनके द्वारा उपयोग किए गए संसाधनों को मुक्त करना होता है। यह मेथड्स ऑब्जेक्ट्स के जीवन चक्र के अंत में कॉल होते हैं, जिससे मेमोरी लीक को रोका जा सके और सिस्टम की दक्षता बढ़ाई जा सके।" }, { "question": "पॉलीमॉर्फिज़्म का क्या लाभ है?", "options": [ "कोड को सुरक्षित बनाना", "कोड की पुन: उपयोगिता और लचीलापन बढ़ाना", "डेटा को स्टोर करना", "कोड को स्थिर बनाना" ], "correct": 1, "explanation": "पॉलीमॉर्फिज़्म का लाभ कोड की पुन: उपयोगिता और लचीलापन बढ़ाना है। यह एक ही इंटरफेस के माध्यम से विभिन्न प्रकार के ऑब्जेक्ट्स के साथ काम करने की अनुमति देता है, जिससे कोड अधिक लचीला और पुन: प्रयोज्य बनता है।" }, { "question": "एब्सट्रैक्शन का मुख्य उद्देश्य क्या है?", "options": [ "डेटा को सीधे एक्सेस करना", "क्लासेस के बीच संबंध स्थापित करना", "जटिलताओं को छिपाना और उपयोगकर्ताओं को आवश्यक इंटरफेस प्रदान करना", "फंक्शन्स को छोटे मेथड्स में विभाजित करना" ], "correct": 2, "explanation": "एब्सट्रैक्शन का मुख्य उद्देश्य जटिलताओं को छिपाना और उपयोगकर्ताओं को आवश्यक इंटरफेस प्रदान करना है। यह प्रोग्रामर्स को सिर्फ महत्वपूर्ण विवरणों पर ध्यान केंद्रित करने में मदद करता है, जिससे कोड अधिक सुव्यवस्थित और समझने में आसान बन जाता है।" }, { "question": "एनकैप्सुलेशन कोड को कैसे संरक्षित करता है?", "options": [ "डेटा को समूहित करके", "डेटा और मेथड्स को एक ही इकाई में बांधकर और डेटा को सीधे एक्सेस से रोककर", "क्लासेस को एक साथ बांधकर", "डेटा को एन्कोड करके" ], "correct": 1, "explanation": "एनकैप्सुलेशन डेटा और मेथड्स को एक ही इकाई में बांधता है और डेटा को सीधे एक्सेस से रोकता है। इसके माध्यम से, केवल निर्धारित मेथड्स के माध्यम से ही डेटा तक पहुँच प्रदान की जाती है, जिससे डेटा की अखंडता बनी रहती है।" }, { "question": "कंस्ट्रक्टर्स को ऑब्जेक्ट्स के निर्माण के समय क्यों कॉल किया जाता है?", "options": [ "क्योंकि उन्हें डेटा को जोड़ने की आवश्यकता होती है", "क्योंकि उन्हें ऑब्जेक्ट्स को स्टोर करने की आवश्यकता होती है", "क्योंकि उन्हें ऑब्जेक्ट्स के गुणों को प्रारंभिक मान प्रदान करना होता है", "क्योंकि उन्हें ऑब्जेक्ट्स को नष्ट करना होता है" ], "correct": 2, "explanation": "कंस्ट्रक्टर्स को ऑब्जेक्ट्स के निर्माण के समय इसलिए कॉल किया जाता है क्योंकि उन्हें ऑब्जेक्ट्स के गुणों को प्रारंभिक मान प्रदान करना होता है। इससे ऑब्जेक्ट्स को सही ढंग से सेटअप किया जा सकता है और उनका उपयोग तैयार हो जाता है।" }, { "question": "डिस्ट्रक्टर्स का मुख्य कार्य क्या है?", "options": [ "ऑब्जेक्ट्स को स्टोर करना", "ऑब्जेक्ट्स को जोड़ना", "ऑब्जेक्ट्स को नष्ट करना और संसाधनों को मुक्त करना", "ऑब्जेक्ट्स के बीच संबंध स्थापित करना" ], "correct": 2, "explanation": "डिस्ट्रक्टर्स का मुख्य कार्य ऑब्जेक्ट्स को नष्ट करना और उनके द्वारा उपयोग किए गए संसाधनों को मुक्त करना होता है। यह मेथड्स ऑब्जेक्ट्स के जीवन चक्र के अंत में कॉल होते हैं, जिससे मेमोरी लीक को रोका जा सके और सिस्टम की दक्षता बढ़ाई जा सके।" }, { "question": "पॉलीमॉर्फिज़्म का क्या लाभ है?", "options": [ "कोड को सुरक्षित बनाना", "कोड की पुन: उपयोगिता और लचीलापन बढ़ाना", "डेटा को स्टोर करना", "कोड को स्थिर बनाना" ], "correct": 1, "explanation": "पॉलीमॉर्फिज़्म का लाभ कोड की पुन: उपयोगिता और लचीलापन बढ़ाना है। यह एक ही इंटरफेस के माध्यम से विभिन्न प्रकार के ऑब्जेक्ट्स के साथ काम करने की अनुमति देता है, जिससे कोड अधिक लचीला और पुन: प्रयोज्य बनता है।" }, { "question": "एब्सट्रैक्शन का मुख्य उद्देश्य क्या है?", "options": [ "डेटा को सीधे एक्सेस करना", "क्लासेस के बीच संबंध स्थापित करना", "जटिलताओं को छिपाना और उपयोगकर्ताओं को आवश्यक इंटरफेस प्रदान करना", "फंक्शन्स को छोटे मेथड्स में विभाजित करना" ], "correct": 2, "explanation": "एब्सट्रैक्शन का मुख्य उद्देश्य जटिलताओं को छिपाना और उपयोगकर्ताओं को आवश्यक इंटरफेस प्रदान करना है। यह प्रोग्रामर्स को सिर्फ महत्वपूर्ण विवरणों पर ध्यान केंद्रित करने में मदद करता है, जिससे कोड अधिक सुव्यवस्थित और समझने में आसान बन जाता है।" }, { "question": "एनकैप्सुलेशन कोड को कैसे संरक्षित करता है?", "options": [ "डेटा को समूहित करके", "डेटा और मेथड्स को एक ही इकाई में बांधकर और डेटा को सीधे एक्सेस से रोककर", "क्लासेस को एक साथ बांधकर", "डेटा को एन्कोड करके" ], "correct": 1, "explanation": "एनकैप्सुलेशन डेटा और मेथड्स को एक ही इकाई में बांधता है और डेटा को सीधे एक्सेस से रोकता है। इसके माध्यम से, केवल निर्धारित मेथड्स के माध्यम से ही डेटा तक पहुँच प्रदान की जाती है, जिससे डेटा की अखंडता बनी रहती है।" } // More questions as needed... ]; let currentQuestionIndex = 0; // Track current question let userAnswers = Array(quizData.length).fill(null); // Track user's answers // Timer variables let totalQuizTime = quizData.length * 30; // total seconds = 30 seconds * no. of questions let timeLeft = totalQuizTime; let timerInterval; // On page load, initialize quiz window.onload = function() { generateQuestionNav(); // Generate the question navigation circles loadQuestion(); startTimer(); // Start the countdown }; // Start the countdown timer function startTimer() { updateTimerDisplay(timeLeft); timerInterval = setInterval(() => { timeLeft--; updateTimerDisplay(timeLeft); if (timeLeft <= 0) { clearInterval(timerInterval); showResults(); // Force show results if time is up } }, 1000); } // Update timer on the screen in mm:ss format function updateTimerDisplay(seconds) { const timerEl = document.getElementById("timer"); const mins = Math.floor(seconds / 60).toString().padStart(2, '0'); const secs = (seconds % 60).toString().padStart(2, '0'); timerEl.innerText = `Time: ${mins}:${secs}`; } // Toggle the question nav when hamburger is pressed const hamburgerBtn = document.getElementById('hamburgerBtn'); hamburgerBtn.addEventListener('click', () => { document.getElementById('questionNavOverlay').classList.toggle('show'); }); // Close hamburger menu if user clicks outside the nav and menu document.addEventListener('click', (e) => { const navOverlay = document.getElementById('questionNavOverlay'); const hamburger = document.getElementById('hamburgerBtn'); // If the menu is open, and the click is outside both the overlay and the hamburger, close it if ( navOverlay.classList.contains('show') && !navOverlay.contains(e.target) && !hamburger.contains(e.target) ) { navOverlay.classList.remove('show'); } }); // Create small clickable circles for each question function generateQuestionNav() { const navContainer = document.getElementById("questionNav"); navContainer.innerHTML = ""; // clear old items if any quizData.forEach((_, index) => { const circle = document.createElement("div"); circle.classList.add("circle-number"); circle.innerText = index + 1; // Show question number (1-based) circle.onclick = () => jumpToQuestion(index); navContainer.appendChild(circle); }); } // Jump to a specific question function jumpToQuestion(qIndex) { currentQuestionIndex = qIndex; // Hide the nav on mobile after selection document.getElementById('questionNavOverlay').classList.remove('show'); // Reset submission/next button state document.getElementById("submitAnswerButton").classList.remove("hidden"); document.getElementById("nextButton").classList.add("hidden"); loadQuestion(); } // Load current question function loadQuestion() { highlightCurrentCircle(); // Hide explanation area and Next button initially document.getElementById("explanation").classList.add("hidden"); document.getElementById("nextButton").classList.add("hidden"); const questionData = quizData[currentQuestionIndex]; document.getElementById("question").innerText = questionData.question; document.getElementById("questionCounter").innerText = `${currentQuestionIndex + 1}/${quizData.length}`; // Clear old choices const choicesContainer = document.getElementById("choices"); choicesContainer.innerHTML = ""; // Populate choices questionData.options.forEach((option, index) => { const choiceElement = document.createElement("div"); choiceElement.className = "choice"; choiceElement.innerText = option; // If previously selected, mark it if (userAnswers[currentQuestionIndex] === index) { choiceElement.classList.add("selected"); } // On clicking a choice choiceElement.onclick = () => { // Clear all selections first document.querySelectorAll(".choice").forEach(c => c.classList.remove("selected")); // Mark this one as selected choiceElement.classList.add("selected"); userAnswers[currentQuestionIndex] = index; }; choicesContainer.appendChild(choiceElement); }); // Handle Previous button visibility document.getElementById("prevButton").style.display = currentQuestionIndex === 0 ? "none" : "inline-block"; } // Highlight the current question circle function highlightCurrentCircle() { const circles = document.querySelectorAll(".circle-number"); circles.forEach((circle, idx) => { circle.classList.remove("active"); if (idx === currentQuestionIndex) { circle.classList.add("active"); } }); } // Submit the current question's answer function submitAnswer() { const questionData = quizData[currentQuestionIndex]; const userAnswer = userAnswers[currentQuestionIndex]; // Show the explanation div const explanationDiv = document.getElementById("explanation"); explanationDiv.classList.remove("hidden"); // Clear previous correctness classes and disable further selection document.querySelectorAll(".choice").forEach((c) => { c.classList.add("disabled"); c.onclick = null; }); // Determine correctness or skipping if (userAnswer === null) { explanationDiv.innerHTML = "You Skipped the question.<br/><br/>व्याख्या: " + questionData.explanation; showPopupMessage("You Skipped the question", false); } else if (userAnswer === questionData.correct) { explanationDiv.innerHTML = "You got it right!<br/><br/>व्याख्या: " + questionData.explanation; showPopupMessage("You got it right", true); // Highlight correct choice document.querySelectorAll(".choice")[userAnswer].classList.add("correct"); } else { explanationDiv.innerHTML = "You got it wrong.<br/><br/>व्याख्या: " + questionData.explanation; showPopupMessage("You got it wrong", false); // Highlight correct choice document.querySelectorAll(".choice")[questionData.correct].classList.add("correct"); // Mark the chosen one as incorrect document.querySelectorAll(".choice")[userAnswer].classList.add("incorrect"); } // Hide the submit button, show the next button document.getElementById("submitAnswerButton").classList.add("hidden"); document.getElementById("nextButton").classList.remove("hidden"); } // Go to the next question or show final results function nextQuestion() { currentQuestionIndex++; if (currentQuestionIndex >= quizData.length) { // Show results if no more questions showResults(); } else { // Reset buttons document.getElementById("submitAnswerButton").classList.remove("hidden"); document.getElementById("nextButton").classList.add("hidden"); loadQuestion(); } } // Go to the previous question function previousQuestion() { if (currentQuestionIndex > 0) { currentQuestionIndex--; document.getElementById("submitAnswerButton").classList.remove("hidden"); document.getElementById("nextButton").classList.add("hidden"); loadQuestion(); } } // Show final quiz results function showResults() { // Stop the timer if it's still running clearInterval(timerInterval); // Calculate correct answers const correctAnswersCount = userAnswers.filter( (ans, i) => ans === quizData[i].correct ).length; // Hide quiz content document.getElementById("quizContent").classList.add("hidden"); // Show results document.getElementById("resultContent").classList.remove("hidden"); const percentage = (correctAnswersCount / quizData.length) * 100; let resultHTML = ""; if (percentage >= 60) { resultHTML = `<div class="congrats">🎉 बधाई हो! आपने ${percentage.toFixed( 2 )}% स्कोर किया है!</div>`; } else { resultHTML = `<div class="sad">😢 आपने ${percentage.toFixed( 2 )}% स्कोर किया है। अगली बार के लिए शुभकामनाएं!</div>`; } document.getElementById("resultMessage").innerHTML = resultHTML; document.getElementById("scoreMessage").innerText = `आपने कुल ${quizData.length} में से ${correctAnswersCount} प्रश्न सही उत्तर दिए हैं।`; } // Optional popup message function showPopupMessage(message, isCorrect) { const popup = document.getElementById('popupMessage'); popup.innerText = message; popup.className = ''; popup.classList.add('show'); popup.classList.add(isCorrect ? 'correct' : 'incorrect'); setTimeout(() => { popup.classList.remove('show'); popup.classList.add('hidden'); }, 2000); } // Button event listeners document.getElementById('prevButton').addEventListener('click', previousQuestion); document.getElementById('submitAnswerButton').addEventListener('click', submitAnswer); document.getElementById('nextButton').addEventListener('click', nextQuestion); // Predefined Darker Color Themes const themes = [ { header: '#a31645', headerText: '#ffffff', container: '#e8c4d6', containerText: '#6e0c36', headings: '#6e0c36' }, // Berry Delight { header: '#00574b', headerText: '#ffffff', container: '#b3dfd7', containerText: '#00382e', headings: '#00382e' }, // Ocean Breeze { header: '#c95a00', headerText: '#ffffff', container: '#dca865', containerText: '#7a3400', headings: '#7a3400' }, // Sunset Glow { header: '#4a0f6f', headerText: '#ffffff', container: '#cdb5e3', containerText: '#320b4a', headings: '#320b4a' }, // Calming Lavender { header: '#1e4d2b', headerText: '#ffffff', container: '#98c1a3', containerText: '#122417', headings: '#122417' }, // Forest Retreat { header: '#c99800', headerText: '#ffffff', container: '#e8d18a', containerText: '#6c4f00', headings: '#6c4f00' }, // Golden Elegance { header: '#01477e', headerText: '#ffffff', container: '#86b9e4', containerText: '#00223d', headings: '#00223d' }, // Sky Calm { header: '#5a3b2e', headerText: '#ffffff', container: '#b8a89c', containerText: '#32211a', headings: '#32211a' }, // Retro Rust { header: '#b34727', headerText: '#ffffff', container: '#f2c29d', containerText: '#6a2915', headings: '#6a2915' }, // Warm Peach { header: '#0f4c43', headerText: '#ffffff', container: '#92c3b8', containerText: '#072822', headings: '#072822' }, // Cool Mint ]; // Apply Random Darker Theme function applyRandomTheme() { const header = document.querySelector('.header'); const container = document.querySelector('.content-container'); const headings = document.querySelectorAll('.content-container h2'); // Select a random theme const randomTheme = themes[Math.floor(Math.random() * themes.length)]; // Apply Header Colors header.style.backgroundColor = randomTheme.header; header.style.color = randomTheme.headerText; // Apply Container Colors container.style.backgroundColor = randomTheme.container; container.style.color = randomTheme.containerText; // Apply Heading Colors headings.forEach((heading) => { heading.style.color = randomTheme.headings; heading.style.borderBottom = `2px solid ${randomTheme.headings}`; }); } // Apply the theme on page load window.onload = function () { applyRandomTheme(); // Set random theme generateQuestionNav(); // Generate question navigation loadQuestion(); // Load the first question startTimer(); // Start the countdown timer }; </script> </body> </html> <!-- /wp:html -->