From Test-Scratch-Wiki
| पूछिए () और रुकिए | |
ask [] and wait
| |
| Category | महसूस |
| Type | ढेर |
| Introduced in | १३फरवरी०९ (१.४ अल्फा) |
पूछिए () और रुकिए ब्लॉक एक महसूस ब्लॉक और एक स्टैक ब्लॉक है। ब्लॉक ब्लॉक का उपयोग करके स्प्राइट को प्रश्न पूछेगा और स्क्रीन के नीचे एक इनपुट बॉक्स दिखाएगा। यदि प्रश्न मंच या किसी छिपे हुए स्प्राइट द्वारा पूछा जा रहा है, तो प्रश्न इनपुट के ऊपर दिखाई देगा। स्क्रैचर्स इसमें टेक्स्ट इनपुट कर सकते हैं और सबमिट कर सकते हैं, और इनपुट को उत्तर ब्लॉक में संग्रहीत किया जाता है। उत्तर ब्लॉक स्वचालित रूप से नवीनतम इनपुट पर अपडेट हो जाता है।
यह ब्लॉक और उत्तर ब्लॉक स्क्रैच १.४ अल्फा के १३फरवरी०९ में जोड़े गए थे।
रूप
यदि इस ब्लॉक का उपयोग दिखाए जाने वाले स्प्राइट में किया जाता है, तो पूछा गया प्रश्न कहो () ब्लॉक के समान, एक स्पीच बबल में पॉप अप हो जाएगा। जब स्प्राइट छिपा हुआ होता है, या यदि स्टेज में ब्लॉक का उपयोग किया जाता है, तो प्रश्न इनपुट बॉक्स के ऊपर आ जाता है।
उदाहरण उपयोग
चूँकि यह ब्लॉक उपयोगकर्ताओं को अपने इच्छित किसी भी पाठ को इनपुट करने की अनुमति देता है, इसका व्यापक रूप से उपयोग तब किया जाता है जब उपयोगकर्ता को प्रोजेक्ट के साथ संचार करना होता है।
पूछिए () और रुकिए ब्लॉक के कुछ सामान्य उपयोग:
- चैटबॉट्स
— उपयोगकर्ता से जानकारी प्राप्त कर रहे हैं
ask [What's your name?] and wait say (join [Hello, ] (join (answer) [.]))
- प्राथमिकताएँ सेट करना
— निर्देशांक, रंग, इत्यादि
ask [What is your favourite colour?] and wait set [color v] effect to (answer) say [I turned into your favourite colour!]
- इनपुट प्राप्त करना
— उपयोगकर्ता से कमांड देने के लिए कहना
ask [Move how many steps?] and wait move (answer) steps
समाधान
संवेदन विधि
इस ब्लॉक को निम्नलिखित कोड के साथ कुछ हद तक दोहराया जा सकता है:
define ask (question) and wait
say (question)
delete all of [answer v]
set [position v] to [1] // अगला अक्षर कहाँ डालें?
repeat until <key (join [enter] []) pressed?>
detect keys
if <<key (right arrow v) pressed?> and <(position) < ((length of [answer v]) + (1))>> then
change [position v] by (1)
end
if <<key (left arrow v) pressed?> and <(position) > [1]>> then
change [position v] by (-1)
end
if <<key (join [][~]) pressed?> and <(position) > [1]>> then // टिल्ड बैकस्पेस कुंजी के रूप में कार्य करता है, क्योंकि स्क्रैच को यह पता लगाना असंभव है कि बैकस्पेस कुंजी दबाई गई है या नहीं
change [position v] by (-1)
delete (position) of [answer v]
end
wait until <not <key (any v) pressed?>>
end
say []
define detect keys //स्क्रीन रिफ्रेश के बिना चलाएं
set [all letters v] to [ !"#$%&'()*+,-./0123456789:;<=>?@[\\\]^_`abcdefghijklmnopqrstuvwxyz{|}]
set [letter # v] to [0]
repeat (length of (all letters))
change [letter # v] by (1)
if <key (letter (letter #) of (all letters)) pressed?> then
insert (letter (letter #) of (all letters)) at (position) of [answer v]
change [position v] by (1)
end
end
| यह पूरी तरह से काम नहीं करता. अधिक जानकारी के लिए यह परियोजना देखें। |
सूची "उत्तर" उत्तर खंड का स्थान ले लेगी।
हैट ब्लॉक विधि
इस पद्धति का उपयोग करके टेक्स्ट इनपुट को सही क्रम और गति में पुनः प्राप्त किया जा सकता है।
when [a v] key pressed add [a] to [queue v] when [b v] key pressed add [b] to [queue v] when [c v] key pressed add [c] to [queue v] //और प्रत्येक कुंजी के लिए आगे when [left arrow v] key pressed delete (length of [queue v]) of [queue v] // बैकस्पेस फ़ंक्शन when gf clicked delete all of [queue v] wait until <key (right arrow v) pressed?> //यह पुष्टि करेगा कि उपयोगकर्ता ने इनपुट कर लिया है set [clump v] to [] // खाली set [n v] to [1] repeat (length of [queue v]) //सूची को एक स्ट्रिंग में संकलित करें set [clump v] to (join (clump) (item (n) of [queue v]) change [n v] by (1) end (clump) // उत्तर होगा
रद्दीकरण
इस ब्लॉक के सक्रिय होने पर दिखाई देने वाले टेक्स्ट बॉक्स को रद्द करने के लिए, उस स्क्रिप्ट को रोकना होगा जो इस ब्लॉक को चलाती है। इसका एक उदाहरण यह है कि जब कोई व्यक्ति टेक्स्ट बॉक्स को रद्द करना चाहता है, तो एक निश्चित समय में उत्तर प्राप्त नहीं होता है, या यदि रद्द बटन दबाया जाता है।
रद्द करने की कुछ विधियाँ हैं:
क्लोन विधि
define ask (question) // इस कस्टम ब्लॉक के साथ प्रश्न पूछा जाता है set [question v] to (question) create clone of (myself v) when I start as a clone ask (question) and wait broadcast (stop message v) // इस प्रसारण के साथ प्रश्न बंद कर दिया गया है when I receive [stop message v] // यह सभी क्लोन हटा देगा. यदि यह वांछित नहीं है, तो क्लोन की पहचान करने का एक तरीका जोड़ा जाना चाहिए। delete this clone
रोक विधि
//स्प्राइट१ define ask [question] // इस कस्टम ब्लॉक के साथ प्रश्न पूछा जाता है set [question v] to (question) broadcast (ask v) broadcast (cancel v) // इस प्रसारण के साथ प्रश्न रद्द कर दिया गया है // स्प्राइट२ when I receive [ask v] ask (message) and wait when I receive [cancel v] stop [other scripts in sprite v] // ध्यान दें कि इससे स्प्राइट२ की सभी स्क्रिप्ट बंद हो जाएंगी, इसलिए बेहतर होगा कि स्प्राइट2 इन दो स्क्रिप्ट के अलावा खाली हो