स्नेक गेम, समझाया गया: इतिहास, रणनीति, स्कोरिंग की गणित, और हमने इसे आधुनिक वेब के लिए कैसे फिर से बनाया
ये पंक्तियाँ पढ़ने वाला लगभग हर व्यक्ति स्नेक खेल चुका है। बस का इंतज़ार करते हुए किसी Nokia फ़ोन पर। किसी ऐसी क्लास में जिसका कोई मतलब बचा नहीं था, तब किसी ग्राफ़िंग कैलकुलेटर पर। किसी ब्राउज़र टैब में जो असल में स्प्रेडशीट होना चाहिए था। यह उन गिने-चुने वीडियो गेमों में से एक है जो सचमुच पीढ़ियों को पार कर जाते हैं, और वह भी आपसे लगभग कुछ माँगे बिना: चार दिशाएँ, एक बढ़ती हुई रेखा, और भोजन का एक टुकड़ा।
यह प्रत्यक्ष सरलता एक जाल है, और यही वजह है कि हमने इसे फिर से बनाने में इतना समय लगाया। स्नेक किसी शुरुआती का प्रोजेक्ट लगता है। है नहीं। एक ऐसा स्नेक गेम जो अच्छा महसूस कराता है — जो कभी किसी कमांड को निगलता नहीं, जो सही ढंग से लिए गए किसी मोड़ पर कभी आपको मारता नहीं, जो कभी अटकता नहीं, जो आपकी स्क्रीन की रिफ़्रेश दर के अनुसार कभी आसान या मुश्किल नहीं होता — असल में एक माँग भरी इंजीनियरिंग की चीज़ है। ऑनलाइन आपको मिलने वाले ज़्यादातर संस्करण इनमें से कम-से-कम दो बातों में चूक जाते हैं।
यह लेख उस हर चीज़ का विस्तृत रूप है जो हमने सीखी। इसमें शामिल है कि स्नेक कहाँ से आया, नियमों का असल में क्या मतलब है, हमारे संस्करण में स्कोरिंग के पीछे की सटीक गणित, अच्छा खेलने के लिए ज़रूरी समय-सारणियाँ, वे रणनीतियाँ जो 200 के स्कोर और 2000 के स्कोर के बीच फ़र्क करती हैं, 21×21 ग्रिड के भीतर छिपा हैरान करने वाला कंप्यूटर विज्ञान, और वे इंजीनियरिंग फ़ैसले जो एक खिलौने और एक औज़ार के बीच अंतर पैदा करते हैं। अगर आप बस गेम में बेहतर होना चाहते हैं, तो रणनीति वाले भाग पर चले जाइए। और अगर आप इसे समझना चाहते हैं, तो शुरुआत से शुरू कीजिए।
अपनी वेबसाइट के लिए स्नेक गेम एम्बेड कोड:
आपने अभी-अभी इस गेम की पूरी बनावट पढ़ ली है: वह स्थिर 21×21 ग्रिड जो हर स्क्रीन आकार पर स्कोर को तुलनीय रखती है; तीन अलग-अलग मोड (दीवारें, पोर्टल, और पाँच बदलते लेआउट वाली भूलभुलैया); पाँच स्पीड, जिनमें से हर एक का अपना त्वरण-वक्र और अपनी न्यूनतम सीमा है; कॉम्बो गुणक वाली स्कोरिंग प्रणाली जो आक्रामकता को पुरस्कृत करती है; सुनहरी बेरियाँ जो सात सेकंड बाद समाप्त हो जाती हैं; लेवल-अप के वे क्षण जो हर पाँच बेरियों पर खेल बदल देते हैं; और वे सूक्ष्म इंजीनियरिंग फ़ैसले जो इस संस्करण को महज़ काम-चलाऊ नहीं, बल्कि तेज़ प्रतिक्रिया वाला महसूस कराते हैं। आपने रणनीति की तालिकाएँ, समय की गणित, और पूँछ-मुक्ति नियम के महत्व की ईमानदार व्याख्या देख ली। अब व्यावहारिक हिस्सा आता है: वही इंजन आपकी अपनी वेबसाइट पर लगाना, ताकि आपके पाठक आपके पन्नों को छोड़े बिना ही खेल सकें।
आप नीचे दिया कोड कॉपी करके इसे अपनी वेबसाइट में एम्बेड कर सकते हैं — लेखों में, साइडबार में, फ़ुटर में, या जहाँ भी आप चाहते हैं कि आपके पाठक एकाग्र और रणनीतिक खेल का एक पल जिएँ। यह गेम पूरी तरह ब्राउज़र में चलता है, एक पृथक कंटेनर के भीतर, जो आसपास के पन्ने को न पढ़ सकता है न छू सकता है। कोई गेम डेटा न भेजा जाता है, न संग्रहीत होता है, न लॉग होता है। ग्रिड की गणनाएँ स्थानीय रूप से होती हैं, स्कोर आपके पाठक के अपने ब्राउज़र के भंडारण में रहते हैं, और कीबोर्ड व टच नियंत्रण किसी सर्वर तक एक भी बार आए-गए बिना काम करते हैं। टैब बंद कीजिए और पूरा सत्र वाष्पित हो जाता है। आपके पाठक जो खेलते हैं वह उनके पास ही रहता है, और यही ठीक वह तरीका है जिससे स्नेक हमेशा काम करता आया है: महत्वपूर्ण ग्रिड नहीं, बल्कि उसे देखने वाले व्यक्ति के भीतर लिए गए फ़ैसले हैं।
एम्बेड कोड आपके दर्शकों से मेल खाने के लिए छह इंटरफ़ेस भाषाओं में उपलब्ध है: अंग्रेज़ी - स्पेनिश - फ़्रेंच - अरबी - चीनी - हिन्दी। भाषा सेटिंग औज़ार में लेबल, बटन और निर्देशों को नियंत्रित करती है, और यह भी तय करती है कि गेम का इंटरफ़ेस किस भाषा में दिखे। गेम स्वयं दुनिया के हर पाठक के लिए एक-सा है, पर वह किस भाषा में दिखे यह पूरी तरह आपके पाठक की पसंद है, जो पहली बार आने पर उसके ब्राउज़र से अपने-आप पहचान ली जाती है और उसके बाद याद रखी जाती है। अरबी के लिए, पूरा लेआउट दाएँ-से-बाएँ में बदल जाता है, इंटरफ़ेस का दर्पण बनकर, ताकि अनुभव स्वाभाविक लगे।
पते में यह पैरामीटर बदलकर इंटरफ़ेस की भाषा बदलिए: ?lang=hi
उपलब्ध भाषाएँ: en - es - fr - ar - zh - hi
1- पृथक iFrame कोड (लेखों और पन्नों के लिए आदर्श):
अगर आप कोई गाइड, कोई रणनीति-विश्लेषण, या गेम डिज़ाइन, दबाव में निर्णय-लेने, या इष्टतम खेल की गणित पर कोई गहन लेख प्रकाशित कर रहे हैं — ठीक उसी तरह जैसा आप अभी पढ़ रहे हैं — तो यह तरीका पूरी तरह काम करने वाले गेम को सीधे आपकी सामग्री के प्रवाह में रख देता है। पृथक iFrame औज़ार को सीमित रखता है, इसलिए आपका लेआउट साफ़ रहता है और आपके पाठक पन्ना दोबारा लोड किए बिना एक दौर खेल सकते हैं। सभी सुविधाएँ ठीक वैसे ही काम करती हैं जैसा बताया गया: तीन मोड (दीवारें, पोर्टल, भूलभुलैया), पाँच स्पीड (शांत, क्लासिक, तीव्र, उन्मत्त, और एक अतिरिक्त पायदान), कॉम्बो गुणक वाली स्कोरिंग प्रणाली, सुनहरी बेरियाँ, लेवल-अप के क्षण, और कीबोर्ड व टच नियंत्रण — यह सब आपकी वेबसाइट पर एक छोटे, स्वतःपूर्ण कमरे में।
<iframe data-tooliqo src="https://tools.tooliqo.co/snake-game/?lang=hi"
title="Tooliqo — snake-game"
style="width:100%;border:0;height:720px" height="720" loading="lazy" scrolling="no"
allowfullscreen allow="fullscreen; clipboard-write"></iframe>
<script src="https://tools.tooliqo.co/embed.js" async></script>
2- लचीला स्क्रिप्ट (साइडबार और टेम्पलेट के लिए उपयुक्त):
साइडबार, फ़ुटर, या विजेट क्षेत्रों के लिए, यह हल्का एम्बेड गेम को माँग पर लोड करता है और अपने कंटेनर के अनुसार ढल जाता है। यह वही इंजन है, वही तीन मोड, वही पाँच स्पीड, छह भाषाओं का वही समर्थन, वही स्कोरिंग प्रणाली, वही सुनहरी बेरियाँ, वही लेवल-अप तंत्र; बस उन जगहों के लिए पैक किया गया जहाँ कोई iFrame भारी लग सकता है। इसे अपने टेम्पलेट में रखिए, और गेम वहीं, जब चाहिए तब, दिख जाएगा। आपके पाठक ऊँचे स्कोर का पीछा कर सकते हैं, भूलभुलैया मोड में महारत पा सकते हैं, या बस एक झटपट दौर खेल सकते हैं — वह भी आपकी वेबसाइट छोड़े बिना।
<div class="tooliqo-tool" data-tool="snake-game" data-lang="hi"
data-height="720"></div> <script src="https://tools.tooliqo.co/embed.js" async></script>
नोट: दोनों तरीके वही गेम लोड करते हैं, वही जिसके तीन मोड, पाँच स्पीड, कॉम्बो स्कोरिंग, सुनहरी बेरियों, लेवल-अप के क्षणों और छह भाषाओं के बारे में आपने अभी पढ़ा। औज़ार आपके पाठकों के उपकरणों पर डार्क मोड और घटी-गति (reduced motion) सेटिंग्स का सम्मान करता है। कोई वॉटरमार्क नहीं, कोई दैनिक सीमा नहीं, कोई डेटा-संग्रह नहीं। बस गेम, अपना काम करता हुआ, आपकी वेबसाइट पर। और अगर कोई पाठक एक दौर खेलता है, अपनी ही पूँछ से हारता है, फिर कोशिश करता है, और आख़िरकार अपना रिकॉर्ड तोड़ देता है, तो औज़ार ने वही किया जिसके लिए वह बनाया गया था। बाक़ी उन पर निर्भर है, और यही तो हमेशा मक़सद रहा है।
यह गाइड क्या-क्या कवर करती है
- स्नेक के नियम, और वे इतने अच्छे ढंग से डिज़ाइन क्यों किए गए हैं
- एक पूरा इतिहास: 1976 के Blockade से slither.io और उससे आगे तक
- हमारे स्नेक गेम के पर्दे के पीछे: हमने क्या बनाया और क्यों
- पूरा स्कोरिंग संदर्भ, सभी सूत्रों और तालिकाओं सहित
- स्पीड, समय और प्रतिक्रिया-खिड़की रूपांतरण की तालिकाएँ
- तीन मोड: दीवारें, पोर्टल और भूलभुलैया
- रणनीति: स्नेक में सचमुच बेहतर कैसे बनें
- स्नेक की गणित, जिसमें यह भी कि हमारे बोर्ड में सटीक चक्र क्यों नहीं है
- परदे के नीचे: ऐसा स्नेक गेम कैसे बनाएँ जो खिलाड़ी से झूठ न बोले
- भाषाएँ, सुगम्यता, और किसी भी स्क्रीन पर खेलना
- पूरा नियंत्रण संदर्भ
- अक्सर पूछे जाने वाले प्रश्न
- स्नेक शब्दावली
स्नेक के नियम, और वे इतने अच्छे ढंग से डिज़ाइन क्यों किए गए हैं
स्नेक के पूरे नियम चार वाक्यों में समा जाते हैं। आप जुड़ी हुई कोशिकाओं से बनी एक रेखा को नियंत्रित करते हैं। सिर एक बार में एक कोशिका आगे बढ़ता है और कभी रुकता नहीं। आप इसे ऊपर, नीचे, बाएँ या दाएँ मोड़ सकते हैं, पर कभी सीधे पीछे अपनी ही गर्दन में नहीं। जब सिर भोजन के किसी टुकड़े तक पहुँचता है, तो साँप एक कोशिका बढ़ जाता है और कहीं और एक नया टुकड़ा प्रकट हो जाता है; और जब सिर किसी दीवार या अपने ही शरीर के किसी हिस्से से टकराता है, तो दौर समाप्त हो जाता है।
इसे केवल सरल नहीं, बल्कि एक महान डिज़ाइन बनाने वाली चीज़ है वह फ़ीडबैक लूप। लगभग हर दूसरे आर्केड गेम में, गेम में बेहतर होते जाना गेम को आसान बनाता है। स्नेक में, हर सफलता अगले पल को कठिन बना देती है, क्योंकि इनाम ही बाधा है। जो सेब आपने तीन मिनट पहले खाया था, वह अब एक ऐसी दीवार है जिससे बचकर निकलना है। शुरुआती गेम डिज़ाइन में और किसी चीज़ ने जोखिम और इनाम को इतनी सफ़ाई से एक ही वस्तु में नहीं समेटा।
यहाँ एक दूसरा, अधिक सूक्ष्म डिज़ाइन-टुकड़ा भी काम कर रहा है। चूँकि साँप कभी रुकता नहीं, आप गेम की दुनिया के भीतर सोचने के लिए ठहर नहीं सकते। झिझक का हर सेकंड आगे की एक ऐसी कोशिका-चाल है जिसकी आपने योजना नहीं बनाई थी। इसलिए स्नेक कोई ऐसी प्रतिक्रिया-आधारित खेल नहीं है जो पहेली का भेस धरे हो; यह एक निश्चित लय पर खेली जाने वाली पहेली-आधारित खेल है, जो कहीं अधिक दुर्लभ और दिलचस्प चीज़ है।
आख़िर में, स्नेक का कौशल-वक्र लगभग सिद्ध है। एक बिल्कुल नया खिलाड़ी तीस सेकंड जी सकता है और तीन सेब खा सकता है। एक अनुभवी खिलाड़ी बोर्ड का एक-तिहाई भर सकता है। ज्यामिति समझने वाला खिलाड़ी, सिद्धांततः, पूरा बोर्ड भर सकता है। इन परिणामों के बीच की दूरी पूरी तरह ज्ञान और योजना की बात है — हार्डवेयर की नहीं, संयोग की नहीं, और पैसे की नहीं।
स्नेक का पूरा इतिहास: Blockade से आधुनिक ब्राउज़र तक
1976: Blockade, वह पुरखा जिसे किसी ने स्नेक नहीं कहा
यह विधा नवंबर 1976 में Blockade नामक एक आर्केड मशीन से शुरू होती है, जिसे सैन डिएगो की Gremlin Industries ने विकसित किया और Lane Hauck ने डिज़ाइन किया, जबकि प्रोग्रामिंग का काम Ago Kiss ने किया। यह श्वेत-श्याम था, दो खिलाड़ियों वाला था, और उसमें कहीं भी "साँप" शब्द नहीं था। हर खिलाड़ी चार दिशात्मक बटनों से स्क्रीन पर एक निशान चलाता था; निशान अपने पीछे एक ठोस लकीर छोड़ता था, और हारने वाला वही होता था जो पहले किसी दीवार या लकीर से टकराता।
कहा जाता है कि यह विचार Hauck के असेंबली भाषा में एक सरल संकल्पना पर प्रयोग से जन्मा: एक चलती हुई वस्तु जो कभी उस जगह पर दोबारा न जा सके जहाँ वह पहले रह चुकी हो। Gremlin ने इसे 1976 में शिकागो के Music Operators of America सम्मेलन में प्रस्तुत किया, जहाँ इसका बेहद गर्मजोशी से स्वागत हुआ — इतना कि Gremlin के बड़ी मात्रा में आपूर्ति कर पाने से पहले ही कई दूसरे निर्माता अपने-अपने संस्करण बाज़ार में उतार चुके थे। पहला बड़ा स्नेक गेम अपने रिलीज़ होने से पहले ही नक़ल कर लिया गया।
1977 से 1982 तक: नक़लों की लहर और एकल-खिलाड़ी स्नेक का जन्म
Atari ने 1977 में Atari 2600 कंसोल के लिए Surround को उसके शुरुआती शीर्षकों में से एक के रूप में जारी किया; Sears ने वही गेम Chase नाम से बेचा। घरेलू कंप्यूटरों पर, Worm नामक एक संस्करण 1978 में TRS-80 पर आया, जिसे P. Trefonas ने लिखा और CLOAD पत्रिका के ज़रिए बाँटा गया, और उसके बाद Commodore PET तथा Apple II के लिए संस्करण आए।
निर्णायक बदलाव दिसंबर 1982 में आया, जब Rock-Ola ने Nibbler जारी किया। यही वह क्षण है जब यह विधा वह गेम बनती है जिसे हम पहचानते हैं। Nibbler एकल-खिलाड़ी था, इसमें बत्तीस अलग-अलग भूलभुलैयाँ थीं, और सबसे अहम बात, इसमें भोजन था: साँप इसलिए बढ़ता था क्योंकि आप उसे खिलाते थे, इसलिए नहीं कि समय बीतता था। तब से लगभग हर स्नेक गेम Blockade का नहीं, बल्कि Nibbler का वंशज है।
Nibbler ने आर्केड की सबसे बड़ी कहानियों में से एक को भी जन्म दिया। यह नौ अंकों वाले स्कोर-काउंटर वाला पहला आर्केड गेम था, जिसका मतलब था कि एक अरब का स्कोर सैद्धांतिक रूप से संभव था, और Rock-Ola इसे पहली बार पाने वाले खिलाड़ी को एक मुफ़्त मशीन देती थी। Tom Asaki आयोवा के ओटमवा स्थित Twin Galaxies आर्केड में इसके क़रीब पहुँचे, एक बार 79.3 करोड़ तक पहुँचे, इससे पहले कि जॉयस्टिक सचमुच टूट गई। जनवरी 1984 में, Tim McVey ने एक ही सिक्के पर चालीस घंटे से अधिक खेला और 1,000,042,270 अंकों के साथ समाप्त किया: वीडियो गेम इतिहास का पहला एक-अरब का स्कोर। ओटमवा शहर ने 28 जनवरी 1984 को "Tim McVey दिवस" घोषित किया, जिससे वे अपने नाम पर नगरपालिका अवकाश पाने वाले पहले वीडियो गेम खिलाड़ी बन गए। यह पूरी गाथा बाद में Man vs Snake फ़िल्म में दर्ज की गई।
1991: स्नेक ऑपरेटिंग सिस्टम में भाग निकला
जब Microsoft ने 1991 में MS-DOS 5.0 भेजा, तो उसमें QBasic शामिल था, और QBasic के साथ NIBBLES.BAS नामक एक उदाहरण प्रोग्राम आता था। बाद में प्रोग्रामर बनने वाले बहुत-से लोगों के लिए, यह पहला गेम था जिसका सोर्स कोड उन्होंने कभी पढ़ा। इसके महत्व को बढ़ा-चढ़ाकर बताना कठिन है: स्नेक केवल एक गेम नहीं, बल्कि वह आदर्श "पहला असली प्रोग्राम" बन गया, वह चीज़ जिसे आप ख़ुद को यह साबित करने के लिए बनाते थे कि आप चीज़ें बना सकते हैं।
लगभग इसी दौर में, स्नेक ग्राफ़िंग कैलकुलेटरों पर फैल गया। कक्षाओं पर हावी Texas Instruments की मशीनों में इसे चलाने भर की स्क्रीन और इसे चलाने भर का प्रोसेसर था, और वे तमाम विकर्षण नहीं थे जो किसी अधिक महत्वाकांक्षी चीज़ को खेलने लायक बनाते।
1997: Nokia 6110, और किसी गेम को अब तक मिला सबसे बड़ा दर्शक-वर्ग
दिसंबर 1997 में, Nokia ने 6110 पेश किया, एक व्यावसायिक हैंडसेट जिसकी स्क्रीन महज़ 84×48 पिक्सेल की एकवर्णी थी। Nokia की मार्केटिंग टीम ने Taneli Armanto नामक एक सॉफ़्टवेयर इंजीनियर से इसके लिए कुछ छोटे गेम बनाने को कहा था। उन्होंने तीन बनाए: Memory, Logic और Snake।
Armanto ने कठोर बंदिशों के तहत डिज़ाइन किया — दो रंग-छटाएँ, हरियाली-सी झाईं वाली LCD स्क्रीन पर गहरे पिक्सेल, जॉयस्टिक की जगह अंकों वाला कीपैड, और बिना किसी फ़ालतू चीज़ वाला प्रोसेसर। ये बंदिशें ही ठीक वह वजह हैं जिससे यह गेम टिका रहा। हटाने को कुछ बचा ही नहीं था। अनुमान है कि मूल स्नेक लगभग 35 करोड़ उपकरणों तक पहुँचा; और 1997 से 2007 के बीच, Nokia ने पहले से इंस्टॉल किए गए एक संस्करण के साथ 40 करोड़ से अधिक हैंडसेट भेजे। नई सहस्राब्दी के शुरुआती दौर में एक समय ऐसा था जब किसी भी दिन पृथ्वी पर स्नेक खेलने वालों की संख्या किसी भी अन्य वीडियो गेम से अधिक थी।
Armanto के डिज़ाइन का एक ब्योरा कहीं अधिक जाना जाना चाहिए, क्योंकि हमने उसका दर्शन उधार लिया है। उन्होंने टक्कर से ठीक पहले जान-बूझकर एक बेहद छोटी देरी डाली — चंद मिलीसेकंड जिनके दौरान एक देर से आया कमांड भी आपको बचा सकता था। यह एक छोटा-सा, मानवीय डिज़ाइन-टुकड़ा है जो चुपचाप यह मानता है कि खिलाड़ी तंत्रिका-तंत्र वाला एक इंसान है, कोई स्टेट मशीन नहीं।
Snake II साल 2000 में Nokia 3310 पर आया, एक ऐसे हैंडसेट पर जिसकी 12.6 करोड़ से अधिक इकाइयाँ बिकीं। इसने वे तीन सुविधाएँ जोड़ीं जिन्हें ज़्यादातर आधुनिक संस्करण आज भी नक़ल करते हैं: एक लपेटने वाला मैदान जहाँ आप एक किनारे से निकलकर सामने वाले किनारे से लौटते हैं, अखाड़े के भीतर भूलभुलैया-बाधाएँ, और सीमित-समय वाला बोनस भोजन जो अतिरिक्त अंक देता है। हमारा पोर्टल मोड, हमारा भूलभुलैया मोड, और हमारी सुनहरी बेरियाँ Snake II के सीधे वंशज हैं, और हम यह ख़ुशी से कहते हैं।
2016 से आगे: slither.io और ब्राउज़र का युग
मार्च 2016 में, Steve Howse नामक एक स्वयं-सीखे डेवलपर ने ब्राउज़र, iOS और Android के लिए slither.io जारी किया। उन्होंने स्नेक की संकल्पना ली, उसे विशाल पैमाने पर बहु-खिलाड़ी बनाया, साँपों को ग्रिड में जकड़े रहने के बजाय चिकना और घुमावदार बनाया, और केंद्रीय नियम को उलट दिया: जब आपका सिर किसी दूसरे खिलाड़ी से टकराता है तब आप मरते हैं, पर आप ख़ुद को बेरोकटोक काट सकते हैं। बड़े YouTube चैनलों के ज़ोरदार प्रचार से, यह ऐप स्टोर पर छा गया, उस गर्मी की सबसे अधिक देखी गई वेबसाइटों में से एक बना, और अकेले Android पर दस करोड़ डाउनलोड पार कर गया।
slither.io ने इस विधा के बारे में एक अहम बात साबित की। स्नेक कोई निश्चित गेम नहीं है; यह एक यांत्रिकी है — एक बढ़ती हुई रेखा जिसे किसी चीज़ को काटना नहीं है — और यह यांत्रिकी बेहद विविध डिज़ाइनों को ढो सकती है। ग्रिड वाला क्लासिक संस्करण ग़ायब नहीं हुआ; वह बस वह "आदर्श" संस्करण बन गया जिसकी ओर हर ब्राउज़र-गेम साइट, हर सर्च-इंजन ईस्टर एग, और कोडिंग सीखने का हर ट्यूटोरियल लौटता है।
एक नज़र में समयरेखा
| वर्ष | शीर्षक या घटना | मंच | यह क्यों मायने रखा |
|---|---|---|---|
| 1976 | Blockade (Gremlin Industries, Lane Hauck द्वारा डिज़ाइन) | आर्केड | मारक लकीर की यांत्रिकी बनाई; केवल दो खिलाड़ी |
| 1977 | Surround (Chase नाम से भी बिका) | Atari 2600 | शुरुआती शीर्षक के रूप में संकल्पना घर तक लाई |
| 1978 | Worm, P. Trefonas द्वारा | TRS-80 | पहला व्यापक रूप से प्रसारित घरेलू-कंप्यूटर संस्करण |
| 1982 | Nibbler (Rock-Ola) | आर्केड | एकल, भोजन से वृद्धि, 32 भूलभुलैयाँ; असली आदर्श |
| 1984 | Tim McVey ने Nibbler पर 1,000,042,270 बनाए | आर्केड | वीडियो गेम इतिहास का पहला एक-अरब स्कोर |
| 1991 | MS-DOS 5.0 में QBasic के साथ NIBBLES.BAS | पीसी | एक पीढ़ी द्वारा पढ़ा गया पहला गेम सोर्स कोड बना |
| 1997 | Snake, Taneli Armanto द्वारा | Nokia 6110 | लगभग 35 करोड़ उपकरण; मोबाइल गेमिंग शुरू की |
| 2000 | Snake II | Nokia 3310 | लपेटने वाले किनारे, भूलभुलैयाँ और बोनस भोजन जोड़े |
| 2016 | slither.io, Steve Howse द्वारा | ब्राउज़र, iOS, Android | विशाल बहु-खिलाड़ी पुनर्रचना; वैश्विक परिघटना |
| आज | इस जैसे ब्राउज़र-मूल संस्करण | कोई भी उपकरण | कोई इंस्टॉल नहीं, कोई खाता नहीं, तुरंत खेल, पूरी सुगम्यता |
हमारे स्नेक गेम के पर्दे के पीछे: हमने क्या बनाया और क्यों
हमारा संस्करण शून्य से एक स्वतःपूर्ण एकल फ़ाइल के रूप में बनाया गया, बिना किसी बाहरी लाइब्रेरी, बिना किसी वेब फ़ॉन्ट, और बिना किसी नेटवर्क अनुरोध के। यह बंदिश जान-बूझकर थी। किसी लेख के भीतर एम्बेड किया गया गेम तुरंत लोड होना चाहिए, उसे कभी अपने मेज़बान पन्ने को धीमा नहीं करना चाहिए, और उसे कभी इसलिए नहीं टूटना चाहिए क्योंकि किसी तीसरे-पक्ष के सर्वर का दिन ख़राब रहा।
दृश्य रूप से, हम एक ऐसी दिशा में गए जिस पर ज़्यादातर स्नेक गेम नहीं जाते। इस विधा का डिफ़ॉल्ट रूप है काले पर नियॉन हरा — एक ऐसा आर्केड घिसा-पिटा रूप जिसे उठाना आसान है और सोच-समझकर बनाना मुश्किल। हमने इसके बजाय एक "वाइवेरियम" बनाया: गहरे मोरपंखी हरे खोल के भीतर गर्म रेतीले रंग का एक मैदान, जिसमें एक जेड-रंग का साँप है जिसका शरीर धीरे-धीरे पतला होता जाता है, जिसका असली सिर है, जिसकी आँखें चलने की दिशा का अनुसरण करती हैं, और जिसकी जीभ बीच-बीच में लपलपाती है। भोजन कोई वर्ग नहीं, बल्कि डंठल और चमक वाली एक बेरी है।
फिर भी, सबसे बड़ा दृश्य फ़ैसला कोई रंग नहीं है। वह गति है। ज़्यादातर स्नेक कार्यान्वयनों में, साँप एक कोशिका से दूसरी में तुरंत छलाँग लगा जाता है, क्योंकि रेंडरर ठीक गेम की अवस्था बनाता है और गेम की अवस्था ग्रिड-निर्देशांकों की एक सूची है। हमारा संस्करण अंतर्वेशन (interpolation) करता है: एक तार्किक चाल और अगली के बीच, हर खंड वहाँ से, जहाँ वह था, वहाँ की ओर, जहाँ वह जाएगा, सहजता से सरक जाता है। गेम का तर्क एक कठोर ग्रिड बना रहता है — यह निष्पक्षता के लिए मायने रखता है — पर प्रस्तुति सतत है। यही किसी प्रोटोटाइप और किसी उत्पाद के बीच का फ़र्क है, और इसकी क़ीमत शायद तीस पंक्तियों का कोड है।
सुविधाओं का सारांश
| क्षेत्र | विवरण |
|---|---|
| बोर्ड | हर स्क्रीन आकार पर स्थिर 21 × 21 (441 कोशिकाएँ), ताकि स्कोर तुलनीय रहें |
| मोड | दीवारें, पोर्टल, भूलभुलैया (पाँच बदलते भूलभुलैया लेआउट) |
| स्पीड | शांत, क्लासिक, तीव्र, उन्मत्त; हर एक का अपना त्वरण-वक्र और न्यूनतम सीमा |
| स्कोरिंग | स्तर बोनस, पाँच गुना तक कॉम्बो गुणक, तीन गुना मूल्य वाली सुनहरी बेरियाँ |
| रिकॉर्ड | हर मोड और स्पीड के संयोजन के लिए अलग-अलग सहेजा गया सर्वोच्च स्कोर |
| आँकड़े | खेले गए दौर, खाई गई बेरियाँ, सबसे लंबा साँप, कुल खेल-समय |
| नियंत्रण | दिशा-कुंजियाँ, WASD, AZERTY कुंजियाँ, ऑन-स्क्रीन दिशा-पैड और स्वाइप हाव-भाव |
| प्रदर्शन | हल्की और गहरी थीम, वास्तविक फ़ुलस्क्रीन, चौड़ी स्क्रीनों पर दो-स्तंभ लेआउट |
| भाषाएँ | अंग्रेज़ी, फ़्रेंच, स्पेनिश, चीनी, हिन्दी, और दाएँ-से-बाएँ समर्थन वाली अरबी |
| ऑडियो | ब्राउज़र में उत्पन्न सिंथेटिक ध्वनियाँ, डिफ़ॉल्ट रूप से मौन, मोबाइल पर हैप्टिक फ़ीडबैक सहित |
| सुगम्यता | कीबोर्ड से प्रयोग योग्य, स्क्रीन रीडर के लिए घोषणाएँ, घटी-गति का समर्थन |
ग्रिड अपना आकार कभी क्यों नहीं बदलती
यह वह डिज़ाइन-फ़ैसला है जिस पर हमने सबसे ज़्यादा बहस की, इसलिए यह व्याख्या का हक़दार है। कई ब्राउज़र स्नेक गेम ग्रिड को विंडो के अनुसार मापते हैं: बड़ी स्क्रीन को ज़्यादा कोशिकाएँ मिलती हैं। यह उदार लगता है। असल में यह अनुचित है, क्योंकि इसका मतलब है कि किसी फ़ोन पर 500 का स्कोर और किसी कंप्यूटर पर 500 का स्कोर अलग-अलग खेलों को मापते हैं। बड़ा बोर्ड आसान है — पैंतरे के लिए ज़्यादा जगह, और आपकी अपनी पूँछ के समस्या बनने से पहले ज़्यादा दौड़-पट्टी।
हमने ग्रिड को 21×21 पर स्थिर कर दिया और इसके बजाय कोशिका के आकार को मापा। किसी फ़ोन पर हर कोशिका सोलह पिक्सेल हो सकती है; किसी बड़े मॉनिटर पर फ़ुलस्क्रीन में, हर कोशिका पचास के क़रीब पहुँच सकती है। बोर्ड उपलब्ध जगह घेरता है, पर गेम हर जगह एक-सा है। आपका निजी रिकॉर्ड आपके हर उपकरण पर एक ही चीज़ का अर्थ रखता है।
20 के बजाय 21 चुनना भी जान-बूझकर था: पंक्तियों और स्तंभों की विषम संख्या एक असली केंद्रीय कोशिका देती है, जिससे शुरुआती स्थिति सममित हो जाती है। और जैसा हम आगे देखेंगे, इसका एक सचमुच दिलचस्प गणितीय परिणाम भी है।
पूरा स्कोरिंग संदर्भ
स्कोरिंग प्रणाली में हर चीज़ पूर्णांक अंकगणित का उपयोग करती है, जिसका मतलब है कि हर स्कोर बिल्कुल दोहराने योग्य है और कोई फ़्लोटिंग-पॉइंट आश्चर्य नहीं है। यहाँ पूरी प्रणाली है, पूरी तरह लिखी हुई।
मूल समीकरण
| राशि | समीकरण | टिप्पणियाँ |
|---|---|---|
| स्तर | स्तर = 1 + ⌊बेरियाँ ÷ 5⌋ | बेरियाँ दौर की शुरुआत से गिनी जाती हैं |
| बेरी का आधार मूल्य | आधार = 10 + 2 × (स्तर − 1) | प्रति स्तर 2 अंक बढ़ता है, असीमित रूप से |
| कॉम्बो गुणक | गुणक = min(5, 1 + ⌊शृंखला ÷ 3⌋) | दो बेरियों के बीच 5 सेकंड से अधिक बीतने पर शृंखला रीसेट |
| प्राप्त अंक | प्राप्त = आधार × गुणक × सुनहरा | सुनहरी बेरी के लिए सुनहरा = 3, अन्यथा 1 |
| चाल-अंतराल | चरण = max(न्यूनतम, आरंभ − (स्तर − 1) × क्षय) | दो तार्किक चालों के बीच मिलीसेकंड |
| साँप की गति | कोशिकाएँ/सेकंड = 1000 ÷ चरण | चाल-अंतराल से सीधा रूपांतरण |
| बोर्ड पार करने का समय | सेकंड = 21 × चरण ÷ 1000 | पूरे बोर्ड की चौड़ाई पार करने में लगा समय |
| प्रतिक्रिया दूरी | कोशिकाएँ = प्रतिक्रिया समय ÷ चरण | जब आप प्रतिक्रिया करते हैं तब साँप कितना बढ़ता है |
| साँप की लंबाई | लंबाई = 3 + बेरियाँ | साँप हमेशा तीन कोशिकाओं से शुरू होता है |
एक नज़र में स्थिरांक
| स्थिरांक | मान | प्रभाव |
|---|---|---|
| ग्रिड आकार | 21 × 21 = 441 कोशिकाएँ | पूरा खेल-मैदान |
| आरंभिक लंबाई | 3 कोशिकाएँ | सिर और दो शरीर-खंड |
| आधार अंक | 10 | स्तर 1 पर बिना कॉम्बो एक बेरी का मूल्य |
| स्तर बोनस | प्रति स्तर +2 अंक | गुणक के साथ संयोजित होता है |
| प्रति स्तर बेरियाँ | 5 | हर 5 बेरियों पर, स्तर 1 बढ़ता है |
| कॉम्बो खिड़की | 5000 मिलीसेकंड | शृंखला बनाए रखने के लिए दो बेरियों के बीच अधिकतम अंतराल |
| कॉम्बो चरण | 3 बेरियाँ | हर 3 शृंखलाबद्ध बेरियों पर, गुणक 1 बढ़ता है |
| कॉम्बो सीमा | ×5 | गुणक कभी पाँच से अधिक नहीं होता |
| सुनहरी बेरी लाभ | ×3 | कॉम्बो गुणक के ऊपर लागू होता है |
| सुनहरी बेरी आयु | 7000 मिलीसेकंड | फिर वह मंद होकर ग़ायब हो जाती है |
| सुनहरी बेरी बारंबारता | हर 4 बेरियों पर | केवल तब जब बोर्ड पर पहले से कोई न हो |
स्तरों की प्रगति
| स्तर | खाई बेरियाँ | साँप की लंबाई | बेरी आधार मूल्य | ×5 कॉम्बो पर मूल्य | ×5 पर सुनहरी बेरी |
|---|---|---|---|---|---|
| 1 | 0–4 | 3–7 | 10 | 50 | 150 |
| 2 | 5–9 | 8–12 | 12 | 60 | 180 |
| 3 | 10–14 | 13–17 | 14 | 70 | 210 |
| 4 | 15–19 | 18–22 | 16 | 80 | 240 |
| 5 | 20–24 | 23–27 | 18 | 90 | 270 |
| 6 | 25–29 | 28–32 | 20 | 100 | 300 |
| 7 | 30–34 | 33–37 | 22 | 110 | 330 |
| 8 | 35–39 | 38–42 | 24 | 120 | 360 |
| 9 | 40–44 | 43–47 | 26 | 130 | 390 |
| 10 | 45–49 | 48–52 | 28 | 140 | 420 |
| 15 | 70–74 | 73–77 | 38 | 190 | 570 |
| 20 | 95–99 | 98–102 | 48 | 240 | 720 |
| 30 | 145–149 | 148–152 | 68 | 340 | 1020 |
कॉम्बो गुणक
कॉम्बो स्कोर का वह हिस्सा है जिसे ज़्यादातर खिलाड़ी अनदेखा करते हैं, और यह बाक़ी सबको मिलाकर से भी अधिक मूल्यवान है। पिछली बेरी के पाँच सेकंड के भीतर खाई गई हर बेरी आपकी शृंखला को बढ़ाती है। शृंखला की हर तीसरी बेरी गुणक को एक बढ़ाती है, पाँच तक।
| मौजूदा शृंखला में बेरियाँ | गुणक | स्तर 1 पर बेरी मूल्य | स्तर 10 पर बेरी मूल्य |
|---|---|---|---|
| पहली से तीसरी | ×1 | 10 | 28 |
| चौथी से छठी | ×2 | 20 | 56 |
| सातवीं से नौवीं | ×3 | 30 | 84 |
| दसवीं से बारहवीं | ×4 | 40 | 112 |
| तेरहवीं और आगे | ×5 | 50 | 140 |
प्रति बेरी अंकों का पूरा आव्यूह
| स्तर | ×1 | ×2 | ×3 | ×4 | ×5 |
|---|---|---|---|---|---|
| 1 | 10 | 20 | 30 | 40 | 50 |
| 2 | 12 | 24 | 36 | 48 | 60 |
| 3 | 14 | 28 | 42 | 56 | 70 |
| 4 | 16 | 32 | 48 | 64 | 80 |
| 5 | 18 | 36 | 54 | 72 | 90 |
| 6 | 20 | 40 | 60 | 80 | 100 |
| 7 | 22 | 44 | 66 | 88 | 110 |
| 8 | 24 | 48 | 72 | 96 | 120 |
| 9 | 26 | 52 | 78 | 104 | 130 |
| 10 | 28 | 56 | 84 | 112 | 140 |
एक असली दौर से हल किया हुआ उदाहरण
जब हमने पूरा हुआ गेम परखा, तो हमने एक स्वचालित खिलाड़ी लिखा जो रेंडर किए गए कैनवस से सीधे बेरी की स्थिति पढ़ता है और उसकी ओर बढ़ता है। एक दर्ज दौर में, उसने पाँच बेरियाँ खाईं और ठीक 70 के स्कोर, 8 की लंबाई और स्तर 2 के साथ समाप्त किया। यह संख्या रुककर देखने योग्य है, क्योंकि यह पूरी प्रणाली को एक ही पंक्ति में दिखा देती है।
- बेरी 1: स्तर 1, शृंखला में स्थान 1, गुणक ×1 → 10 अंक (चालू योग 10)
- बेरी 2: स्तर 1, शृंखला में स्थान 2, गुणक ×1 → 10 अंक (योग 20)
- बेरी 3: स्तर 1, शृंखला में स्थान 3, गुणक ×1 → 10 अंक (योग 30)
- बेरी 4: स्तर 1, शृंखला में स्थान 4, गुणक ×2 → 20 अंक (योग 50)
- बेरी 5: स्तर 1, शृंखला में स्थान 5, गुणक ×2 → 20 अंक (योग 70), और फिर स्तर 2 पर चढ़ जाता है
ध्यान दें कि चौथी बेरी पहली से दोगुने मूल्य की है, जबकि बोर्ड में कुछ नहीं बदला। आक्रामक खेल के पक्ष में पूरी रणनीतिक दलील यही है: झिझक केवल समय बर्बाद नहीं करती, बल्कि आपकी आमदनी को सक्रिय रूप से रीसेट कर देती है।
स्कोर के मानक और सैद्धांतिक अधिकतम
नीचे दी तालिका दिखाती है कि यदि आप कोई कॉम्बो न बनाएँ तो एक निश्चित संख्या की बेरियाँ कितनी मूल्यवान हैं: इन्हें लक्ष्य नहीं, बल्कि न्यूनतम सीमा मानिए। जो खिलाड़ी दौर के अधिकांश भाग में पाँच गुना गुणक बनाए रखता है, वह इन आँकड़ों का लगभग पाँच गुना छू लेगा।
| खाई बेरियाँ | साँप की लंबाई | पहुँचा स्तर | बिना कॉम्बो स्कोर | निरंतर ×5 स्कोर |
|---|---|---|---|---|
| 10 | 13 | 3 | 110 | 550 |
| 25 | 28 | 6 | 350 | 1750 |
| 50 | 53 | 11 | 950 | 4750 |
| 100 | 103 | 21 | 2900 | 14500 |
| 200 | 203 | 41 | 9800 | 49000 |
| 438 (सिद्ध दौर) | 441 (बोर्ड भरा) | 88 | 42312 | 211560 |
यह अंतिम पंक्ति ही ऊपरी सीमा है। बोर्ड में 441 कोशिकाएँ हैं, साँप 3 से शुरू होता है, इसलिए एक सिद्ध दौर 438 बेरियाँ खाता है और साँप के हर कोशिका को घेर लेने के साथ समाप्त होता है। उस बिंदु पर, स्तर 88 है और हर बेरी गुणक से पहले 184 अंक की है। यह किसी ने नहीं किया है। अगर आप कभी यह कर पाए, तो आपके रिकॉर्ड पैनल का "सबसे लंबा" आँकड़ा 441 दिखाएगा और चलने के लिए कोई जगह नहीं बचेगी।
स्पीड, समय और प्रतिक्रिया-खिड़कियाँ
हर कठिनाई सेटिंग तीन संख्याओं से परिभाषित होती है: स्तर 1 पर चालों के बीच का अंतराल, यह अंतराल प्रति स्तर कितने मिलीसेकंड घटता है, और वह न्यूनतम सीमा जिसके नीचे यह कभी नहीं जाता।
| सेटिंग | आरंभिक अंतराल | प्रति स्तर कमी | सबसे तेज़ अंतराल | वह स्तर जहाँ अधिकतम गति आती है |
|---|---|---|---|---|
| शांत | 170 मिलीसेकंड | 6 मिलीसेकंड | 110 मिलीसेकंड | 11 |
| क्लासिक | 130 मिलीसेकंड | 6 मिलीसेकंड | 80 मिलीसेकंड | 10 |
| तीव्र | 100 मिलीसेकंड | 5 मिलीसेकंड | 60 मिलीसेकंड | 9 |
| उन्मत्त | 78 मिलीसेकंड | 4 मिलीसेकंड | 45 मिलीसेकंड | 10 |
प्रति स्तर चाल-अंतराल
| स्तर | शांत | क्लासिक | तीव्र | उन्मत्त |
|---|---|---|---|---|
| 1 | 170 | 130 | 100 | 78 |
| 2 | 164 | 124 | 95 | 74 |
| 3 | 158 | 118 | 90 | 70 |
| 4 | 152 | 112 | 85 | 66 |
| 5 | 146 | 106 | 80 | 62 |
| 6 | 140 | 100 | 75 | 58 |
| 7 | 134 | 94 | 70 | 54 |
| 8 | 128 | 88 | 65 | 50 |
| 9 | 122 | 82 | 60 | 46 |
| 10 और आगे | 116 फिर 110 | 80 | 60 | 45 |
मिलीसेकंड को किसी ऐसी चीज़ में बदलना जिसे आप महसूस कर सकें
"प्रति चाल 80 मिलीसेकंड" जैसी संख्या का कोई मतलब नहीं, जब तक आप इसे कोशिका प्रति सेकंड और बोर्ड पार करने के समय में न बदल दें। यह तालिका यही करती है, और फिर एक अधिक उपयोगी काम करती है: यह दिखाती है कि एक विशिष्ट मानवीय प्रतिक्रिया के दौरान साँप कितना बढ़ जाता है। वयस्कों में सरल दृश्य प्रतिक्रिया-समय आमतौर पर 200 से 250 मिलीसेकंड के आसपास होता है। हमने 250 मिलीसेकंड को एक रूढ़िवादी आँकड़े के रूप में लिया है।
| सेटिंग और स्तर | अंतराल | कोशिकाएँ प्रति सेकंड | बोर्ड पार करने के सेकंड | प्रतिक्रिया के दौरान चली कोशिकाएँ |
|---|---|---|---|---|
| शांत, स्तर 1 | 170 मिलीसेकंड | 5.9 | 3.57 | 1.5 |
| शांत, अधिकतम गति | 110 मिलीसेकंड | 9.1 | 2.31 | 2.3 |
| क्लासिक, स्तर 1 | 130 मिलीसेकंड | 7.7 | 2.73 | 1.9 |
| क्लासिक, अधिकतम गति | 80 मिलीसेकंड | 12.5 | 1.68 | 3.1 |
| तीव्र, स्तर 1 | 100 मिलीसेकंड | 10.0 | 2.10 | 2.5 |
| तीव्र, अधिकतम गति | 60 मिलीसेकंड | 16.7 | 1.26 | 4.2 |
| उन्मत्त, स्तर 1 | 78 मिलीसेकंड | 12.8 | 1.64 | 3.2 |
| उन्मत्त, अधिकतम गति | 45 मिलीसेकंड | 22.2 | 0.95 | 5.6 |
अंतिम स्तंभ को ध्यान से पढ़िए, क्योंकि इसमें पूरे लेख का सबसे महत्वपूर्ण विचार है। उन्मत्त की अधिकतम गति पर, जब तक आपने कोई समस्या देख ली हो और अपनी उँगली हिलाई हो, तब तक साँप पाँच से ज़्यादा कोशिकाएँ चल चुका होता है — बोर्ड की चौड़ाई का एक-चौथाई। आप किसी तेज़ साँप से प्रतिक्रिया करके नहीं निकल सकते। आप केवल योजना बनाकर निकल सकते हैं। हर अच्छा खिलाड़ी असल में दो-तीन सेकंड भविष्य में खेलता है, और दिखने वाला वर्तमान केवल यह पुष्टि करने के लिए है कि योजना अब भी टिकी हुई है।
सुनहरी बेरी की खिड़की
एक सुनहरी बेरी ठीक सात सेकंड जीती है। आप उस तक पहुँच सकते हैं या नहीं, यह पूरी तरह आपके मौजूदा चाल-अंतराल पर निर्भर करता है। 21×21 के बोर्ड पर सबसे बुरी स्थिति एक कोने से दूसरे कोने तक की यात्रा है, यानी 40 कोशिकाओं की मैनहट्टन दूरी।
| सेटिंग और स्तर | अंतराल | 7 सेकंड में उपलब्ध चालें | सबसे बुरी स्थिति 40 कोशिकाएँ — पहुँच सकते हैं? |
|---|---|---|---|
| शांत, स्तर 1 | 170 मिलीसेकंड | 41 | मुश्किल से, बिल्कुल साफ़ रास्ते के साथ |
| शांत, अधिकतम गति | 110 मिलीसेकंड | 63 | आराम से |
| क्लासिक, स्तर 1 | 130 मिलीसेकंड | 53 | हाँ, एक चक्कर की गुंजाइश के साथ |
| क्लासिक, अधिकतम गति | 80 मिलीसेकंड | 87 | आसानी से |
| तीव्र, स्तर 1 | 100 मिलीसेकंड | 70 | आसानी से |
| उन्मत्त, अधिकतम गति | 45 मिलीसेकंड | 155 | लगभग हमेशा |
इससे एक सचमुच अंतर्ज्ञान-विरोधी निष्कर्ष निकलता है: सबसे धीमी सेटिंग पर सुनहरी बेरियाँ पकड़ना सबसे कठिन है। शांत आपको प्रति चाल अधिक सोचने का समय देता है, पर एक स्थिर सात-सेकंड घड़ी के भीतर कम चालें। अगर आप जीवित रहने के बजाय बोनस अंकों का पीछा कर रहे हैं, तो शांत की तुलना में क्लासिक या तीव्र बेहतर शिकारगाह हैं।
कॉम्बो खिड़की चालों में, सेकंडों में नहीं
यही तर्क पाँच-सेकंड कॉम्बो खिड़की पर भी लागू होता है, और प्रभाव और भी प्रबल है। 21×21 के बोर्ड पर किन्हीं दो यादृच्छिक कोशिकाओं के बीच औसत मैनहट्टन दूरी लगभग ठीक 14 कोशिकाएँ है, इसलिए एक बेरी से अगली तक की विशिष्ट यात्रा यही है।
| सेटिंग और स्तर | अंतराल | 5-सेकंड खिड़की में चालें | 14-कोशिका औसत यात्रा पर गुंजाइश |
|---|---|---|---|
| शांत, स्तर 1 | 170 मिलीसेकंड | 29 | लगभग 2.1 गुना |
| क्लासिक, स्तर 1 | 130 मिलीसेकंड | 38 | लगभग 2.7 गुना |
| तीव्र, स्तर 1 | 100 मिलीसेकंड | 50 | लगभग 3.6 गुना |
| उन्मत्त, स्तर 1 | 78 मिलीसेकंड | 64 | लगभग 4.6 गुना |
| उन्मत्त, अधिकतम गति | 45 मिलीसेकंड | 111 | लगभग 7.9 गुना |
दूसरे शब्दों में, तेज़ सेटिंग्स न केवल अधिक जोखिम भरी हैं — वे वहीं हैं जहाँ सबसे ऊँचे स्कोर रहते हैं, क्योंकि वे निरंतर पाँच-गुना गुणक को यथार्थ बना देती हैं। शांत वह सेटिंग है जिस पर सीखा जाता है। यह वह सेटिंग नहीं जिस पर रिकॉर्ड बनाए जाते हैं।
तीन मोड
दीवारें
1997 का मूल नियम-समूह। सीमा ठोस है; उसे छूना दौर समाप्त कर देता है। यह गेम का सबसे शुद्ध संस्करण है और वही जिस पर आपका स्कोर मापा जाना चाहिए यदि आप ख़ुद की तुलना क्लासिक से करना चाहते हैं। दीवारें मोड भटकाव को दंडित करता है: किनारों पर कोई बचाव-द्वार न होने से, परिधि बोर्ड की सबसे ख़तरनाक जगह बन जाती है, सबसे सुरक्षित नहीं।
पोर्टल
Nokia 3310 के Snake II से विरासत में मिला। किसी भी किनारे से निकलिए और आप सामने वाले किनारे से लौट आते हैं। यह गेम को आसान बनाता प्रतीत होता है, और पहले तीस सेकंड तक, यह होता भी है। फिर यह इसे काफ़ी कठिन बना देता है, एक ऐसे कारण से जिसे ज़्यादातर खिलाड़ी कभी शब्दों में नहीं ढालते: दीवारें मोड में, आपका अपना शरीर और सीमा एक ही जुड़ी हुई बाधा बनाते हैं, इसलिए बोर्ड का एक सरल भीतर और बाहर होता है। पोर्टल मोड में, बोर्ड सांस्थितिक रूप से एक टोरस (छल्ला) है, आपका शरीर उसके गिर्द लिपट सकता है, और जिस क्षेत्र में आपने ख़ुद को फँसा लिया है वह कहीं कम स्पष्ट होता है। लंबे पोर्टल दौर सचमुच स्थानिक कल्पना की माँग करते हैं।
पोर्टल मोड वही है जहाँ सैद्धांतिक रूप से सबसे ऊँचे स्कोर संभव हैं, क्योंकि किनारा अब ख़तरा नहीं है और हर बेरी एक के बजाय दो मार्गों से पहुँच योग्य है — कभी-कभी चक्कर काटने वाला रास्ता सीधे रास्ते से छोटा होता है, जो शृंखला को जीवित रखने के लिए बहुत मायने रखता है।
भूलभुलैया
जैसे-जैसे आप स्तर चढ़ते हैं, पत्थर के पाँच लेआउट बदलते जाते हैं, और हर पाँच बेरियों पर व्यवस्था आपके पैरों तले बदल जाती है। लेआउट सममित और नियतात्मक हैं — वही स्तर हमेशा वही दीवारें बनाता है — इसलिए इन्हें केवल झेला नहीं, बल्कि सीखा जा सकता है। दो नियम आपकी रक्षा करते हैं: कोई पत्थर कभी बोर्ड के किनारे पर नहीं रखा जाता, और जिस केंद्रीय पंक्ति में साँप प्रकट होता है वह हमेशा साफ़ रखी जाती है।
भूलभुलैया मोड परखे जाने वाले मूल कौशल को बदल देता है। दीवारें और पोर्टल आपके अपने शरीर द्वारा खपाई जाने वाली जगह के प्रबंधन के बारे में हैं। भूलभुलैया समय के दबाव में मार्ग खोजने के बारे में है, जो Nokia ने 1997 में जो किया उससे कहीं अधिक Nibbler ने 1982 में जो किया उसके निकट है।
| मोड | किनारे | बाधाएँ | इसके लिए आदर्श | मुख्य जोखिम |
|---|---|---|---|---|
| दीवारें | मारक | कोई नहीं | सीखना और स्कोर की निष्पक्ष तुलना | सीमा से सटकर फँस जाना |
| पोर्टल | लपेटने वाले | कोई नहीं | लंबे दौर और ऊँचे स्कोर | यह भूल जाना कि आप किस क्षेत्र में हैं |
| भूलभुलैया | मारक | पाँच बदलते लेआउट | मार्ग-नियोजन और विविधता | दौर के बीच बोर्ड का आकार बदलना |
रणनीति: स्नेक में सचमुच बेहतर कैसे बनें
ऑनलाइन ज़्यादातर स्नेक सलाह "सावधान रहो" और "टकराओ मत" तक सिमट जाती है। यहाँ कुछ अधिक उपयोगी है। इन्हें मोटे तौर पर इस अनुसार क्रमित किया गया है कि आपके विकास के किस पड़ाव पर ये मायने रखने लगते हैं।
1. बेरी का पीछा करना बंद कीजिए
शुरुआती लोग साँप को सीधे भोजन की ओर हाँकते हैं। यह तब तक काम करता है जब तक साँप कोई दस कोशिका लंबा न हो जाए, फिर यह आपको मारने लगता है, क्योंकि एक सीधा रास्ता मौजूदा बेरी के लिए इष्टतम है और यह अनदेखा करता है कि इसके बाद आपकी पूँछ कहाँ होगी। मध्यवर्ती खिलाड़ी एक अलग सवाल पूछते हैं: "मैं वहाँ कैसे पहुँचूँ?" नहीं, बल्कि "जब मैं वहाँ पहुँच जाऊँगा तो बोर्ड कैसा दिखेगा?"।
इस नियम का व्यावहारिक रूप सरल है। किसी रास्ते पर बढ़ने से पहले, जाँच लीजिए कि बेरी की जगह से निकलने का कोई रास्ता है। किसी बंद गली में बेरी खाना — अच्छे दौर इसी तरह ख़त्म होते हैं।
2. अपने शरीर को किनारों से सटाए रखिए
स्नेक में जगह आपस में बदली नहीं जा सकती। जेबों में बिखरी सौ खाली कोशिकाएँ कुछ मूल्य की नहीं; एक ही खुले क्षेत्र में सौ खाली कोशिकाएँ एक पूरा दौर हैं। अपनी खाली जगह को एक टुकड़े में रखने का तरीका है अपने शरीर को परिधि के साथ रखना और केंद्र को खुला छोड़ना, न कि उल्टा। बोर्ड के बाहरी हिस्से के गिर्द लिपटा एक साँप एक बड़ा छेद छोड़ता है। केंद्र में भटकता एक साँप बोर्ड को टुकड़ों में काट देता है।
3. ज़िगज़ैग सीखिए
जगह भरने का क्लासिक तरीका — जिसे कभी-कभी बुस्ट्रोफ़ेडन कहा जाता है, ग्रीक "जैसे बैल हल जोतता है" से — यह है कि एक पूरी पंक्ति की लंबाई तय करें, एक नीचे उतरें, वापस आएँ, और दोहराएँ। यह धीमा लगता है और है भी, पर यह इस बात की गारंटी देता है कि आप किसी क्षेत्र की हर कोशिका को बुहार देंगे और कभी अपना रास्ता नहीं काटेंगे। जब कोई बेरी दूर प्रकट हो और आपका साँप लंबा हो, तो उसकी ओर ज़िगज़ैग चलना सीधी रेखा लेने से लगभग हमेशा ज़्यादा सुरक्षित है।
4. अपनी ही पूँछ का अनुसरण कीजिए
अगर आपको कभी समझ न आए कि क्या करें, तो अपनी ही पूँछ का पीछा कीजिए। चूँकि सिर के हर बार हिलने पर पूँछ एक कोशिका दूर हट जाती है, अपनी ही पूँछ का पीछा करता एक साँप अनिश्चित काल तक जीवित रह सकता है। यह आपातकालीन दाँव है: जब बोर्ड बुरा दिखे और आपको कोई योजना न सूझे, तो अपनी पूँछ के पीछे लग जाइए और समय कमाइए जब तक कोई नई बेरी किसी बेहतर जगह प्रकट न हो जाए।
5. पूँछ-मुक्ति नियम को समझिए
यहाँ एक नियम है जिसे ज़्यादातर कार्यान्वयन ग़लत ढंग से निभाते हैं और इसलिए ज़्यादातर खिलाड़ी इसका फ़ायदा उठाना कभी नहीं सीखते। जब साँप हिलता है और नहीं खाता, तो पूँछ ठीक उसी क्षण अपनी कोशिका छोड़ देती है जब सिर किसी नई कोशिका में घुसता है। इसका मतलब है कि आपकी पूँछ के सिरे द्वारा इस समय घेरी गई कोशिका में सुरक्षित रूप से घुसा जा सकता है: जब तक आप वहाँ पहुँचेंगे, वह ख़ाली होगी।
हमारा संस्करण इसे सही ढंग से लागू करता है। इसका नतीजा यह है कि आप वाक़ई तंग मोड़ ले सकते हैं जो असंभव लगते हैं, अपने ही शरीर के एक कोशिका पीछे-पीछे चलते हुए। पर अपवाद पर ध्यान दीजिए: अगर आप उसी चाल में कोई बेरी खा लेते हैं, तो साँप बढ़ जाता है और पूँछ मुक्त नहीं होती। खाते समय अपनी पूँछ की कोशिका में घुसना मारक है। अनुभवी खिलाड़ी इसे "तंग मोड़ सुरक्षित हैं, बशर्ते रास्ते में भोजन न हो" के रूप में आत्मसात कर लेते हैं।
6. कॉम्बो खेलिए, बेरी नहीं
ऊपर की तालिकाओं को देखते हुए, अंकगणित निर्मम है। हर आठ सेकंड में एक बेरी खाने वाला शांत, सतर्क खिलाड़ी हमेशा के लिए ×1 पर स्कोर बनाता है। हर तीन सेकंड में एक बेरी खाने वाला आक्रामक खिलाड़ी तेरह बेरियों में ×5 पर पहुँच जाता है और उसके बाद प्रति बेरी पाँच गुना कमाता है। आक्रामक खिलाड़ी जल्दी मरेगा। पर वह कई गुना ऊँचे स्कोर के साथ भी समाप्त करेगा।
व्यावहारिक नियम: जैसे ही कोई बेरी प्रकट हो, उसकी ओर बढ़ना शुरू कर दीजिए। पहले अपना मौजूदा फेरा पूरा मत कीजिए। और यह देखने के लिए मत रुकिए कि वह कहाँ जाती है: वह कहीं नहीं जाती।
7. सुनहरी बेरियों के पास से गुज़रिए, उनके लिए चक्कर मत काटिए
एक सुनहरी बेरी तीन साधारण बेरियों के बराबर है, जो बढ़िया है, पर वह एक यादृच्छिक कोशिका में प्रकट होती है और सात सेकंड में समाप्त हो जाती है। अगर वह लगभग आपके रास्ते में है, तो उसे ले लीजिए। अगर उसे पाने से साधारण बेरी पर आपका कॉम्बो टूट जाएगा, तो उसे छोड़ दीजिए। एक बेरी का तीन गुना उस पाँच-गुना गुणक से कम है जिसे आप खो देंगे।
8. लेवल-अप के क्षण को सँभालिए
हर पाँच बेरियों पर, गेम तेज़ हो जाता है — और भूलभुलैया मोड में, दीवारें भी बदल जाती हैं। यह क्षण किसी भी दौर का सबसे ख़तरनाक क्षण है। अगर आप अपनी पाँचवीं, दसवीं या पंद्रहवीं बेरी के पास पहुँच रहे हैं, तो सुनिश्चित कीजिए कि आप वहाँ किसी तंग कोने के बजाय अपने सामने खुली जगह के साथ पहुँचें।
आम ग़लतियाँ और उनके सुधार
| ग़लती | यह आपको क्यों मारती है | सुधार |
|---|---|---|
| हर बेरी की ओर सीधी रेखा लेना | आपके शरीर को बोर्ड के केंद्र में बिखेर देती है | परिधि के साथ रास्ते बनाइए, केंद्र में केवल बटोरने जाइए |
| एक ही चाल-अंतराल में दो बार मुड़ना | दूसरा मोड़ ही असल में होता है; पहला हटा दिया जाता है | प्रति चाल एक निर्णायक कमांड, दनादन थपकियाँ नहीं |
| साँप लंबा होने पर घबराना | घबराहट अल्पदृष्टि निर्णय देती है, जो बोर्ड को खंडित करते हैं | योजना सूझने तक अपनी पूँछ का पीछा करने पर लौट आइए |
| किसी कोने में बेरी खाना | आप केवल एक निकास के साथ पहुँचते हैं, और आपका नया खंड उसे बंद कर देता है | कोनों के पास दीवार के साथ जाइए, उस पर लंबवत नहीं |
| ऊँचे स्कोर के लिए शांत खेलना | प्रति सेकंड कम चालें यानी कॉम्बो खिड़की में कम चालें | शांत पर सीखिए, क्लासिक या तीव्र पर स्कोर बनाइए |
| लेवल-अप के क्षणों को अनदेखा करना | जब आप किसी पैंतरे के बीच होते हैं, तब गति बदल जाती है | अपनी बेरियाँ गिनिए; हर पाँचवीं पर खुली जगह में पहुँचिए |
स्नेक की गणित
स्नेक एक प्रतिक्रिया-आधारित खेल जैसा दिखता है पर एक ग्राफ़-सिद्धांत की समस्या जैसा बर्ताव करता है। यह भाग वैकल्पिक है, पर इसमें हमारे इस ख़ास बोर्ड के बारे में एक तथ्य है जिसकी चर्चा हमने कहीं नहीं देखी, और यह बदल देता है कि एक सिद्ध दौर कैसे खेला जाना चाहिए।
स्नेक को एक ग्रिड-ग्राफ़ के रूप में देखना
बोर्ड को एक ग्राफ़ के रूप में मॉडल कीजिए: हर कोशिका एक शीर्ष है, और दो शीर्ष जुड़े हैं यदि उनकी कोशिकाएँ लंबकोणीय रूप से आसन्न हों। साँप इस ग्राफ़ से होकर एक पथ है जो प्रति चाल एक क़दम बढ़ता है, पीछे नहीं मुड़ सकता, और जब भी भोजन पर उतरता है तो एक शीर्ष बढ़ जाता है। स्नेक के बारे में लगभग हर दिलचस्प सवाल ग्रिड-ग्राफ़ में पथों और चक्रों के बारे में एक सवाल बन जाता है।
"बस एक चक्र का अनुसरण करो" मानक सिद्ध रणनीति क्यों है
यह गारंटी देने का सबसे प्रसिद्ध तरीका कि साँप कभी न मरे, एक हैमिल्टनियन चक्र खोजना है — एक बंद फंदा जो हर कोशिका को ठीक एक बार देखता है — और बस उसका सदा अनुसरण करना। चूँकि यह फंदा हर कोशिका को ढकता है, सारा भोजन अंततः आपके सामने आ गिरता है; और चूँकि यह एक अकेला बंद फंदा है और साँप उससे छोटा है, आप कभी ख़ुद से नहीं टकरा सकते। यह सिद्ध है, और असहनीय रूप से धीमा है, पर यह हमेशा जीतता है।
हमारे 21×21 बोर्ड में ऐसा चक्र क्यों नहीं है
यहाँ दिलचस्प हिस्सा है। बोर्ड को शतरंज की बिसात की तरह रंगिए। हर चाल साँप को एक हल्की कोशिका से गहरी में या इसके उलट ले जाती है, इसलिए किसी भी बंद फंदे को रंग बदलते रहना होगा — जिसका मतलब है कि हैमिल्टनियन चक्र केवल तभी हो सकता है जब हल्की कोशिकाओं की संख्या गहरी कोशिकाओं की संख्या के बराबर हो।
21×21 के बोर्ड पर, 441 कोशिकाएँ हैं: एक रंग की 221 और दूसरे की 220। ये बराबर नहीं हैं, और बराबर हो नहीं सकतीं, क्योंकि 441 विषम है। इसलिए, हमारे बोर्ड पर कोई हैमिल्टनियन चक्र सीधे-सीधे मौजूद ही नहीं है। क्लासिक "सुरक्षित फंदा" रणनीति यहाँ गणितीय रूप से असंभव है।
जो मौजूद है वह एक हैमिल्टनियन पथ है: सभी 441 कोशिकाओं से होकर एक खुला मार्ग। तो एक सिद्ध दौर अब भी संभव है, पर वह कोई बिना सोचा-समझा फंदा नहीं हो सकता। बोर्ड भरने की कोशिश करने वाले किसी भी खिलाड़ी या एल्गोरिथ्म को या तो 420 कोशिकाओं वाले किसी 20×21 उप-क्षेत्र के भीतर काम करना होगा, जो सम है और सचमुच एक चक्र स्वीकार करता है, और बची पंक्ति को अलग से निपटाना होगा; या एक खुले पथ की योजना बनानी होगी और अंत में फिर से स्थिति बनानी होगी। यह हमारे डिज़ाइन का कोई इत्तेफ़ाक़ नहीं है; यह किसी भी विषम-गुणा-विषम आयाम वाले स्नेक बोर्ड का गुण है, उन बहुतों समेत जो आपको ऑनलाइन मिलेंगे।
| बोर्ड | कुल कोशिकाएँ | रंग वितरण | हैमिल्टनियन चक्र संभव? |
|---|---|---|---|
| 20 × 20 | 400 | 200 / 200 | हाँ |
| 21 × 21 (यह गेम) | 441 | 221 / 220 | नहीं — केवल खुला पथ |
| 20 × 21 उप-बोर्ड | 420 | 210 / 210 | हाँ |
| कोई भी विषम × विषम बोर्ड | विषम | एक से असमान | नहीं |
औपचारिक रूप से, स्नेक कितना कठिन है?
इतना कठिन कि कंप्यूटर वैज्ञानिकों ने इस पर शोधपत्र प्रकाशित किए हैं। 2016 में, Marzio De Biasi और Tim Ophelders ने International Conference on Fun with Algorithms में "The Complexity of Snake" शीर्षक से एक शोधपत्र प्रस्तुत किया, जिसे बाद में Theoretical Computer Science में विस्तारित किया गया। उन्होंने दिखाया कि यह तय करना कि क्या कोई साँप किसी भरे ग्रिड-ग्राफ़ पर सारा भोजन बटोर सकता है, NP-कठिन है, और सामान्य ग्रिड-ग्राफ़ों पर यह समस्या PSPACE-पूर्ण है — ठीक उस सरल सवाल की तरह कि क्या कोई साँप बोर्ड पर कोई भोजन न होने पर भी एक विन्यास से दूसरे में जा सकता है।
सीधे शब्दों में: कोई ज्ञात कुशल एल्गोरिथ्म नहीं है जो स्नेक को इष्टतम रूप से खेले, और यह मानने के अच्छे कारण हैं कि कोई है ही नहीं। जब आपको लगे कि कोई स्थिति अनसुलझ है, तो शायद आप वस्तुनिष्ठ रूप से सही हैं। इस समस्या ने रोबोटिक्स के शोधकर्ताओं को भी आकर्षित किया, क्योंकि एक साँप जिसे अपने शरीर से टकराना नहीं है, साँप-नुमा संधियुक्त रोबोटों के गति-नियोजन का एक उचित मॉडल है।
बोर्ड के बारे में कुछ संख्याएँ
| राशि | मान |
|---|---|
| कुल कोशिकाएँ | 441 |
| परिधि की कोशिकाएँ | 80 |
| भीतरी कोशिकाएँ | 361 (एक 19 × 19 क्षेत्र) |
| दौर की शुरुआत में खाली कोशिकाएँ | 437 (441 में से 3 साँप-खंड और 1 बेरी घटाकर) |
| दो कोशिकाओं के बीच अधिकतम मैनहट्टन दूरी | 40 |
| किन्हीं दो कोशिकाओं के बीच औसत मैनहट्टन दूरी | लगभग 14.0 |
| साँप की अधिकतम लंबाई | 441 |
| एक सिद्ध दौर में बेरियाँ | 438 |
| एक सिद्ध दौर में अंतिम स्तर | 88 |
परदे के नीचे: ऐसा स्नेक बनाना जो खिलाड़ी से झूठ न बोले
यह भाग डेवलपरों के लिए है, और हर उस व्यक्ति के लिए जो सोचता है कि कुछ ब्राउज़र स्नेक गेम अच्छे क्यों महसूस होते हैं और कुछ सस्ते क्यों। नीचे का हर बिंदु एक ऐसा दोष है जिसे हमने या तो ठीक किया या डिज़ाइन में जान-बूझकर टाला।
setInterval के बजाय स्थिर टाइमस्टेप
स्नेक चलाने का भोला तरीका है किसी टाइमर पर एक चाल-फ़ंक्शन को बुलाना। यह काम करता प्रतीत होता है। यह तीन तरह से ग़लत है: ब्राउज़र टाइमर बहकते हैं, पृष्ठभूमि टैबों में थ्रॉटल किए जाते हैं, और अंतराल कभी स्क्रीन-रिफ़्रेश से मेल नहीं खाता, जिससे एनिमेशन अटकता है।
सही तरीका है स्थिर-टाइमस्टेप वाला एक संचायक (accumulator)। हर एनिमेशन फ़्रेम पर, मापिए कि कितना वास्तविक समय बीता, उसे एक संचायक में जोड़िए, और उतनी तार्किक चालें चलाइए जितनी वह समय अपने भीतर रखता है। गेम का तर्क सटीक, समान वृद्धियों में आगे बढ़ता है, चाहे फ़्रेम-दर कुछ भी हो; केवल आरेखण स्क्रीन का अनुसरण करता है। दो अतिरिक्त रक्षोपाय मायने रखते हैं: बीते समय को सीमित कीजिए ताकि कोई पृष्ठभूमि टैब लौटने पर साँप को दीवार तक तेज़ न कर दे, और प्रति फ़्रेम भरपाई-चालों की संख्या पर सीमा लगाइए ताकि कोई धीमा उपकरण बेक़ाबू न भागे।
| तरीक़ा | 144 Hz मॉनिटर पर व्यवहार | पृष्ठभूमि टैब में व्यवहार | निष्पक्षता |
|---|---|---|---|
| setInterval | अटकता है; चाल का समय स्क्रीन के समय से बहक जाता है | अप्रत्याशित रूप से थ्रॉटल होता है | गति उपकरण के अनुसार बदलती है |
| प्रति एनिमेशन फ़्रेम एक चाल | प्रति सेकंड 144 चालों पर चलता है | पूरी तरह रुक जाता है | बिल्कुल अनुचित |
| स्थिर-टाइमस्टेप संचायक | सहज, और चाल की लय बिल्कुल सही | सीमित, फिर साफ़-सुथरे ढंग से फिर शुरू | हर जगह एक-सी |
इनपुट क़तार, और वह दोष जो हर पहली कोशिश को मार देता है
लगभग हर घरेलू स्नेक में वही घातक दोष होता है। खिलाड़ी दाएँ चल रहा होता है, झटपट ऊपर फिर बाएँ दबाता है, और दोनों इनपुट अगली चाल से पहले लागू हो जाते हैं — जिससे साँप अपनी ही गर्दन में पलट जाता है और बिना किसी दिखने वाले कारण के मर जाता है। यह "यह गेम ख़राब है" शिकायतों का सबसे आम स्रोत है, और यह खिलाड़ी की ग़लती नहीं है।
सुधार है इनपुट को तुरंत लागू करने के बजाय क़तार में रखना। हर तार्किक चाल क़तार से अधिक-से-अधिक एक दिशा लेती है, और मौजूदा दिशा के ठीक उलट किसी भी दिशा को ठुकरा देती है। खिलाड़ी थोड़ा पहले से एक मोड़ को बफ़र कर सकता है — जो तेज़-प्रतिक्रिया वाला महसूस होता है — पर कभी ग़लती से साँप को दो में मोड़ नहीं सकता।
टक्कर, सटीकता के साथ बनाई गई
जैसा रणनीति भाग में बताया गया, किसी भी ऐसी चाल में जो साँप को नहीं बढ़ाती, पूँछ अपनी कोशिका मुक्त कर देती है। एक सही कार्यान्वयन सिर के लक्ष्य की तुलना आख़िरी को छोड़कर सभी शरीर-खंडों से करता है, जब तक कि यह भोजन-चाल न हो, तब हर खंड गिना जाता है। किसी भी दिशा में ग़लती एक ऐसा गेम बनाती है जो या तो अनुचित रूप से कठोर, या संदिग्ध रूप से उदार महसूस होता है। हमने प्रकाशन से पहले इस व्यवहार को स्वचालित परीक्षणों से सत्यापित किया।
विविक्त ग्रिड पर अंतर्वेशित आरेखण
तर्क पूर्णांक कोशिका-निर्देशांकों पर चलता है; आरेखण भिन्नात्मक स्थानों पर चलता है। दो चालों के बीच, हर खंड वहाँ के, जहाँ वह था, और वहाँ के, जहाँ वह जाएगा, एक मिश्रण पर खींचा जाता है, जिसका भार इस पर निर्भर करता है कि हम मौजूदा अंतराल में कितना आगे बढ़े हैं। नतीजा एक ऐसा साँप है जो कूदने के बजाय सरकता है, और अंतर्निहित ग्रिड की निष्पक्षता पर ज़रा भी समझौता किए बिना।
एक सूक्ष्मता: पोर्टल मोड में, कोई खंड बोर्ड के एक किनारे से दूसरे तक लिपट सकता है, और इस संक्रमण का अंतर्वेशन स्क्रीन के आर-पार एक सीधी लकीर खींच देगा। सुधार है एक कोशिका से लंबी किसी भी छलाँग का पता लगाना और मिश्रण के बजाय संरेखित करना, और उस बिंदु पर खींचे गए शरीर के अनुरेखण को तोड़ देना।
अस्वीकृति-प्रतिचयन के बिना भोजन रखना
आम तरीक़ा है एक यादृच्छिक कोशिका चुनना, जाँचना कि वह घिरी हुई है या नहीं, और घिरी होने पर फिर कोशिश करना। यह शुरू में अच्छा चलता है और अंत में रुग्ण हो जाता है: जब साँप लगभग पूरा बोर्ड भर देता है, तो यह लूप सैकड़ों बार घूम सकता है, और अगर बोर्ड पूरी तरह भरा हो, तो यह कभी समाप्त नहीं होता। हम वास्तव में खाली कोशिकाओं की सूची बनाते हैं और उसमें से एकसमान रूप से चुनते हैं। यह सबसे बुरी स्थिति में तेज़ भी है और सिद्ध रूप से समाप्त होने वाला भी।
जिस पन्ने में यह रहता है उसे न तोड़ना
एक एम्बेड किए गए गेम के अपने मेज़बान के प्रति दायित्व होते हैं। हमारा गेम कभी कोई वैश्विक कीबोर्ड हैंडलर पंजीकृत नहीं करता जो पन्ने से दिशा-कुंजियाँ चुरा ले: इनपुट केवल तब पकड़ा जाता है जब आप सचमुच गेम के साथ बातचीत कर रहे हों, और जैसे ही आप कहीं और क्लिक करते हैं वह मुक्त कर दिया जाता है, और इस दौरान रुक जाता है। जब टैब छिपा हो और जब वह स्क्रॉल से दृश्य से बाहर हो जाए, तब यह रुक जाता है। इसकी पूरी शैली पृथक है ताकि वह आसपास के लेख में न रिसे, और आसपास की वेबसाइट की कोई चीज़ भीतर न रिस सके।
परीक्षण के दौरान मिले दो असली दोष
हम इनके बारे में ईमानदार रहेंगे, क्योंकि इस जैसे लेख आमतौर पर यह दिखावा करते हैं कि विकास बिना किसी घर्षण के चलता है। अंतिम परीक्षण में, एक स्वचालित ब्राउज़र ने दो समस्याएँ पकड़ीं जिन्हें मैनुअल खेल ने छोड़ दिया था।
पहली थी एक वेरिएबल-नाम का टकराव: बोर्ड तत्व के लिए नया जोड़ा गया एक संदर्भ उसी नाम वाले रेंडर-लूप फ़ंक्शन को ढँक रहा था, जिससे पूरा गेम चुपचाप निष्क्रिय हो गया। यह एक अकेली कंसोल त्रुटि फेंकता था और कुछ भी नहीं हिलता था। सबक़ गौरवहीन और सार्वभौमिक है: चीज़ों के नाम सावधानी से रखिए, और जो आपने प्रकाशित किया उसे चलाइए।
दूसरी अधिक सूक्ष्म और अधिक शिक्षाप्रद थी। बोर्ड को आकार देने के लिए, हम ठीक उसी तत्व की चौड़ाई माप रहे थे जिसकी चौड़ाई हम तय कर रहे थे, जो एक फ़ीडबैक लूप बना देता है: बोर्ड सिकुड़ सकता है पर कभी दोबारा बड़ा नहीं हो सकता। सुधार संरचनात्मक था: एक तत्व उपलब्ध जगह मापता है और उसका आकार कभी तय नहीं किया जाता; उसके भीतर एक अलग तत्व ही बोर्ड है और उसे पिक्सेल में आकार दिया जाता है। अगर आप इस लेख से केवल एक वास्तुशिल्पीय विचार याद रखें, तो वह यही हो: किसी ऐसे डिब्बे को कभी मत मापिए जिसके आयामों को आप ख़ुद नियंत्रित करते हैं।
भाषाएँ, सुगम्यता, और किसी भी स्क्रीन पर खेलना
गेम छह भाषाओं में आता है, जिसमें अंग्रेज़ी स्रोत है। यह सही भाषा का पता इस क्रम में जाँचकर अपने-आप लगाता है: पन्ने के पते में एक स्पष्ट भाषा-पैरामीटर, गेम तत्व पर ही एक विशेषता, पन्ने द्वारा घोषित भाषा, पन्ने के सामाजिक मेटाडेटा में लोकेल, सामग्री की भाषा-घोषणा, और अंत में ब्राउज़र की अपनी वरीयता। अगर इनमें से कोई भी कोई समर्थित भाषा न दे, तो यह अंग्रेज़ी पर लौट आता है। आप कोने में दिए चयनकर्ता से परिणाम को हमेशा बदल सकते हैं।
| भाषा | कोड | उस भाषा में शीर्षक | पाठ की दिशा |
|---|---|---|---|
| अंग्रेज़ी | en | Snake | बाएँ से दाएँ |
| फ़्रेंच | fr | Snake | बाएँ से दाएँ |
| स्पेनिश | es | Snake | बाएँ से दाएँ |
| चीनी | zh | 贪吃蛇 | बाएँ से दाएँ |
| हिन्दी | hi | स्नेक | बाएँ से दाएँ |
| अरबी | ar | لعبة الثعبان | दाएँ से बाएँ |
अरबी पूरे इंटरफ़ेस को दाएँ से बाएँ में बदल देती है, एक जान-बूझकर रखे अपवाद के साथ: दिशा-पैड अपनी भौतिक व्यवस्था बनाए रखता है, क्योंकि किसी गेम-कंट्रोलर पर "बाएँ" का मतलब स्क्रीन पर बाएँ ही है, चाहे आप किसी भी भाषा में पढ़ रहे हों।
सुगम्यता की ओर, गेम पूरी तरह कीबोर्ड से प्रयोग योग्य है, हर नियंत्रण उचित लेबल वाला एक असली बटन है, और स्कोर में बदलाव तथा किसी दौर का अंत एक सक्रिय क्षेत्र के ज़रिए स्क्रीन रीडरों को घोषित किए जाते हैं। अगर आपका सिस्टम घटी-गति के लिए सेट है, तो सजावटी एनिमेशन, टक्कर का झटका, और स्पंदन के प्रभाव सब बंद कर दिए जाते हैं, जबकि गेम स्वयं अक्षुण्ण रहता है।
रिस्पॉन्सिव पहलू की ओर, लेआउट ब्राउज़र की चौड़ाई के बजाय गेम की चौड़ाई के अनुसार ढलता है — जो मायने रखता है, क्योंकि किसी सँकरे लेख-स्तंभ के भीतर एम्बेड किए गए गेम को किसी बड़े मॉनिटर पर भी एक सँकरे गेम की तरह बर्ताव करना चाहिए। किसी भूदृश्य (landscape) स्क्रीन पर फ़ुलस्क्रीन में, यह दो-स्तंभ लेआउट में बदल जाता है, एक ओर बोर्ड और दूसरी ओर नियंत्रण, और बोर्ड एक हज़ार पिक्सेल से अधिक चौड़ा तक बढ़ सकता है।
पूरा नियंत्रण संदर्भ
| इनपुट | क्रिया | टिप्पणियाँ |
|---|---|---|
| दिशा-कुंजियाँ | चलाना | मानक लेआउट |
| W, A, S, D | चलाना | QWERTY कीबोर्ड के लिए |
| Z, Q, S, D | चलाना | AZERTY कीबोर्ड के लिए |
| स्पेस | रोकना या फिर शुरू करना | शीर्षक-स्क्रीन से एक दौर भी शुरू करता है |
| R | फिर से शुरू | तुरंत एक नया दौर शुरू करता है |
| F | फ़ुलस्क्रीन | चालू और बंद करता है |
| M | मौन | ध्वनि डिफ़ॉल्ट रूप से मौन है |
| Enter | पुष्टि | मौजूदा कार्ड के बटन को सक्रिय करता है |
| Esc | फ़ुलस्क्रीन से बाहर | ब्राउज़र का मानक व्यवहार |
| बोर्ड पर स्वाइप | चलाना | उँगली उठाए बिना लगातार स्वाइप पहचाने जाते हैं |
| बोर्ड को छूना | शुरू या फिर शुरू | जैसे किसी आर्केड में सिक्का डालना |
| ऑन-स्क्रीन दिशा-पैड | चलाना | टच उपकरणों पर अपने-आप दिखता है |
अक्सर पूछे जाने वाले प्रश्न
स्नेक गेम किसने बनाया?
अकेले किसी एक ने नहीं, और इसीलिए इस सवाल के अलग-अलग जवाब मिलते रहते हैं। यह यांत्रिकी Lane Hauck ने Gremlin Industries में 1976 के आर्केड गेम Blockade के लिए बनाई। एकल-खिलाड़ी, भोजन-खाने वाला वह प्रारूप जिसे हम अब स्नेक कहते हैं, Rock-Ola के Nibbler ने 1982 में स्थापित किया। और जिस संस्करण ने इसे दुनिया भर में मशहूर किया, वह Taneli Armanto ने Nokia में 1997 के 6110 के लिए लिखा। तीनों जवाब टिकाऊ हैं; ये अलग-अलग सवालों के जवाब हैं।
इस गेम में संभव सबसे ऊँचा स्कोर क्या है?
211560, जो सभी उपलब्ध 438 बेरियाँ खाकर, आद्योपांत पाँच-गुना गुणक बनाए रखते हुए, और सुनहरी बेरियों को अनदेखा करके पाया जाता है। व्यवहार में, सुनहरी बेरियाँ एक सैद्धांतिक रूप से सिद्ध दौर को और ऊँचा धकेल देंगी। क्लासिक मोड में एक बहुत अच्छा मानवीय दौर आमतौर पर 2000 और 10000 के बीच कहीं होता है।
क्या गेम हमेशा तेज़ होता रहता है?
नहीं। हर कठिनाई की एक न्यूनतम सीमा है। क्लासिक स्तर 10 पर प्रति चाल 80 मिलीसेकंड के अपने न्यूनतम पर पहुँचता है और उसके बाद कभी तेज़ नहीं होता; उन्मत्त का न्यूनतम 45 मिलीसेकंड है। उस बिंदु के बाद जो कुछ आता है वह केवल इसलिए कठिन होता है क्योंकि आपका साँप लंबा है, और यह कठिनाई का ईमानदार क़िस्म है।
क्या लंबा साँप ज़्यादा अंक का होता है?
अप्रत्यक्ष रूप से। लंबाई ख़ुद में नहीं गिनी जाती, पर लंबाई खाई गई बेरियों का अनुसरण करती है, खाई गई बेरियाँ आपका स्तर तय करती हैं, और स्तर हर आगामी बेरी के आधार मूल्य को दो अंक बढ़ा देता है। दूसरी ओर गुणक का लंबाई से कोई लेना-देना नहीं: वह पूरी तरह इस बारे में है कि आप कितनी तेज़ी से खाते हैं।
शांत पर मेरा स्कोर क्लासिक से कम क्यों है?
क्योंकि कॉम्बो खिड़की सेकंडों में मापी जाती है, चालों में नहीं। धीमा साँप पाँच सेकंड में कम ज़मीन तय करता है, इसलिए शृंखलाएँ अधिक बार टूटती हैं। शांत में जीवित रहना आसान और स्कोर बनाना कठिन है। यह लगभग सबको चौंका देता है।
क्या मेरे स्कोर और आँकड़े कहीं भेजे जाते हैं?
नहीं। सब कुछ — मोड के हिसाब से सर्वोच्च स्कोर, खेले गए दौर, खाई बेरियाँ, सबसे लंबा साँप, कुल समय — आपके अपने ब्राउज़र में स्थानीय रूप से संग्रहीत है। कोई खाता नहीं, कोई सर्वर नहीं, कोई लीडरबोर्ड नहीं, और कोई ट्रैकिंग नहीं। अपने ब्राउज़र का डेटा साफ़ करना आपके रिकॉर्ड मिटा देता है, और रिकॉर्ड पैनल का रीसेट बटन जान-बूझकर वही करता है।
क्या मैं फ़ोन पर कीबोर्ड से, या लैपटॉप पर टच से खेल सकता हूँ?
दोनों हाँ। दिशा-पैड टच उपकरणों पर अपने-आप दिखता है, पर अगर कोई कीबोर्ड जुड़ा हो तो कीबोर्ड सक्रिय रहता है, और टचस्क्रीन वाले लैपटॉप बोर्ड पर स्वाइप कर सकते हैं।
जब मैं पन्ने पर कहीं और क्लिक करता हूँ तो गेम क्यों रुक जाता है?
जान-बूझकर। एक एम्बेड गेम जो आपके लेख पढ़ने की ओर बढ़ जाने के बाद भी आपकी दिशा-कुंजियाँ खपाता रहे, एक झंझट है। जब आप गेम के बाहर किसी चीज़ से बातचीत करते हैं, तो गेम कीबोर्ड मुक्त कर देता है और रुक जाता है, ताकि आप किसी मरे हुए साँप के पास न लौटें।
बेहतर बनने का सबसे तेज़ तरीका क्या है?
दीवारें मोड में क्लासिक स्पीड पर बीस दौर खेलिए, और हर एक में, ख़ुद को केंद्र के बजाय परिधि के साथ रास्ते बनाने के लिए बाध्य कीजिए। यह धीमा महसूस होगा और आपके शुरुआती स्कोर गिरेंगे। दसवें दौर तक, वे पहले से ऊँचे होंगे, क्योंकि आपने बोर्ड को टुकड़ों में बाँटना बंद कर दिया होगा।
शब्दावली
| शब्द | अर्थ |
|---|---|
| टिक (Tick) | साँप की एक तार्किक चाल, एक कोशिका आगे |
| चाल-अंतराल | दो टिक के बीच मिलीसेकंड में समय |
| स्थिर टाइमस्टेप | फ़्रेम-दर चाहे जो हो, गेम-तर्क को सटीक, समान समय-वृद्धियों में चलाना |
| अंतर्वेशन | सहज गति के लिए किसी खंड को उसकी पिछली और मौजूदा कोशिका के बीच में खींचना |
| इनपुट क़तार | प्रतीक्षारत दिशा-बदलावों का एक छोटा बफ़र, प्रति टिक एक खपाया जाता है |
| पूँछ-मुक्ति | वह नियम कि किसी भी ऐसी चाल में जो भोजन न हो, आख़िरी खंड अपनी कोशिका छोड़ देता है |
| कॉम्बो शृंखला | पाँच-सेकंड खिड़की के भीतर लगातार खाई गई बेरियाँ |
| पोर्टल या लपेटने वाला मोड | एक ऐसा मैदान जहाँ एक किनारे से निकलना आपको सामने वाले किनारे से लौटा लाता है |
| ग्रिड-ग्राफ़ | वह ग्राफ़ जिसके शीर्ष ग्रिड-कोशिकाएँ हैं और जिसकी कोरें आसन्न कोशिकाओं को जोड़ती हैं |
| हैमिल्टनियन चक्र | हर कोशिका को ठीक एक बार देखता एक बंद मार्ग |
| हैमिल्टनियन पथ | हर कोशिका को ठीक एक बार देखता एक खुला मार्ग |
| बुस्ट्रोफ़ेडन (Boustrophedon) | आगे-पीछे बुहारने का एक तरीक़ा जो किसी क्षेत्र को भरता है पर ख़ुद को नहीं फँसाता |
| मैनहट्टन दूरी | दो कोशिकाओं के बीच क्षैतिज जमा ऊर्ध्वाधर क़दमों की संख्या |
| NP-कठिन | बहुपद-समय में सत्यापन योग्य सबसे कठिन समस्याओं जितना कठिन, कम-से-कम |
| PSPACE-पूर्ण | बहुपद-मात्रा स्मृति से हल होने वाली सबसे कठिन समस्याओं में से |
हम अब भी ऐसी चीज़ें क्यों बनाते हैं
इस लेख का एक ऐसा संस्करण है जो पुरानी यादों की एक पंक्ति पर ख़त्म होता है, और वह ग़लत नहीं होगा। स्नेक इस दशक में पचास साल का हो रहा है। बहुत-से लोगों के पास इससे जुड़ी एक ठोस स्मृति है: एक ख़ास फ़ोन, एक ख़ास कक्षा, एक ख़ास हरियाली-सी झाईं वाली स्क्रीन।
पर पुरानी यादें वह वजह नहीं हैं जिससे यह गेम अब भी अच्छे ढंग से बनाए जाने का हक़दार है। स्नेक इसलिए टिका है क्योंकि यह उन गिने-चुने खेलों में से एक है जहाँ नियम पूरी तरह दृश्य हैं और गहराई पूरी तरह छिपी हुई। आपसे कुछ भी नहीं छिपाया जाता। कोई अनलॉक नहीं, कोई मेटा-प्रगति नहीं, कोई ऐसा आँकड़ा नहीं जो आपको दिखाया न गया हो। एक सिद्ध दौर तक पहुँचने के लिए ज़रूरी हर चीज़ पहले सेकंड से स्क्रीन पर है — और फिर भी आप यह नहीं कर सकते, क्योंकि कठिनाई कभी जानकारी में नहीं थी, वह योजना में थी।
यह गेम-डिज़ाइन का एक दुर्लभ और ईमानदार क़िस्म है, और यह एक स्थिर टाइमस्टेप, एक सही टक्कर-नियम, खिलाड़ी का सम्मान करती एक इनपुट क़तार, और कूदने के बजाय सरकते एक साँप की मेहनत के लायक़ है। इस लेख की हर चीज़ — हर तालिका, हर सूत्र, हर मिलीसेकंड — इसलिए मौजूद है ताकि जब आप हारें, तो आप जानें कि आपके फ़ैसले ने हराया।
अब, जाइए और क्लासिक में 2000 पार कीजिए। किनारों के साथ रास्ते बनाइए। सुनहरी बेरियों के लिए मत रुकिए।
