मुख्य सामग्री पर जाएं

पाठ 2: यदि/अन्यथा सशर्त कथन

इस पाठ में, आप एक प्रोजेक्ट बनाएंगे जिसमें वीआर रोबोट डायनेमिक कैसल क्रैशर प्लेग्राउंड पर कम से कम दो इमारतों को गिरा देगा। लूप और सेंसर फीडबैक का उपयोग करके इस चुनौती को हल करने के लिए एक एल्गोरिदम की आवश्यकता होगी क्योंकि प्लेग्राउंड का लेआउट प्रत्येक रीसेट के साथ बदल जाता है।

डायनामिक कैसल क्रैशर प्लेग्राउंड लेआउट के उदाहरण:

डायनामिक कैसल क्रैशर प्लेग्राउंड के नमूना लेआउट के तीन ऊपर से नीचे के दृश्य, जिनमें रोबोट एक ही प्रारंभिक स्थिति में है और महल अलग-अलग स्थितियों में हैं। प्लेग्राउंड को रीसेट करने पर हर बार महल की स्थिति कैसे बदलती है, इस बात पर जोर देने के लिए लेआउट अगल-बगल रखे गए हैं।

सीखने के परिणाम

  • यह पहचानें कि [If then else] ब्लॉक एक C ब्लॉक है जो रिपोर्ट किए गए बूलियन मान के आधार पर If या Else शाखा के अंदर के ब्लॉकों को चलाता है।
  • यह पहचानें कि किसी स्थिति की एक से अधिक बार जांच करने के लिए [If then else] ब्लॉक का उपयोग सामान्यतः [Repeat] या [Forever] ब्लॉक के साथ किया जाता है।
  • [If then else] ब्लॉक का उपयोग लूप के साथ क्यों किया जाता है, इसे पहचानें और समझाएं।
  • बताइए कि किसी प्रोजेक्ट में [If then else] ब्रांच को चलाने का कारण क्या होगा।

[If then else] ब्लॉक का उपयोग कैसे करें

यह चुनौती यूनिट 2 में मौजूद कैसल क्रैशर चुनौती से अलग है। यूनिट 2 की चुनौती में एक स्थिर खेल के मैदान पर इमारतों को गिराने के लिए सरल अनुक्रमण और ड्राइवट्रेन कमांड का उपयोग किया गया था।

यूनिट 2 से एक नमूना VEXcode VR प्रोजेक्ट। यह प्रोजेक्ट 'व्हेन स्टार्टेड' ब्लॉक से शुरू होता है और इसमें 6 ब्लॉक जुड़े हुए हैं। ब्लॉक क्रम से इस प्रकार हैं: ड्राइव वेलोसिटी को 100% पर सेट करें; टर्न वेलोसिटी को 100% पर सेट करें; 1550 मिमी आगे ड्राइव करें; 180 डिग्री दाएं मुड़ें; 700 मिमी आगे ड्राइव करें; फिर 90 डिग्री दाएं मुड़ें।

ड्राइवट्रेन कमांड अकेले वीआर रोबोट द्वारा दो या अधिक इमारतों को गिराने के लिए पर्याप्त नहीं होंगे क्योंकि डायनेमिक कैसल क्रैशर प्लेग्राउंड के लेआउट बदलते रहते हैं। ड्राइवट्रेन कमांड का एक सेट एक प्लेग्राउंड में काम कर सकता है, लेकिन दूसरे में नहीं। एक ऐसे एल्गोरिदम की आवश्यकता होगी जो सेंसर और चयन का उपयोग करता हो। इस प्रोजेक्ट में सशर्त कथनों के साथ चयन जोड़कर एक एल्गोरिदम बनाने के लिए [If then else] ब्लॉक का उपयोग किया जाएगा।

डायनामिक कैसल क्रैशर प्लेग्राउंड का ऊपर से लिया गया दृश्य, जिसमें केवल कुछ महल गिराए गए हैं और अन्य अछूते हैं, यह दर्शाता है कि जब महलों की स्थिति बेतरतीब ढंग से बदलती है तो केवल ड्राइवट्रेन कमांड ही अपर्याप्त होते हैं।

डायनामिक कैसल क्रैशर प्लेग्राउंड पर वीआर रोबोट द्वारा इमारतों को गिराने के लिए दो मुख्य चरण हैं।

  1. यदि वीआर रोबोट को कोई महलनुमा इमारत दिखाई देती है, तो उसे गिराने के लिए उसकी ओर आगे बढ़ें।
    1. अन्य सभी प्लेग्राउंड के विपरीत, डायनेमिक कैसल क्रैशर प्लेग्राउंड दीवारें नहीं हैं। क्योंकि डायनेमिक कैसल क्रैशर प्लेग्राउंडपर इमारतें ही एकमात्र वस्तुएं हैं, इसलिए इमारतों का पता लगाने के लिए डिस्टेंस सेंसर का उपयोग किया जा सकता है।

      डायनामिक कैसल क्रैशर प्लेग्राउंड का ऊपर से लिया गया दृश्य, जिसमें रोबोट लेआउट के निचले केंद्र में शुरुआती स्थिति में है, और एक बिंदीदार तीर रोबोट के ठीक सामने स्थित महल की ओर इशारा कर रहा है, जिसे एक लाल बॉक्स में हाइलाइट किया गया है। तीर का निशान यह दर्शाता है कि सेंसर महल को अपने सामने एक वस्तु के रूप में पहचान सकता है।
  2. यदि वीआर रोबोट को कोई महलनुमा इमारत नहीं मिलती है, तो मुड़कर दोबारा महलनुमा इमारत की जांच करें।
    1. क्योंकि डायनामिक कैसल क्रैशर प्लेग्राउंडपर इमारतें ही एकमात्र वस्तुएं हैं, इसलिए महल की इमारतों का पता लगाने के लिए डिस्टेंस सेंसर का उपयोग किया जा सकता है।

      डायनामिक कैसल क्रैशर प्लेग्राउंड का ऊपर से लिया गया दृश्य, जिसमें रोबोट शुरुआती स्थिति में है, और इसके दोनों ओर घुमावदार तीर हैं, जो यह दर्शाते हैं कि महल जैसी वस्तु का पता चलने तक मुड़ना आवश्यक है।

एक बार चरण 1 और 2 पूरे हो जाने के बाद, वीआर रोबोट चरण 1 पर वापस जा सकता है और दूरी सेंसर का उपयोग करके अगली इमारत को गिराने के लिए खोज सकता है।

  • VEXcode VR में एक नया प्रोजेक्ट शुरू करें और प्रोजेक्ट का नाम Unit9Lesson2 रखें।

    VEXcode VR टूलबार के केंद्र में स्थित प्रोजेक्ट नाम बॉक्स को लाल बॉक्स से हाइलाइट किया गया है, यह बॉक्स 'प्लेग्राउंड चुनें' बटन के बाईं ओर है। इस प्रोजेक्ट का नाम यूनिट 9 लेसन 2 है।
  • वर्कस्पेस में दो [Comment] ब्लॉक जोड़ें और ऊपर बताए गए चरणों का पालन करें।

    एक नया VEXcode VR प्रोजेक्ट जिसमें 'When started' ब्लॉक से जुड़े दो Comment ब्लॉक हैं। टिप्पणियाँ क्रमानुसार इस प्रकार हैं: दूरी सेंसर का उपयोग करके मिली इमारत को गिरा दें; और दूरी सेंसर का उपयोग करके इमारत खोजने के लिए मुड़ें।
  • ऊपर वर्णित प्रत्येक क्रिया को ट्रिगर करने के लिए [If then else] ब्लॉक का उपयोग किया जा सकता है। प्रत्येक क्रिया इस बात पर निर्भर करती है कि [If then else] ब्लॉक में बूलियन स्थिति TRUE या FALSE रिपोर्ट करती है या नहीं। [Comment] ब्लॉक के नीचे एक [If then else] ब्लॉक जोड़ें।

    वही VEXcode VR प्रोजेक्ट जिसमें दूसरे कमेंट के नीचे एक If then else ब्लॉक जोड़ा गया है। इफ ब्रांच का पैरामीटर खुला छोड़ दिया गया है।

    आपकी जानकारी के लिए

    [If then else] ब्लॉक एक C ब्लॉक है जो इनपुट के रूप में बूलियन रिपोर्टर ब्लॉक स्वीकार करता है। [If then else] ब्लॉक एक सशर्त कथन है जो किसी प्रोजेक्ट के प्रवाह को नियंत्रित करता है। [If then else] ब्लॉक शर्त पूरी होने पर निर्देशों का एक विशेष क्रम निष्पादित करेगा, और शर्त पूरी न होने पर निर्देशों का एक और सेट निष्पादित करेगा, जिससे प्रोजेक्ट प्रवाह 'शाखाओं' में विभाजित हो जाएगा। [If then else] में केवल एक ही शाखा निष्पादित होगी।

    VEXcode VR टूलबॉक्स से एक If then else ब्लॉक।
    • यदि शर्त TRUE बताई जाती है, तो If Then शाखा के अंदर के ब्लॉक चलाए जाते हैं।
    • यदि स्थिति को FALSE के रूप में रिपोर्ट किया जाता है, तो Else शाखा के अंदर के ब्लॉक चलाए जाते हैं।
    VEXcode VR प्रोजेक्ट का उपयोग If then else ब्लॉक की प्रत्येक शाखा के कार्य को दर्शाने के लिए किया जाता है। इस प्रोजेक्ट में, 'If then else' ब्लॉक को 'When started' से जोड़ा गया है और यह पढ़ता है: यदि सामने की दूरी के दौरान कोई वस्तु मिली, तो टिप्पणी - दूरी सेंसर का उपयोग करके मिली इमारत को गिरा दें और आगे बढ़ें; अन्यथा, दूरी सेंसर का उपयोग करके एक इमारत ढूंढें और दाईं ओर मुड़ें। 'इफ देन' शाखा को 'ड्राइव फॉरवर्ड इफ डिस्टेंस सेंसर डिटेक्ट्स एन ऑब्जेक्ट' नाम दिया गया है। 'एल्स' शाखा को इस प्रकार लेबल किया गया है: यदि दूरी सेंसर किसी वस्तु का पता नहीं लगाता है तो दाईं ओर मुड़ें।

    एक बार जब किसी एक शाखा के अंदर के सभी ब्लॉक चल जाते हैं, तो प्रोजेक्ट [If then else] ब्लॉक के बाहर अगले ब्लॉक पर चला जाएगा।

  • इस परियोजना में, खेल के मैदान पर इमारतों का पता लगाने के लिए डिस्टेंस सेंसर का उपयोग किया जा सकता है। [If then else] ब्लॉक में एक <Distance found object> ब्लॉक जोड़ें।

    पहले वाले VEXcode VR प्रोजेक्ट में ही, 'If then' ब्रांच के पैरामीटर के रूप में 'Distance Found' ऑब्जेक्ट ब्लॉक जोड़ा गया है। अब इफ देन ब्लॉक में लिखा है: यदि फ्रंट डिस्टेंस को कोई ऑब्जेक्ट मिला तो।

    आपकी जानकारी के लिए

    <Distance found object> ब्लॉक एक बूलियन रिपोर्टर ब्लॉक है जो यह रिपोर्ट करता है कि क्या डिस्टेंस सेंसर ने वीआर रोबोट के सामने कोई वस्तु पाई है। यह ब्लॉक तब TRUE रिपोर्ट करता है जब VR रोबोट के 3000 मिलीमीटर (mm) के भीतर कोई वस्तु या सतह मौजूद होती है।

    टूलबॉक्स से डिस्टेंस फाउंड ऑब्जेक्ट VEXcode VR ब्लॉक जो फ्रंट डिस्टेंस फाउंड ऑब्जेक्ट पढ़ता है?
  • अब [If then else] ब्लॉक की प्रत्येक शाखा को प्रोजेक्ट की शुरुआत में बनाए गए कमेंट्स का उपयोग करके परिभाषित करने की आवश्यकता है। जब <Distance found object> ब्लॉक TRUE रिपोर्ट करता है, तो VR रोबोट को उस इमारत की ओर बढ़ना चाहिए ताकि उसे गिरा दिया जा सके। उस [Comment] ब्लॉक को प्रोजेक्ट की 'If Then' शाखा में ले जाएं।

    वही VEXcode VR प्रोजेक्ट जिसमें पहला कमेंट If then ब्रांच के C के अंदर ले जाया गया है। अब प्रोजेक्ट में लिखा है: जब शुरू किया जाए, यदि सामने की दूरी से कोई वस्तु मिलती है, तो दूरी सेंसर का उपयोग करके मिली इमारत को गिरा दें।
  • यदि वीआर रोबोट किसी इमारत का पता नहीं लगाता है तो क्या होना चाहिए, इसके लिए दूसरे [टिप्पणी] ब्लॉक को प्रोजेक्ट की 'एल्स' शाखा में ले जाएं।

    वही VEXcode VR प्रोजेक्ट जिसमें else ब्रांच के C के अंदर दूसरी टिप्पणी है। अब प्रोजेक्ट में लिखा है: शुरू होने पर, यदि सामने की दूरी से कोई वस्तु मिलती है, तो दूरी सेंसर का उपयोग करके मिली इमारत को गिरा दें; अन्यथा, दूरी सेंसर का उपयोग करके इमारत खोजने के लिए मुड़ें।
  • [If then else] ब्लॉक की 'If Then' शाखा में एक [Drive] ब्लॉक जोड़ें।

    वही VEXcode VR प्रोजेक्ट जिसमें If then ब्रांच में पहले कमेंट के नीचे एक ड्राइव ब्लॉक को फॉरवर्ड मोड पर सेट किया गया है। अब 'इफ देन' शाखा इस प्रकार है: यदि फ्रंट डिस्टेंस को कोई वस्तु मिली, तो टिप्पणी: डिस्टेंस सेंसर का उपयोग करके मिली इमारत को गिरा दें; आगे बढ़ें।
  • जब <Distance found object> ब्लॉक FALSE रिपोर्ट करता है, तो VR रोबोट को मुड़कर खेल के मैदान पर एक इमारत ढूंढनी होगी। [If then else] ब्लॉक की 'Else' शाखा में [Comment] ब्लॉक के नीचे एक [Turn] ब्लॉक जोड़ें।

    वही VEXcode VR प्रोजेक्ट जिसमें टर्न ब्लॉक को एल्स ब्रांच में दूसरी टिप्पणी के ठीक नीचे सेट किया गया है। अब एल्स शाखा इस प्रकार है: एल्स, डिस्टेंस सेंसर का उपयोग करके किसी इमारत को खोजने के लिए टर्न की टिप्पणी; फिर दाएं मुड़ें।
  • प्रोजेक्ट का परीक्षण करने से पहले, एक और ब्लॉक जोड़ने की आवश्यकता है। [If then else] ब्लॉक स्टैक में अगले ब्लॉक पर जाने से पहले केवल बार स्थिति की जांच करेंगे। यूनिट 7 में, वीआर रोबोट को डाउन आई सेंसर की स्थिति की बार-बार जांच करने का निर्देश देने के लिए प्रोजेक्ट में एक [फॉरएवर] ब्लॉक जोड़ा गया था। यह सुनिश्चित करने के लिए कि डिस्टेंस सेंसर की स्थिति की बार जाँच की जा रही है, [If then else] ब्लॉक के चारों ओर वर्कस्पेस में एक [Forever] ब्लॉक खींचें।

    इस लेख में यह बताया गया है कि प्रोजेक्ट में फॉरएवर ब्लॉक कैसे जोड़ा जाए ताकि इफ देन एल्स ब्लॉक का पूरा हिस्सा फॉरएवर ब्लॉक के C कॉलम के अंदर आ जाए। अब प्रोजेक्ट में लिखा है: शुरू होने पर, हमेशा के लिए, यदि सामने की दूरी में कोई वस्तु मिलती है तो आगे बढ़ें; अन्यथा दाएं मुड़ें।
  • डायनामिक कैसल क्रैशर प्लेग्राउंड खोलें और प्रोजेक्ट चलाएं।

    कैसल क्रैशर प्लेग्राउंड का ऊपर से लिया गया एक दृश्य जिसमें तीन किले साबुत हैं और दो किले की इमारतें ढह गई हैं। रोबोट ऊपरी दाहिने कोने में एक ढहे हुए किले के बगल में स्थित है।
  • एक बार जब वीआर रोबोट कम से कम दो इमारतों को गिरा देता है, तो प्लेग्राउंड को पुनः लोड करें और डायनेमिक कैसल क्रैशर प्लेग्राउंड के दूसरे लेआउट पर प्रोजेक्ट चलाएं।

    कैसल क्रैशर प्लेग्राउंड का ऊपर से लिया गया एक दृश्य जिसमें तीन किले साबुत हैं और दो किले की इमारतें ढह गई हैं। रोबोट ऊपरी दाहिने कोने में एक ढहे हुए किले के बगल में स्थित है।
  • प्रोजेक्ट के प्रत्येक चरण में, वीआर रोबोट तब तक घूमेगा जब तक कि डिस्टेंस सेंसर द्वारा किसी इमारत का पता नहीं चल जाता, फिर वह उस इमारत की ओर बढ़ेगा और उसे गिरा देगा।

    वीआर रोबोट द्वारा प्लेग्राउंड के किनारे से महल के एक टुकड़े को धकेलने का एक साइड व्यू, लेकिन रोबोट प्लेग्राउंड की सीमा पर आगे बढ़ने लगता है जैसे कि वह भी किनारे से गिर जाएगा।
  • प्रोजेक्ट के चलने के दौरान, वीआर रोबोट किसी बिल्डिंग के टुकड़े को किनारे तक धकेल सकता है और वह प्लेग्राउंड से गिर सकता है। ऐसा इसलिए है क्योंकि <Distance found object> ब्लॉक अभी भी यह रिपोर्ट कर रहा है कि वीआर रोबोट के सामने कोई वस्तु मौजूद है। जब यह ब्लॉक TRUE रिपोर्ट करता है, तो VR रोबोट आगे बढ़ता है। जिसके चलते वीआर रोबोट टेबल से गिर गया।

इस पाठ के शेष भाग को जारी रखने के लिए अगला बटन चुनें।