आपके पास प्रबंधित करने के लिए दो बहुत अलग चीजें हैं:
सर्वर को आधिकारिक रूप से संपूर्ण विश्व का प्रबंधन करना चाहिए । उसके लिए, एन क्लाइंट (जहां एन "बड़े पैमाने पर" है) के साथ संचार आवश्यक है।
क्लाइंट , सिद्धांत रूप में, पूरी दुनिया के बारे में जान सकता है, लेकिन इसकी आवश्यकता नहीं है । क्लाइंट के लिए, यह जानने के लिए पर्याप्त है कि खिलाड़ी के पास क्या है। उदाहरण के लिए बल्कि एक मोटे ग्रिड की तरह विभाजन के लिए, यह केवल खिलाड़ी के सेल और खिलाड़ी के आसपास 26 कोशिकाओं (या यदि आप एक 2D ग्रिड है 8 कोशिकाओं) को जानने की आवश्यकता होगी। कुछ हद तक बेहतर ग्रिड बेहतर है, लेकिन आपको यह विचार मिलता है।
अब, बहुत सारे पिकअप, "बहुत कुछ" क्या है? आप शायद प्रति सेकंड 5 चीजें खोदते हैं, शायद दो दर्जन नंबर हैं जिन्हें सर्वर पर अपडेट करने की आवश्यकता होती है, और सर्वर को उन कुछ अन्य खिलाड़ी को प्रेषित करना पड़ सकता है जिनकी रुचि का क्षेत्र आपके सेल को ओवरलैप करता है। एक कंप्यूटर के लिए, यह डेटा की काफी हास्यास्पद मात्रा है, और गणना की एक नापाक राशि है। एक ही सेल में सैकड़ों / हजार खिलाड़ी होने पर यह एक चुनौती बन सकता है (तब आपकी पैरेंटिंग बहुत मोटे है)।
सर्वर को पता करने की आवश्यकता नहीं है, न ही पिकअप के रोटेशन या इस तरह के विवरण की परवाह है। क्यों होगा?
ग्राहक वास्तव में या तो परवाह नहीं करता है, क्योंकि यह सिर्फ आंख कैंडी है जिसे ग्राहक मक्खी पर बना सकता है।
सर्वर के दृष्टिकोण से क्या आवश्यक है, यह जानकर कि आप जिस नोड में हैं (30, 40, 50) खोद रहे थे, और यह तय करता है कि यह प्रकार 5 की तीन वस्तुएं जैसे टाइप 7 की एक वस्तु या 7 के साथ एक वस्तु। 3. की एक गिनती है। यह सब के बारे में परवाह है, और यह सब आपको बताता है। इसमें ग्रिड सेल पर अपने हित के क्षेत्र को आगे बढ़ाने वाले किसी व्यक्ति को भेजे गए डेटा में यह जानकारी भी शामिल होगी (यह मानते हुए कि यह तब भी वहां है)।
ग्राहक को तीन वस्तुएं बताई जाती हैं, जो ब्ला ब्ला होती हैं। अब, क्या ग्राहक ASCII- कला मानचित्र प्रदर्शित करता है जहां अब 'D' है या क्या यह गंदगी के ढेर को दिखाता है, यह सब समान है। चाहे बवासीर के अलग-अलग घुमाव हों या क्या केवल आपके खिलाड़ी के पास घूमने वाले सभी समान हैं, भी। यह सिर्फ सामान है जो आपके मॉनिटर पर प्रदर्शित होता है, यह किसी और को प्रभावित नहीं करता है।
तो, कंक्रीट के मामले में जिसे आप केवल गंदगी के पास के ढेर में घुमाना चाहते हैं, आप बस उन सभी वस्तुओं पर एक सीमा की जांच कर सकते हैं जिनके बारे में आप जानते हैं। चूंकि डेटा सेट बड़ा नहीं है, यहां तक कि सब कुछ पर ब्रूट बल काम करेगा।
आप अपने विभाजन के आकार के आधार पर (और कर सकते हैं), तुच्छ रूप से ग्रिड कोशिकाओं को दूर कर सकते हैं जो बहुत दूर हैं।
बेशक, आप अपने सेल को सब-पार्टिशन कर सकते हैं और सुपर स्मार्ट का उपयोग कर सकते हैं। यदि आप चाहें तो kd-Tree का उपयोग करें, लेकिन भारी लाभ की उम्मीद न करें। आप मैनहट्टन डिस्ट्रेस के साथ सामान को दूर कर सकते हैं, या अपने सामान को अपने स्वयं के छोटे ग्रिड में सॉर्ट कर सकते हैं ... लेकिन क्यों?
एक दूरी की जांच (वास्तव में चुकता दूरी, लेकिन यह आपके लिए समान है) एक मात्र दो गुणा और एक अतिरिक्त (MUL, MADD के लिए अनुकूलित है, इसलिए वास्तव में सिर्फ दो संचालन हैं), इसके बाद एक शाखा या सशर्त चाल है। यह किसी भी अन्य ऑपरेशन के रूप में बहुत तेज है, जो एक समय में पूरे ग्रिड कोशिकाओं को prune नहीं करता है। वास्तव में, यह कुछ ऐसा है जो आप GPU पर भी कर सकते हैं ...
यह देखते हुए कि आपके पास कुछ सौ, या कम से कम कुछ हज़ार दूरी की जाँच में एक ही स्थिति के खिलाफ कैसे होगा (चुकता दूरी ठीक काम करती है), आपको वास्तव में उस गणना को करने में ज्यादा परेशानी नहीं होती है, और भी बहुत कुछ ऐसा है जैसे कि यह कैश नहीं है- मैत्रीपूर्ण स्मृति पर अनुकूल पुनरावृत्ति, और सशर्त चालों के साथ, यह सस्ता है। कुछ इस तरह (स्यूडोकोड) rot = r[i] + 1; r[i] = ((dx*dx+dy*dy) < DIST_SQ) ? rot : r[i];
। यह फ्रेम के प्रति कुछ सौ मूल्यों की एक सरणी पर एक पुनरावृत्ति है। कंप्यूटर ऐसा करने के बारे में कम परवाह नहीं कर सकता है, यह सन्निहित भार और भंडार है, साधारण ALU, कोई शाखा नहीं, और केवल कुछ हज़ार पुनरावृत्तियों।
यह (कई-से-एक) समस्या का एक ही वर्ग (कई-से-कई) सर्वर पर नहीं है। वास्तव में, ग्राहक समस्या नहीं है।
minecraft:dirt
) और एक गिनती (30), ताकि जब खिलाड़ी इसे लेने के लिए पर्याप्त करीब हो, तो यह खिलाड़ी की इन्वेंट्री में जितना संभव हो उतना गिनती जोड़ सके। यदि खिलाड़ी के पास केवल 6 आइटम के लिए जगह है और 30 का एक स्टैक जमीन पर है, तो खिलाड़ी 6